Документ модели ItModelDocument
Интерфейс ItModelDocument входит в число интерфейсов, использование которых позволяет передавать данные, которые имеют сложную древовидную многокомпонентную структуру, в которой допускается многократное использование компонентов. Документ предоставляет два способа работы с моделью:
Прямое использование модели, формируемой с использованием объектов геометрического ядра C3D.
Пользователь реализует интерфейсы ItModelPart, ItModelAssembly, ItModelInstance и методы, которые работают с реализациями. Конвертер, в свою очередь, проводит обращение к интерфейсным методам возвращаемых объектов.
Методы интерфейса группируются следующим образом:
а) Группа методов, предназначенных для работы с моделью напрямую:
Метод задания корневого элемента модели:
virtual void C3dModelDocument::SetContent( MbItem* content );
Метод для получения наполнения модели:
virtual MbItem* GetContent();
Метод (устаревший)
virtual map_of_visual_items C3dModelDocument::GetAnnotationItems( eTextForm form );
позволяет получить элементы аннотации, соответствующие элементам геометрической модели.
Аргументы:
eTextForm – форма представления текста.
Метод (устаревший)
virtual void SetAnnotationItems( const map_of_visual_items& visItems );
позволяет задать размеры.
б) Группа методов, предназначенных для формирования модели при импорте:
Метод
virtual ModelAssemblyPtr C3dModelDocument::CreateAssembly(
const std::ItemsSPtrVector& componentItems,
const c3d::string_t& fileName
);
позволяет создать документ с новой сборкой при импорте.
Аргументы:
fileName – имя сборки;
componentItems – тела, добавляемые в сборку.
Метод
virtual ModelPartPtr C3dModelDocument::CreatePart(
const c3d::ItemsSPtrVector& componentItems,
const c3d::string_t& fileName
);
позволяет создать документ с новой деталью при импорте и увеличить счётчик ссылок результирующего документа на 1.
Аргументы:
componentItems – тела, добавляемые в деталь.
fileName – имя детали.
Метод
virtual bool C3dModelDocument::FinishImport( IProgressIndicator * indicator );
позволяет завершить импорт и сохранить документ. Возвращает true, если операция прошла успешно, false в противном случае.
Аргументы:
indicator – объект для отображения хода процесса.
в) Группа методов, предназначенных для получения связанных компонент модели при экспорте:
bool IsAssembly(); // является ли модель сборкой
bool IsEmpty(); // является ли модель пустой (не содержит ни деталь ни сборку)
Метод
virtual ModelAssemblyPtr C3dModelDocument::GetInstanceAssembly();
позволяет получить сборку для экспорта, ассоциированную с документом модели.
Метод
virtual ModelPartPtr C3dModelDocument::GetInstancePart();
позволяет получить деталь для экспорта, ассоциированную с документом модели.
Метод
bool C3dModelDocument::MakeAssembliesUnique();
позволяет преобразовать все сборки и вставки в уникальные компоненты.
Поскольку заранее неизвестно, какая реализация будет применяться для передачи данных, то при импорте вызывается как метод SetContent(), так и один из методов CreateAssembly() или CreatePart(), в зависимости от результата импорта. Соответственно, при экспорте сначала вызываются методы GetInstanceAssembly() или GetInstancePart() в зависимости от результата IsAssembly(), и, только если конвертеру не удаётся сформировать модель, вызывается метод GetContent().
В геометрическом ядре C3D имеется стандартная реализация интерфейса ItModelDocument: C3DModelDocument. При импорте модель формируется с использованием стандартных реализаций интерфейсов ItModelPart, ItModelAssembly, ItModelInstance. При экспорте можно либо задать модель с помощью метода SetContent, либо с использованием реализаций интерфейсов ItModelPart, ItModelAssembly, ItModelInstance.
Интерфейс ItModelDocument и класс C3DModelDocument объявлены в файле conv_model_document.h.