.. role:: blue :class: blue Разбиение граней тела ===================== .. _Splitting_Body_Faces: .. версия ядра: 118044 Функция .. code-block:: cpp MbResultType SplitSolid( MbSolid & solid, MbeCopyMode sameShell, const RPArray & spItems, bool spSame, RPArray & selFaces, const MbMergingFlags & flags, const MbSNameMaker & names, MbSolid *& result ); выполняет разбиение указанных граней тела пространственными кривыми, поверхностями и оболочками. Пространственные элементы разбиения не должны иметь полных или частичных наложений и самопересечений. Входными параметрами функции являются: - **solid** — исходное тело; - **sameShell** — режим копирования исходного тела; - **spItems** — пространственные элементы разбиения граней; - **spSame** — флаг использования пространственных элементов разбиения; - **selFaces** — множество разбиваемых граней; - **flags** — флаги слияния элементов оболочки; - **names** — именователь. Выходным параметром функции является построенное тело **result**. Функция возвращает код результата операции из перечисления :blue:`MbResultType`. Функция объявлена в файле *action_solid.h*. Функция разбивает указанные грани **selFaces** исходного тела **solid** пространственными объектами **spItems**, если указанные грани пересекаются с объектами **spItems**. Объектами **spItems** могут служить кривые, поверхности или тело. Для выполнения операции режущие объекты должны полностью пересекать указанные грани исходного тела. Параметр **sameShell** управляет передачей граней, ребер и вершин от исходного тела **solid** построенному телу **result** и может принимать одно из четырёх значений: - *cm_Same* = 0 (оболочка не копируется); - *cm_KeepHistory* (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани); - *cm_KeepSurface* (исходная оболочка и её копия имеют общие базовые поверхности); - *cm_Copy* (исходная оболочка и её копия не имеют общих данных). Перечисление :blue:`MbeCopyMode` описано в параграфе :ref:`Копирование множества граней MbFaceShell `. Параметр **spSame** управляет копированием пространственных элементов разбиения (*true* — использовать оригиналы, *false* — использовать копии). Параметр **flags** управляет слиянием элементов оболочки после разбиения: - **flags**.\ *mergeFaces* = *true* — объединить геометрически подобные грани, возникшие как результат разбиения; - **flags**.\ *mergeEdges* = *true* — объединить геометрически подобные рёбра. Параметр **names** обеспечивает именование граней, ребер и вершин построенного тела. На рис. 1 показаны исходное тело **solid**, разрезаемые грани **selFaces** и режущая поверхность **spItems**\[0\]. .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.21.1.png :width: 12cm :align: center Рис. 1 На рис. 2 приведено построенное тело **result** с разбитыми на части указанными гранями. Новые рёбра на запрос :blue:`MbEdge`\::\ :blue:`IsSplit`\() возвращают *true*. На рис. 3 разбитые грани построенного тела раскрашены в разные цвета: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.21.2.png :width: 10cm :align: center Рис. 2 .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.21.3.png :width: 10cm :align: center Рис. 3 Функция .. code-block:: cpp MbResultType SplitSolid( MbSolid & solid, MbeCopyMode sameShell, const MbPlacement3D & spPlace, MbeSenseValue spType, const RPArray & spContours, bool spSame, RPArray & selFaces, const MbMergingFlags & flags, const MbSNameMaker & names, MbSolid *& result ); выполняет те же действия, что и рассмотренная выше функция, с той разницей, что вместо разбивающих объектов **spItems** разбиение граней тела **solid** выполняют поверхности, построенные выдавливанием двумерных контуров **spContours**, расположенных в плоскости XY локальной системы координат **spPlace**. Выдавливание контуров выполняется в направлении оси **spPlace.axisZ** локальной системы координат контуров на длину, обеспечивающую полное пересечение исходного тела. Функции :blue:`SplitSolid`\() добавляют в журнал построенного тела строитель :blue:`MbSplitShell`, который содержит все необходимые данные для выполнения операции. Строитель :blue:`MbSplitShell` объявлен в файле *cr_split_shell.h*. В тестовом приложении *test.exe* разбиение указанных граней тела выполняется командой меню «Создать → Тело → Обработкой граней → Разбивкой грани».