Предисловие от C3D Labs
Многие специалисты изо дня в день используют функционал трехмерного моделирования в системах автоматизированного проектирования, но далеко не каждый конструктор или проектировщик задумывается о том, что же кроется за ширмой привычных интерфейсных команд, обеспечивающих столь ценимый комфорт и удобство проектирования изделий в 3D. Как правило, на общее впечатление от использования САПР влияет быстродействие при работе с большими сборками, а также скорость загрузки 3D-моделей в систему. В инженерном сообществе вполне справедливо и небезосновательно считается, что за эту часть функционирования отвечает геометрическое ядро. Компания C3D Labs, дочернее предприятие группы АСКОН и резидент ИТ-кластера Сколково, с 2012 года занимается созданием коммерческого ядра C3D Modeler. Мы уже рассказывали ранее про оптимизацию вычислений в САПР. В этой статье представлены новые возможности разрабатываемого расширенного формата C3D.
***
В сложившейся ситуации разработчики систем автоматизированного проектирования стремятся всячески улучшить показатели загрузки. В частности, в машиностроительной САПР КОМПАС-3D предусмотрено несколько вариантов загрузки информации из файла: модель с историей построения, фасетная модель и габаритный ящик. Пользователь сам выбирает, что ему нужно, и, таким образом, задача решается на уровне приложения.
С другой стороны, разработчики формата JT предусмотрели на уровне архитектуры файла возможность передачи сразу двух представлений геометрии: граничного и полигонального. Это позволяет подгружать при первоначальной загрузке 3D-модели в приложение её фасетное представление (которое сразу может быть передано на отрисовку), а параллельно, если потребуется, загружать более «тяжелое» граничное представление, над которым производится большая часть пользовательских манипуляций в САПР. Учитывая, что JT является открытым форматом, то, соответственно, применить его можно не только в системах проектирования, но и в различных просмотрщиках 3D-моделей или в более сложных программах для работы с метаданными.
Как видно из предыдущих двух примеров, оптимизация работы с файлом является востребованной задачей на уровне конечного приложения, а также на более низком уровне. Поэтому в C3D Labs мы озаботились вопросами повышения производительности при работе с форматом C3D, который является родным для геометрического ядра C3D Modeler. В результате был разработан и реализован расширенный формат хранения геометрической модели, поддерживающий чтение из файла отдельных объектов модели в произвольном порядке и позволяющий получить информацию о структуре модели и ее объектах без загрузки всей модели из файла.
Рассмотрим работу с форматом C3D более подробно.
Стандартный формат C3D
При работе со стандартным форматом данных C3D объекты модели записываются последовательно в один набор кластеров File Space (рис. 1), у которого существует единственная точка записи. Когда геометрический объект ссылается на другой объект, внутренний объект записывается внутри ссылающегося на него объекта. При этом объект модели, на который ссылаются несколько других объектов, записывается внутри первого ссылающегося объекта и регистрируется в таблице «Регистрируемых объектов». Все последующие объекты, ссылающиеся на данный объект, должны содержать индекс из таблицы.Рисунок 1. Хранение объектов геометрической модели в стандартном формате C3D
- Информация о структуре модели или отдельных ее объектах может быть получена только после прочтения всей модели целиком.
- Загрузка объектов модели в произвольном порядке и импорт отдельных объектов невозможны, так как: а) информация о позиции хранения объекта в файле C3D отсутствует; б) объект может быть вложен в другой объект или ссылаться на такой объект, для которого не известна позиция хранения.
Расширенный формат C3D
Обновление формата C3D потребовало от команды C3D Labs детальной проработки основных требований к новой структуре. Отчасти они уже были сформулированы ранее – это обеспечение независимого хранения объектов и возможность их выборочного чтения, а также предоставление доступа к информации об объектах геометрической модели без чтения всей модели из файла. Среди дополнительных требований стоит отметить создание новых интерфейсов (для чтения и записи моделей, чтения отдельных объектов модели и пр.) и, что немаловажно, поддержку совместимости с текущим форматом C3D.Уже на стадии реализации потребовалось решить, куда стоит записывать характеристики объектов, позиции их хранения и информацию о выстроенной иерархии. Следовательно, был разработан механизм создания и хранения оглавления в файле модели. Независимое хранение объектов геометрической модели обеспечивается следующим образом:
- Внутри объекта записываются только те объекты, которые используются исключительно данным объектом. При этом объекты каждого уровня модели записываются в отдельный File Space, а в процессе записи файла можно переключаться между различными точками записи (рис. 2).
- В качестве ссылки на объект используется позиция его хранения в файле.
Рисунок 2. Хранение объектов геометрической модели в расширенном формате C3D
- тип объекта,
- имя объекта,
- габарит объекта и локальную систему координат (если есть),
- позицию записи/чтения объекта в файле (индекс кластера и смещение в нем),
- список непосредственных потомков узла,
- сведения об атрибутах объекта.
Применение в области САПР
При работе с расширенным форматом C3D в момент загрузки модели можно определить, какие конкретно объекты (по наименованию, типу, размеру или атрибутам) необходимо прочитать и отобразить на экране (рис. 3). Разработанный интерфейс чтения данных поддерживает работу как с расширенным, так и со стандартным форматом C3D, за счет чего обеспечивается совместимость с более ранними версиями файлов. Использование данного функционала позволит уменьшить время загрузки данных в тех случаях, когда пользователю САПР необходимо частично прочитать информацию из файла, а не грузить всю модель целиком.Рисунок 3. Загрузка геометрических объектов из файла C3D (по наименованию, типу или размеру)
***