Разбиение граней тела
Функция
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].
Рис. 1
На рис. 2 приведено построенное тело result с разбитыми на части указанными гранями. Новые рёбра на запрос MbEdge::IsSplit() возвращают true.
На рис. 3 разбитые грани построенного тела раскрашены в разные цвета:
Рис. 2
Рис. 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 разбиение указанных граней тела выполняется командой меню «Создать → Тело → Обработкой граней → Разбивкой грани».