Документ модели ItModelDocument

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

  • Прямое использование модели, формируемой с использованием объектов геометрического ядра C3D.

  • Пользователь реализует интерфейсы ItModelPart, ItModelAssembly, ItModelInstance и методы, которые работают с реализациями. Конвертер, в свою очередь, проводит обращение к интерфейсным методам возвращаемых объектов.

Методы интерфейса группируются следующим образом:

а) Группа методов, предназначенных для работы с моделью напрямую:

  1. Метод задания корневого элемента модели:

virtual void C3dModelDocument::SetContent( MbItem* content );
  1. Метод для получения наполнения модели:

virtual MbItem* GetContent();
  1. Метод (устаревший)

virtual map_of_visual_items C3dModelDocument::GetAnnotationItems( eTextForm form );

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

Аргументы:

eTextForm – форма представления текста.

  1. Метод (устаревший)

virtual void SetAnnotationItems( const map_of_visual_items& visItems );

позволяет задать размеры.

б) Группа методов, предназначенных для формирования модели при импорте:

  1. Метод

virtual ModelAssemblyPtr C3dModelDocument::CreateAssembly(
    const std::ItemsSPtrVector& componentItems,
    const c3d::string_t&        fileName
);

позволяет создать документ с новой сборкой при импорте.

Аргументы:

fileName – имя сборки;

componentItems – тела, добавляемые в сборку.

  1. Метод

virtual ModelPartPtr C3dModelDocument::CreatePart(
    const c3d::ItemsSPtrVector& componentItems,
    const c3d::string_t&        fileName
);

позволяет создать документ с новой деталью при импорте и увеличить счётчик ссылок результирующего документа на 1.

Аргументы:

componentItems – тела, добавляемые в деталь.

fileName – имя детали.

  1. Метод

virtual bool C3dModelDocument::FinishImport( IProgressIndicator * indicator );

позволяет завершить импорт и сохранить документ. Возвращает true, если операция прошла успешно, false в противном случае.

Аргументы:

indicator – объект для отображения хода процесса.

в) Группа методов, предназначенных для получения связанных компонент модели при экспорте:

  1. bool IsAssembly(); // является ли модель сборкой

  2. bool IsEmpty(); // является ли модель пустой (не содержит ни деталь ни сборку)

  3. Метод

virtual ModelAssemblyPtr C3dModelDocument::GetInstanceAssembly();

позволяет получить сборку для экспорта, ассоциированную с документом модели.

  1. Метод

virtual ModelPartPtr C3dModelDocument::GetInstancePart();

позволяет получить деталь для экспорта, ассоциированную с документом модели.

  1. Метод

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.