.. role:: blue :class: blue Построение полигонального объекта ================================= .. _Constructing_a_Polygonal_Object: .. версия ядра: Виртуальный метод объектов геометрической модели .. code-block:: cpp MbItem * MbItem::CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbRegDuplicate * iReg ) const; строит полигональный объект, аппроксимирующий рассматриваемый объект геометрической модели. Входными параметрами метода являются: - *stepData* – данные для вычисления шага аппроксимации; - *note* – способ построения полигонального объекта; - *iReg* – регистратор копируемых объектов. В случае успешной работы метод возвращает указатель на вновь построенный объект геометрической модели *MbItem*; в противном случае возвращает ноль. Метод объявлен в файле *item.h* и заголовочных файлах наследников :blue:`MbItem`. Рассматриваемый метод аппроксимирует объекты модели, создавая полигональные копии с аналогичной структурой. Для тела, проволочного каркаса и точечного каркаса рассматриваемый метод создаст полигональный объект :ref:`MbMesh `, аппроксимирующий исходный объект, и вернёт указатель на созданный объект. Каждая триангуляция *grids*\[*i*] объекта :ref:`MbMesh ` будет аппроксимировать *i*-ую грань, каждый полигон *wires*\[*i*] объекта :ref:`MbMesh ` будет аппроксимировать *i*-ое ребро, каждый апекс *peaks*\[*i*] объекта :ref:`MbMesh ` будет аппроксимировать *i*-ую вершину. Для полигонального объекта *MbMesh* рассматриваемый метод создаст полигональную копию. Для вставки рассматриваемый метод создаст вставку с объектом, который создаст этот же метод для содержимого вставки. Для сборочной единицы рассматриваемый метод создаст сборочную единицу с объектами, которые создаст этот же метод для объектов сборочной единицы. Параметр *stepData* управляет густотой сетки полигонального объекта и содержит данные для вычисления шага при движении вдоль кривых и поверхностей объекта модели. Параметр *note* определяет способ построения полигонального объекта. Параметры *stepData* и *note* описаны в параграфе :ref:`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, содержащий только полигоны. .. figure:: ../../pictures/R.1.2.1.png :width: 9cm :align: center Рис. 1 .. figure:: ../../pictures/R.1.2.2.png :width: 9cm :align: center Рис. 2 На рис. 3 приведён полигональный объект сборочной единицы, построенный с параметрами *note.wire* == false, *note.grid* == true, состоящий из сборочной единицы полигональных объектов, аппроксимирующих детали: .. figure:: ../../pictures/R.1.2.3.png :width: 9cm :align: center Рис. 3 Рассматриваемый метод используется для визуализации объектов геометрической модели. Полигональные объекты легко трансформируются, для них можно быстро найти пересечение с прямой линией. На экране рисуется именно полигональная копия объекта геометрической модели, а объект в исходном представлении остаётся за кадром.