Булева операция с телом вращения

Функция

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:

../../../../_images/M.2.4.1.png

Рис. 1

На рис. 2 приведен результат булевой операции объединения тела solid и тонкостенного тела, полученного вращением образующей кривой sweptData вокруг оси axis, показанных на рис. 1:

../../../../_images/M.2.4.2.png

Рис. 2

На рис. 3 приведен результат булевой операции объединения тела solid и тонкостенного тела, полученного вращением образующей кривой sweptData вокруг оси axis, показанных на рис. 1. Вращение образующей кривой выполнено в обратном направлении с опцией «До поверхности» (params.side2.way = sw_surface).

../../../../_images/M.2.4.3.png

Рис. 3

На рис. 4 приведен результат булевой операции вычитания из тела solid тела, полученного вращением образующей кривой sweptData вокруг оси axis, показанных на рис. 1:

../../../../_images/M.2.4.4.png

Рис. 4

На рис. 5 приведен результат булевой операции вычитания из тела solid тела, полученного вращением образующей кривой sweptData вокруг оси axis, показанных на рис. 1. Вращение образующей кривой выполнено в обратном направлении с опцией «До поверхности» (params.side2.way = sw_surface).

../../../../_images/M.2.4.5.png

Рис. 5

На рис. 6 приведен результат булевой операции пересечения тела solid и тела, полученного вращением образующей кривой sweptData вокруг оси axis, показанных на рис. 1:

../../../../_images/M.2.4.6.png

Рис. 6

На рис. 7 приведен результат булевой операции пересечения тела solid и тела, полученного вращением образующей кривой sweptData вокруг оси axis, показанных на рис. 1. Вращение образующей кривой выполнено в обратном направлении с опцией «До поверхности» (params.side2.way = sw_surface).

../../../../_images/M.2.4.7.png

Рис. 7

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

В тестовом приложении test.exe булева операция с построенным телом вращения выполняется командами меню «Создать→Тело→Приклеиванием к телу→Вращения кривой», «Создать→Тело→Вырезанием из тела→Вращения кривой» и «Создать→Тело→Пересечением с телом→Вращения кривой».