Разбиение граней тела

Функция

MbResultType SplitSolid(       MbSolid &              solid,
                               MbeCopyMode            sameShell,
                         const RPArray<MbSpaceItem> & spItems,
                               bool                   spSame,
                               RPArray<MbFace> &      selFaces,
                         const MbMergingFlags &       flags,
                         const MbSNameMaker &         names,
                               MbSolid *&             result );

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

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

  • solid — исходное тело;

  • sameShell — режим копирования исходного тела;

  • spItems — пространственные элементы разбиения граней;

  • spSame — флаг использования пространственных элементов разбиения;

  • selFaces — множество разбиваемых граней;

  • flags — флаги слияния элементов оболочки;

  • names — именователь.

Выходным параметром функции является построенное тело result.

Функция возвращает код результата операции из перечисления MbResultType.

Функция объявлена в файле action_solid.h.

Функция разбивает указанные грани selFaces исходного тела solid пространственными объектами spItems, если указанные грани пересекаются с объектами spItems. Объектами spItems могут служить кривые, поверхности или тело.

Для выполнения операции режущие объекты должны полностью пересекать указанные грани исходного тела.

Параметр sameShell управляет передачей граней, ребер и вершин от исходного тела solid построенному телу result и может принимать одно из четырёх значений:

  • cm_Same = 0 (оболочка не копируется);

  • cm_KeepHistory (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани);

  • cm_KeepSurface (исходная оболочка и её копия имеют общие базовые поверхности);

  • cm_Copy (исходная оболочка и её копия не имеют общих данных).

Перечисление MbeCopyMode описано в параграфе Копирование множества граней MbFaceShell.

Параметр spSame управляет копированием пространственных элементов разбиения (true — использовать оригиналы, false — использовать копии).

Параметр flags управляет слиянием элементов оболочки после разбиения:

  • flags.mergeFaces = true — объединить геометрически подобные грани, возникшие как результат разбиения;

  • flags.mergeEdges = true — объединить геометрически подобные рёбра.

Параметр names обеспечивает именование граней, ребер и вершин построенного тела.

На рис. 1 показаны исходное тело solid, разрезаемые грани selFaces и режущая поверхность spItems[0].

../../../../_images/M.2.21.1.png

Рис. 1

На рис. 2 приведено построенное тело result с разбитыми на части указанными гранями. Новые рёбра на запрос MbEdge::IsSplit() возвращают true.

На рис. 3 разбитые грани построенного тела раскрашены в разные цвета:

../../../../_images/M.2.21.2.png

Рис. 2

../../../../_images/M.2.21.3.png

Рис. 3

Функция

MbResultType SplitSolid(       MbSolid &              solid,
                               MbeCopyMode            sameShell,
                         const MbPlacement3D &        spPlace,
                               MbeSenseValue          spType,
                         const RPArray<MbContour> &   spContours,
                               bool                   spSame,
                               RPArray<MbFace> &      selFaces,
                         const MbMergingFlags &       flags,
                         const MbSNameMaker &         names,
                               MbSolid *&             result );

выполняет те же действия, что и рассмотренная выше функция, с той разницей, что вместо разбивающих объектов spItems разбиение граней тела solid выполняют поверхности, построенные выдавливанием двумерных контуров spContours, расположенных в плоскости XY локальной системы координат spPlace. Выдавливание контуров выполняется в направлении оси spPlace.axisZ локальной системы координат контуров на длину, обеспечивающую полное пересечение исходного тела.

Функции SplitSolid() добавляют в журнал построенного тела строитель MbSplitShell, который содержит все необходимые данные для выполнения операции. Строитель MbSplitShell объявлен в файле cr_split_shell.h.

В тестовом приложении test.exe разбиение указанных граней тела выполняется командой меню «Создать → Тело → Обработкой граней → Разбивкой грани».