Булева операция с телом выдавливания
MbResultType ExtrusionResult( MbSolid & solid,
MbeCopyMode sameShell,
const MbSweptData & sweptData,
const MbVector3D & direction,
const ExtrusionValues & params,
OperationType oType,
const MbSNameMaker & operNames,
const RPArray<MbSNameMaker> & contoursNames,
MbSolid *& result );
выполняет построение тела выдавливания и булеву операцию заданного тела с построенным телом.
Входными параметрами функции являются:
solid – заданное тело для булевой операции;
sameShell – режим копирования заданного тела;
sweptData – данные об образующих кривых для построения тела выдавливания;
direction – направление выдавливания;
params – параметры построения, возвращают информацию для построения элементов массива операций до поверхности;
oType – тип булевой операции:
bo_Union – объединение тел,
bo_Intersect – пересечение тел,
bo_Difference – вычитание тел;
operNames – именователь операции;
contoursNames – именователи образующих кривых.
Выходным параметром функции является построенное тело result.
Функция возвращает код результата операции из перечисления MbResultType (см. mb_operation_result.h).
Функция объявлена в файле action_solid.h.
Функция представляет собой последовательное объединение двух функций: функции ExtrusionSolid(), выполняющей построение тела путем выдавливания кривых sweptData по заданным параметрам params в направлении direction, и функции BooleanResult(), выполняющей булеву операцию oType тела solid с построенным на предыдущем шаге телом.
Функция ExtrusionSolid() описана в параграфе Построение тела выдавливания, функция BooleanResult() описана в параграфе Булева операция над телами.
Параметр sameShell управляет передачей граней, ребер и вершин от исходного тела solid построенному телу result и может принимать одно из четырех значений:
cm_Same = 0 (оболочка не копируется);
cm_KeepHistory (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани);
cm_KeepSurface (исходная оболочка и её копия имеют общие базовые поверхности);
cm_Copy (исходная оболочка и её копия не имеют общих данных).
Перечисление MbeCopyMode подробно описано в параграфе Копирование множества граней MbFaceShell.
Параметр oType определяет тип булевой операции и может принимать три значения: bo_Union, bo_Intersect, bo_Difference.
При oType = bo_Union рассматриваемая функция выполняет объединение тел solid и тела выдавливания.
При oType = bo_Intersect рассматриваемая функция выполняет пересечение тел solid и тела выдавливания.
При oType = bo_Difference рассматриваемая функция выполняет вычитание из тела solid тела выдавливания.
Параметры operNames и contoursNames обеспечивают именование граней, ребер и вершин построенного тела.
Функция ExtrusionResult() при построении тела путем выдавливания кривых имеет те же возможности, что и функция ExtrusionSolid(): выдавливаемые кривые могут располагаться на плоскости, криволинейной поверхности или в пространстве. Выдавливание может выполняться в прямом, обратном и в обоих направлениях, с уклоном и без уклона граней. Тело может полностью заполнять замкнутые кривые или иметь тонкую стенку.
Остановимся только на некоторых возможностях рассматриваемой функции, связанных с булевыми операциями.
На рис. 1 показаны тело solid, образующая кривая, входящая в данные sweptData, и направление выдавливания direction:
Рис. 1
На рис. 2 приведен результат булевой операции объединения тела solid и тонкостенного тела, полученного выдавливанием образующей кривой sweptData по направлению direction, показанных на рис. 1, на заданное расстояние:
Рис. 2
На рис. 3 приведен результат булевой операции объединения тела solid и тела, полученного выдавливанием образующей кривой sweptData по направлению direction, показанных на рис. 1. Выдавливание образующей кривой выполнено в обратном направлении без уклона с опцией «До ближайших объектов» (params.side2.way = sw_shell).
Рис. 3
На рис. 4 приведен результат булевой операции вычитания из тела solid тела, полученного выдавливанием образующей кривой sweptData по направлению direction, показанных на рис. 1:
Рис. 4
На рис. 5 приведен результат булевой операции вычитания из тела solid тела, полученного выдавливанием образующей кривой sweptData по направлению direction, показанных на рис. 1. Выдавливание образующей кривой выполнено в обратном направлении без уклона с опцией «До ближайших объектов» (params.side2.way = sw_shell):
Рис. 5
На рис. 6 приведен результат булевой операции пересечения тела solid и тела, полученного выдавливанием образующей кривой sweptData по направлению direction, показанных на рис. 1:
Рис. 6
На рис. 7 приведен результат булевой операции пересечения тела solid и тела, полученного выдавливанием образующей кривой sweptData по направлению direction, показанных на рис. 1. Выдавливание образующей кривой выполнено в обратном направлении без уклона с опцией «До ближайших объектов».
Рис. 7
Функция ExtrusionResult() добавляет в журнал построенного тела строитель MbCurveExtrusionSolid, который содержит все необходимые данные для выполнения операции. Строитель MbCurveExtrusionSolid объявлен в файле cr_extrusion_solid.h.
В тестовом приложении test.exe булева операция с построенным телом выдавливания выполняется командами меню «Создать→Тело→Приклеиванием к телу→Выдавливания кривой», «Создать→Тело→Вырезанием из тела→Выдавливания кривой» и «Создать→Тело→Пересечением с телом→Выдавливания кривой».