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