Построение полигонального объекта

Виртуальный метод объектов геометрической модели

MbItem * MbItem::CalculateMesh( const MbStepData &     stepData,
                                const MbFormNote &     note,
                                      MbRegDuplicate * iReg ) const;

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

Входными параметрами метода являются:

  • stepData – данные для вычисления шага аппроксимации;

  • note – способ построения полигонального объекта;

  • iReg – регистратор копируемых объектов.

В случае успешной работы метод возвращает указатель на вновь построенный объект геометрической модели MbItem; в противном случае возвращает ноль.

Метод объявлен в файле item.h и заголовочных файлах наследников MbItem.

Рассматриваемый метод аппроксимирует объекты модели, создавая полигональные копии с аналогичной структурой. Для тела, проволочного каркаса и точечного каркаса рассматриваемый метод создаст полигональный объект MbMesh, аппроксимирующий исходный объект, и вернёт указатель на созданный объект. Каждая триангуляция grids[i] объекта MbMesh будет аппроксимировать i-ую грань, каждый полигон wires[i] объекта MbMesh будет аппроксимировать i-ое ребро, каждый апекс peaks[i] объекта MbMesh будет аппроксимировать i-ую вершину. Для полигонального объекта MbMesh рассматриваемый метод создаст полигональную копию. Для вставки рассматриваемый метод создаст вставку с объектом, который создаст этот же метод для содержимого вставки. Для сборочной единицы рассматриваемый метод создаст сборочную единицу с объектами, которые создаст этот же метод для объектов сборочной единицы.

Параметр stepData управляет густотой сетки полигонального объекта и содержит данные для вычисления шага при движении вдоль кривых и поверхностей объекта модели. Параметр note определяет способ построения полигонального объекта. Параметры stepData и note описаны в параграфе Triangulation_Calculation_Control. При note.wire == true рассматриваемый метод заполняет множество указателей на полигоны mesh.wires; при note.*grid* == true рассматриваемый метод заполняет множество указателей на триангуляции mesh.grids (для граней и поверхностей), множество указателей на полигоны mesh.wires (для рёбер), множество указателей на апексы mesh.peakes (для вершин).

Параметр iReg может быть равен нулю. Он служит для передачи вложенным методам информации о уже обработанных объектах.

На рис. 1 приведён полигональный объект тела, построенный с параметрами note.wire == false, note.grid == true, содержащий триангуляции, полигоны и апексы. На рис. 2 приведён полигональный объект тела, построенный с параметрами note.wire == true, note.grid == false, содержащий только полигоны.

../../../../_images/R.1.2.1.png

Рис. 1

../../../../_images/R.1.2.2.png

Рис. 2

На рис. 3 приведён полигональный объект сборочной единицы, построенный с параметрами note.wire == false, note.grid == true, состоящий из сборочной единицы полигональных объектов, аппроксимирующих детали:

../../../../_images/R.1.2.3.png

Рис. 3

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