Булева операция с телом вращения ===================================== .. _Boolean_Operation_on_Revolution_Body: .. role:: blue :class: blue .. версия ядра: 118056 Функция .. code-block:: cpp MbResultType RevolutionResult( MbSolid & solid, MbeCopyMode sameShell, const MbSweptData & sweptData, const MbAxis3D & axis, const RevolutionValues & params, OperationType oType, const MbSNameMaker & operNames, const RPArray & contoursNames, MbSolid *& result ); выполняет построение тела вращения по данным **sweptData** и булеву операцию заданного тела **solid** с построенным телом вращения. Входными параметрами функции являются: - **solid** – заданное тело для булевой операции; - **sameShell** – вариант копирования заданного тела; - **sweptData** – данные об образующих кривых для построения тела вращения; - **axis** – ось вращения; - **params** – параметры построения; - **oType** – тип булевой операции: bo_Union – объединение тел, bo_Intersect – пересечение тел, bo_Difference – вычитание тел; - **operNames** – именователь операции; - **contoursNames** – именователи сегментов образующих кривых (контуров), используемых при построении тела вращения. Выходным параметром функции является построенное тело **result**. Функция возвращает код результата операции из перечисления :blue:`MbResultType` (см. *mb_operation_result.h*). Функция объявлена в файле *action_solid.h*. Функция представляет собой последовательное объединение двух функций: функции :blue:`RevolutionSolid`\(), выполняющей построение тела путем вращения кривых **sweptData** по заданным параметрам **params** вокруг оси **axis**, и функции :blue:`BooleanResult`\(), выполняющей булеву операцию **oType** тела **solid** с построенным на предыдущем шаге телом. Функция :blue:`RevolutionSolid`\() описана в параграфе :ref:`Построение тела вращения `, функция :blue:`BooleanResult`\() описана в параграфе :ref:`Булева операция над телами `. Параметр **sameShell** управляет передачей граней, ребер и вершин от исходного тела **solid** построенному телу **result** и может принимать одно из четырех значений: - *cm_Same* = 0 (оболочка не копируется); - *cm_KeepHistory* (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани); - *cm_KeepSurface* (исходная оболочка и её копия имеют общие базовые поверхности); - *cm_Copy* (исходная оболочка и её копия не имеют общих данных). Перечисление :blue:`MbeCopyMode` подробно описано в параграфе :ref:`Копирование множества граней 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** обеспечивают именование граней, ребер и вершин построенного тела. Функция :blue:`RevolutionResult`\() при построении тела путем вращения кривых имеет те же возможности, что и функция :blue:`RevolutionSolid`\(): вращаемые кривые могут располагаться на плоскости, криволинейной поверхности или в пространстве. Вращение может выполняться в прямом, обратном и в обоих направлениях. Тело может полностью заполнять замкнутые кривые или иметь тонкую стенку. Остановимся на некоторых возможностях функции, связанных с булевыми операциями. На рис. 1 показаны тело **solid**, образующая кривая, входящая в данные **sweptData**, и ось вращения **axis**: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.4.1.png :width: 12cm :align: center Рис. 1 На рис. 2 приведен результат булевой операции объединения тела **solid** и тонкостенного тела, полученного вращением образующей кривой **sweptData** вокруг оси **axis**, показанных на рис. 1: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.4.2.png :width: 12cm :align: center Рис. 2 На рис. 3 приведен результат булевой операции объединения тела **solid** и тонкостенного тела, полученного вращением образующей кривой **sweptData** вокруг оси **axis**, показанных на рис. 1. Вращение образующей кривой выполнено в обратном направлении с опцией «До поверхности» (*params.side2*.\ *way* = sw_surface). .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.4.3.png :width: 12cm :align: center Рис. 3 На рис. 4 приведен результат булевой операции вычитания из тела **solid** тела, полученного вращением образующей кривой **sweptData** вокруг оси **axis**, показанных на рис. 1: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.4.4.png :width: 12cm :align: center Рис. 4 На рис. 5 приведен результат булевой операции вычитания из тела **solid** тела, полученного вращением образующей кривой **sweptData** вокруг оси **axis**, показанных на рис. 1. Вращение образующей кривой выполнено в обратном направлении с опцией «До поверхности» (*params.side2*.\ *way* = sw_surface). .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.4.5.png :width: 12cm :align: center Рис. 5 На рис. 6 приведен результат булевой операции пересечения тела **solid** и тела, полученного вращением образующей кривой **sweptData** вокруг оси **axis**, показанных на рис. 1: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.4.6.png :width: 11cm :align: center Рис. 6 На рис. 7 приведен результат булевой операции пересечения тела **solid** и тела, полученного вращением образующей кривой **sweptData** вокруг оси **axis**, показанных на рис. 1. Вращение образующей кривой выполнено в обратном направлении с опцией «До поверхности» (*params.side2*.\ *way* = sw_surface). .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.4.7.png :width: 12cm :align: center Рис. 7 Функция :blue:`RevolutionResult`\() добавляет в журнал построенного тела строитель :blue:`MbCurveRevolutionSolid`, который содержит все необходимые данные для выполнения операции. Строитель :blue:`MbCurveRevolutionSolid` объявлен в файле *cr_revolution_solid.h*. В тестовом приложении *test.exe* булева операция с построенным телом вращения выполняется командами меню «Создать→Тело→Приклеиванием к телу→Вращения кривой», «Создать→Тело→Вырезанием из тела→Вращения кривой» и «Создать→Тело→Пересечением с телом→Вращения кривой».