Архитектура дерева модели

Для модели, сформированной с использованием объектов геометрического ядра C3D, приняты следующие соглашения:

  • Документ эквивалентен корневому компоненту (компоненту высшего уровня).

  • Компоненту всегда соответствует объект типа MbAssembly в случае формата с граничным представлением. В случае формата с полигональным представлением в качестве компонента допустим объект типа MbMesh. Ожидается, что на компонент назначены свойства, и это выражается в том, что компонент обладает атрибутами типа MbProductInfo и MbPersonOrganizationInfo.

  • Собственными объектами компонента могут быть объекты типа MbSolid, MbWireFrame, MbPointFrame, MbSpaceInstance (как с объектами геометрии внутри, так и содержащие элементы аннотаций MbPMI) и MbPlaneInstance для форматов с граничным представлением, либо MbMesh для полигональных форматов, которые лежат в MbAssembly.

  • Вложенность компонент и их позиционирование осуществляется с помощью объектов типа MbInstance. MbInstance лежит в компоненте верхнего уровня и ссылается на компонент нижнего уровня. Циклические зависимости недопустимы.

Подход, согласно которому модель для обмена данными формируется средствами геометрического ядра C3D, имеет ряд недостатков. Наиболее существенный из них заключается в том, что использование конкретных объектов и конкретной конфигурации затрудняет развитие функционала - внесение любых изменений приведёт к необходимости внесения ответных изменений у всех пользователей. Использование интерфейсов модели, компонента и вставки, реализуемых на стороне пользователя, даёт последним независимость от конкретной реализации.

В терминах интерфейсов архитектура дерева модели выглядит следующим образом:

../../../_images/T.1.7.1.png
  • Документ ItModelDocument() содержит в себе компонент высшего уровня.

  • Компоненты бывают двух типов: детали ItModelPart и сборки ItModelAssembly. Разница между ними лишь в интерпретации, оба типа могут ссылаться на компоненты более низкого уровня.

  • Собственными объектами компонентов могут быть объекты типа MbSolid, MbWireFrame, MbPointFrame, MbSpaceInstance и MbPlaneInstance.

  • Вложенность компонент и их позиционирование осуществляется с помощью объектов ItModelInstance. Циклические зависимости недопустимы.

ItModelInstanceProperties — базовый класс, предок интерфейсов ItModelPart, ItModelAssembly, ItModelInstance. В интерфейсе объявлены методы:

virtual bool SetAttributes( const c3d::AttrSPtrVector & /*attributes*/ );

virtual c3d::AttrSPtrVector GetAttributes();

virtual void GetRequirements( AnnotationSptrVector &, eTextForm ); (устаревший)

virtual void SetRequirements( const AnnotationSptrVector & ); (устаревший)

Интерфейсы ItModelPart и ItModelAssembly имеют одинаковый набор методов, поэтому их можно считать идентичными с точностью до интерпретации. Назначение свойств компонентов, визуальных свойств и технических требований реализуется посредством методов базового класса ItModelInstanceProperties.

Метод PureFileName() вызывается при экспорте и возвращает строку, смысл которой – имя файла компонента.

Методы для работы с собственными объектами:

void GetItems( std::vector< SPtr<MbItem> > & items,
               MbeGettingItemType            itemType,
               bool                          includeInvisible );

void AddItems( const std::vector< SPtr<MbItem> > & items );

GetItems();

AddItems();

Метод GetItems() предназначен для выдачи элементов в контейнер с использованием фильтров типа и видимости, которые формируются на основе значений, возвращаемых методом IConvertorProperty3D:: GetIoPermission().

Метод AddItems() используется при импорте и предназначен для добавления элементов в компонент.

Методы для работы со вставками:

SPtr<ItModelInstance> PrepareInstance();

SPtr<ItModelInstance> NextInstance( bool includeInvisible );

PrepareInstance();

NextInstance();

Метод PrepareInstance() предназначен для осуществления вставки компонента при импорте.

Метод NextInstance() представляет собой итератор вставок при экспорте. Предполагается, что итератор готов к выдаче вставок с начала. Признаком окончания является возврат нулевого указателя. Значение фильтра видимости в процессе обхода соответствует результату вызова метода IConvertorProperty3D:: GetIoPermission( iop_wInvisible ).

Метод GetAnnotationItems( eTextForm textForm ) является устаревшим.

Методы для импорта через плагины:

  • Метод

virtual void ItModelPart::AddMappedItem( MbItem &                    item,
                                         MbPlacement3D const &       placement,
                                         c3d::AttrSPtrVector const & attributes );

позволяет добавить объект с заданной локальной системой координат в корень сборки при импорте. Метод актуален только для формата IFC (cм. параграф Импорт IFC).

Аргументы:

item – объект, добавляемый в модель.

placement – локальная система координат.

  • Метод

virtual SPtr<MbInstance> ItModelPart::NextMappedItem() const;

возвращает объект с заданной локальной системой координат или nullptr. Метод актуален только для формата IFC (cм. параграф Импорт IFC).

  • Метод

virtual void ItModelPart::AddAxesGrid( c3d::ItemSPtr const & );

позволяет добавить группу конструкционных осей. Метод актуален только для формата IFC (cм. параграф Импорт IFC).

  • Метод

virtual c3d::ItemSPtr ItModelPart::NextAxesGrid() const;

возвращает очередную группу конструкционных осей или нуль в случае исчерпания. Метод актуален только для формата IFC (cм. параграф Импорт IFC).

  • Метод

virtual c3d::ItemSPtr NextSpatialAxis() const { return c3d::ItemSPtr{}; }

возвращает очередную пространственную ось или нуль в случае исчерпания.

  • Метод

virtual void AddSpatialAxis( c3d::ItemSPtr const & );

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

  • Метод

virtual c3d::ItemSPtr ItModelPart::NextBoundaryItem();

возвращает следующий объект, ограничивающий площадь или объем. Метод актуален только для формата IFC (cм. параграф Импорт IFC).

  • Метод

virtual SPtr<MbAssistingItem> ItModelPart::NextCoordinateSystem();

возвращает очередную систему координат или нуль в случае исчерпания. Включение и выключение метода при импорте и экспорте возможно с помощью фильтрации SetIoPermission( iop_rCS / iop_wCS ).

Методы для работы с модельным документом и сборками:

virtual void ItModelPart::AddBoundaryItem( c3d::ItemSPtr const &);

добавляет объект, ограничивающий площадь или объем.

virtual void ItModelPart::AddCoordinateSystem( SPtr<MbAssistingItem> const &);

позволяет добавить систему координат. Включение и выключение метода при импорте и экспорте возможно с помощью фильтрации SetIoPermission( iop_rCS / iop_wCS ).

Интерфейсы ItModelPart и ItModelAssembly объявлены в файле conv_model_document.h.

Вставки ItModelInstance

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

Метод void * GetId() позволяет различать вставки эквивалентных компонентов. Если различные вставки возвращают одинаковое значение, то эквивалентность определяется по результатам анализа содержания. В процессе экспорта конвертер стремится к оптимизации модели за счёт многократного использования эквивалентных компонент. Пользователь может предоставить информацию о том, какие компоненты точно не являются эквивалентными для сокращения вычислительных затрат при экспорте.

При экспорте для получения такой информации о вставке как локальная система координат вставки, содержимое вставки, отсутствие наполнения вставки используются методы:

bool GetPlacement( MbPlacement3D & place );

bool IsAssembly();

bool IsEmpty();

Если вставка не пуста, то в зависимости от результата метода IsAssembly() вызывается один из методов:

SPtr<ItModelAssembly> GetInstanceAssembly();

SPtr<ItModelPart> GetInstancePart();

Эти методы возвращают интерфейс компонента, на который ссылается вставка.

Для создания компонентов при импорте предназначены методы:

SPtr<ItModelAssembly> CreateAssembly(const MbPlacement3D &              place,
                                     const std::vector<SPtr<MbItem> > & componentItems,
                                     const c3d::path_string &           fileName );
SPtr<ItModelPart> CreatePart(      MbPlacement3D &              place,
                             const std::vector<SPtr<MbItem> > & componentItems,
                             const c3d::path_string &           fileName );

Результатом работы этих методов является интерфейс компонента, размещение которого в компоненте верхнего уровня описано локальной системой координат place, компонент наполняется элементами из контейнера componentItems, ему соответствует имя файла fileName.

Для размещения во вставке ранее созданных компонентов используются методы:

bool SetAssembly( const MbPlacement3D &   place,
                  const ItModelAssembly * existing );
bool SetPart( const MbPlacement3D & place,
              const ItModelPart *   existing );

Размещение компонента existing определяется локальной системой координат place.

Интерфейс ItModelInstance объявлен в файле conv_model_document.h.