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