Секреты трехмерного проектирования с расширенным форматом C3D

Многие специалисты изо дня в день используют функционал трехмерного моделирования в системах современного автоматизированного проектирования, но далеко не каждый конструктор или проектировщик задумывается о том, что же кроется за ширмой привычных интерфейсных команд, обеспечивающих столь ценимый комфорт и удобство проектирования изделий в 3D. Как правило, на общее впечатление от использования САПР влияет быстродействие при работе с большими сборками, а также скорость загрузки 3D-моделей в систему. В инженерном сообществе вполне справедливо и небезосновательно считается, что за эту часть функционирования отвечает геометрическое ядро. Компания C3D Labs, дочернее предприятие группы АСКОН и резидент ИТ-кластера Сколково, с 2012 года занимается созданием коммерческого ядра C3D Modeler.

Похожее изображение

В этой статье представлены новые возможности разрабатываемого расширенного формата C3D. Итак, большинство пользователей систем автоматизированного проектирования при работе с большими и сложными 3D-моделями сталкиваются с одной и той же проблемой – геометрические модели достаточно долго загружаются в систему, поэтому неизбежно приходится ждать какое-то время, прежде чем можно будет продолжить работу по проектированию изделия.

Добавим к этому необходимость повторять процедуру каждое утро перед началом рабочего дня, и вот мы получаем мелкого, но назойливого раздражителя, а вместе с ним и недовольство пользователя программного приложения.

В сложившейся ситуации разработчики систем автоматизированного проектирования стремятся всячески улучшить показатели загрузки. В частности, в машиностроительной САПР КОМПАС-3D предусмотрено несколько вариантов загрузки информации из файла: модель с историей построения, фасетная модель и габаритный ящик. Пользователь сам выбирает, что ему нужно, и, таким образом, задача решается на уровне приложения.

С другой стороны, разработчики формата JT предусмотрели на уровне архитектуры файла возможность передачи сразу двух представлений геометрии: граничного и полигонального. Это позволяет подгружать при первоначальной загрузке 3D-модели в приложение её фасетное представление (которое сразу может быть передано на отрисовку), а параллельно, если потребуется, загружать более «тяжелое» граничное представление, над которым производится большая часть пользовательских манипуляций в САПР. Учитывая, что JT является открытым форматом, то, соответственно, применить его можно не только в системах проектирования, но и в различных просмотрщиках 3D-моделей или в более сложных программах для работы с метаданными.

Как видно из предыдущих двух примеров, оптимизация работы с файлом является востребованной задачей на уровне конечного приложения, а также на более низком уровне. Поэтому в C3D Labs мы озаботились вопросами повышения производительности при работе с форматом C3D, который является родным для геометрического ядра C3D Modeler. В результате был разработан и реализован расширенный формат хранения геометрической модели, поддерживающий чтение из файла отдельных объектов модели в произвольном порядке и позволяющий получить информацию о структуре модели и ее объектах без загрузки всей модели из файла. Рассмотрим работу с форматом C3D более подробно.

Стандартный формат C3D

При работе со стандартным форматом данных C3D объекты модели записываются последовательно в один набор кластеров File Space (рис. 1), у которого существует единственная точка записи. Когда геометрический объект ссылается на другой объект, внутренний объект записывается внутри ссылающегося на него объекта. При этом объект модели, на который ссылаются несколько других объектов, записывается внутри первого ссылающегося объекта и регистрируется в таблице «Регистрируемых объектов». Все последующие объекты, ссылающиеся на данный объект, должны содержать индекс из таблицы.

Расширенный формат C3D

Рисунок 1. Хранение объектов геометрической модели в стандартном формате C3D

Преимущества такого классического подхода – это минимум накладных расходов при записи и чтении модели, компактность файла, простота программной реализации и удобство использования API. В то же время такая организация работы с данными накладывает ограничения на использование формата C3D:

  • Информация о структуре модели или отдельных ее объектах может быть получена только после прочтения всей модели целиком.
  • Загрузка объектов модели в произвольном порядке и импорт отдельных объектов невозможны, так как: а) информация о позиции хранения объекта в файле C3D отсутствует; б) объект может быть вложен в другой объект или ссылаться на такой объект, для которого не известна позиция хранения.

Чтобы уйти от подобных ограничений, как раз и был разработан расширенный формат C3D.

Расширенный формат C3D

Обновление формата C3D потребовало от команды C3D Labs детальной проработки основных требований к новой структуре. Отчасти они уже были сформулированы ранее – это обеспечение независимого хранения объектов и возможность их выборочного чтения, а также предоставление доступа к информации об объектах геометрической модели без чтения всей модели из файла. Среди дополнительных требований стоит отметить создание новых интерфейсов (для чтения и записи моделей, чтения отдельных объектов модели и пр.) и, что немаловажно, поддержку совместимости с текущим форматом C3D.

Уже на стадии реализации потребовалось решить, куда стоит записывать характеристики объектов, позиции их хранения и информацию о выстроенной иерархии. Следовательно, был разработан механизм создания и хранения оглавления в файле модели. Независимое хранение объектов геометрической модели обеспечивается следующим образом:

  • Внутри объекта записываются только те объекты, которые используются исключительно данным объектом. При этом объекты каждого уровня модели записываются в отдельный File Space, а в процессе записи файла можно переключаться между различными точками записи (рис. 2).
  • В качестве ссылки на объект используется позиция его хранения в файле.

Расширенный формат C3D

Рисунок 2. Хранение объектов геометрической модели в расширенном формате C3D

Что мы имеем в итоге? Реализована однопроходная обработка геометрической модели при записи модели и ее оглавления в файл. При этом дерево объектов геометрической модели (оглавление модели) создается для всех объектов геометрической модели типа Items и записывается в файл в виде плоского списка узлов, где каждый узел дерева хранит данные для определенного объекта:

  • тип объекта,
  • имя объекта,
  • габарит объекта и локальную систему координат (если есть),
  • позицию записи/чтения объекта в файле (индекс кластера и смещение в нем),
  • список непосредственных потомков узла,
  • сведения об атрибутах объекта.

Применение в области САПР

При работе с расширенным форматом C3D в момент загрузки модели можно определить, какие конкретно объекты (по наименованию, типу, размеру или атрибутам) необходимо прочитать и отобразить на экране (рис. 3). Разработанный интерфейс чтения данных поддерживает работу как с расширенным, так и со стандартным форматом C3D, за счет чего обеспечивается совместимость с более ранними версиями файлов.

Использование данного функционала позволит уменьшить время загрузки данных в тех случаях, когда пользователю САПР необходимо частично прочитать информацию из файла, а не грузить всю модель целиком.

Расширенный формат C3D

Рисунок 3. Загрузка геометрических объектов из файла C3D (по наименованию, типу или размеру)

Обновленная структура расширенного формата C3D также позволит оптимизировать алгоритмы чтения и записи данных в формат C3D под многоядерную архитектуру. На сегодняшний день функционал находится в стадии активного развития.

Автор: Татьяна Митина
Источник: http://isicad.ru/

Картинки по запросу формат C3D