.. role:: blue :class: blue Множество граней MbFaceShell ============================ .. _MbFaceShell_Set_of_Faces: .. версия ядра: Класс :blue:`MbFaceShell` объявлен в файле *topology_faceset.h*. Множество граней :blue:`MbFaceShell` является наследником топологического объекта :ref:`MbTopItem `. Структура данных :blue:`MbFaceShell` содержит множество граней RPArray<:ref:`MbFace `> **faceSet** и признак замкнутости *closed* множества граней. У множества граней есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов множества граней. Множество граней, как правило, описывает связный кусок поверхности моделируемого объекта. Связанные между собой грани множества удовлетворяют определённым условиям, а именно: грани стыкуются между собой по общим рёбрам, в каждом ребре стыкуются только две грани, причём грани стыкуются так, что внешняя сторона одной грани переходит во внешнюю сторону другой грани, и образуемая стыкующимися гранями общая поверхность не должна иметь самопересечений. На рис. 1 приведено множество связанных между собой граней. Все рёбра граней входят в два цикла, у всех рёбер указатели **facePlus** и **faceMinus** не равны нулю, а кривые :ref:`MbSurfaceIntersectionCurve `, на которых построены рёбра граней, имеют **curveOne.surface** != **curveTwo.surface**. .. figure:: /MODELER/TOPOLOGICAL_OBJECTS/pictures/O.7.8.1.png :width: 10cm :align: center Рис. 1 Грани, приведённые на рисунке, образуют общую замкнутую поверхность, внешняя сторона каждой грани переходит во внешнюю сторону соседней грани. У множества граней, не имеющего ни одного краевого ребра, признак *closed* принимает значение true. Если хотя бы одна грань множества имеет хотя бы одно краевое ребро, то признак *closed* множества граней принимает значение false. На рис. 2 приведено множество граней, некоторые из которых имеют краевые рёбра. Краевые рёбра входят только в один цикл и у краевых рёбер грани только один из указателей **facePlus** или **faceMinus** не равен нулю, а кривые :ref:`MbSurfaceIntersectionCurve `, на которых построены рёбра, имеют **curveOne.surface** == **curveTwo.surface** и параметр *buildType = cbt_Boundary*. Полюсное ребро не является краевым, так как не образует край. .. figure:: /MODELER/TOPOLOGICAL_OBJECTS/pictures/O.7.8.2.png :width: 10cm :align: center Рис. 2 Связное множество граней называют *замкнутой оболочкой*, если грани множества не имеют края. Если стыкующиеся друг с другом грани имеют хотя бы одно краевое ребро, то такое связное множество граней называют *незамкнутой оболочкой*. Подчеркнём, что замкнутая оболочка и незамкнутая оболочка представляют собой связное множество стыкующихся друг с другом граней. Множество граней может состоять из нескольких не связанных между собой частей. На рис. 3 приведено множество граней, описывающее две незамкнутые оболочки. .. figure:: /MODELER/TOPOLOGICAL_OBJECTS/pictures/O.7.8.3.png :width: 10cm :align: center Рис. 3 Формально на грани множества не наложено никаких ограничений. Множество граней может состоять из отдельных граней. На рис. 4 приведено множество не связанных между собой граней. Каждая грань, приведённая на рис., образует отдельную оболочку, все рёбра граней являются краевыми. .. figure:: /MODELER/TOPOLOGICAL_OBJECTS/pictures/O.7.8.4.png :width: 10cm :align: center Рис. 4 Основными методами оболочки являются методы преобразования её в пространстве: void :blue:`Move`\( const :ref:`MbVector3D ` & **v**, MbRegTransform * iReg = NULL ), void :blue:`Rotate`\( const MbAxis3D & **axis**, double **angle**, MbRegTransform * iReg = NULL ), void :blue:`Transform`\( const :ref:`MbMatrix3D ` & **m**, MbRegTransform * iReg = NULL ), методы поиска граней, рёбер и вершин, а также методы определения положения точки относительно замкнутой оболочки: bool :blue:`DistanceToBound`\( const :ref:`MbCartPoint3D ` &, ...), bool :blue:`PointClassification`\( const :ref:`MbCartPoint3D ` &, ...). Незамкнутая оболочка описывает только часть граничной поверхности моделируемого объекта. Незамкнутые оболочки используются для поверхностного моделирования. Если к замкнутой оболочке добавить множество точек, лежащих внутри неё, то мы получим твердое тело. Замкнутые оболочки используются для твердотельного моделирования. Обрезка и стыковка граней выполняется одновременно с построением оболочки. Это обеспечивают методы геометрического ядра C3D. На базе замкнутых и незамкнутых оболочек строятся объекты геометрической модели.