Булева операция с телом выдавливания ===================================== .. _Boolean_Operation_on_Extrusion_Body: .. role:: blue :class: blue .. версия ядра: 118056 .. code-block:: cpp MbResultType ExtrusionResult( MbSolid & solid, MbeCopyMode sameShell, const MbSweptData & sweptData, const MbVector3D & direction, const ExtrusionValues & params, OperationType oType, const MbSNameMaker & operNames, const RPArray & contoursNames, MbSolid *& result ); выполняет построение тела выдавливания и булеву операцию заданного тела с построенным телом. Входными параметрами функции являются: - **solid** – заданное тело для булевой операции; - **sameShell** – режим копирования заданного тела; - **sweptData** – данные об образующих кривых для построения тела выдавливания; - **direction** – направление выдавливания; - **params** – параметры построения, возвращают информацию для построения элементов массива операций до поверхности; - **oType** – тип булевой операции: bo_Union – объединение тел, bo_Intersect – пересечение тел, bo_Difference – вычитание тел; - **operNames** – именователь операции; - **contoursNames** – именователи образующих кривых. Выходным параметром функции является построенное тело **result**. Функция возвращает код результата операции из перечисления :blue:`MbResultType` (см. *mb_operation_result.h*). Функция объявлена в файле *action_solid.h*. Функция представляет собой последовательное объединение двух функций: функции :blue:`ExtrusionSolid`\(), выполняющей построение тела путем выдавливания кривых **sweptData** по заданным параметрам **params** в направлении **direction**, и функции :blue:`BooleanResult`\(), выполняющей булеву операцию **oType** тела **solid** с построенным на предыдущем шаге телом. Функция :blue:`ExtrusionSolid`\() описана в параграфе :ref:`Построение тела выдавливания `, функция :blue:`BooleanResult`\() описана в параграфе :ref:`Булева операция над телами `. Параметр **sameShell** управляет передачей граней, ребер и вершин от исходного тела **solid** построенному телу **result** и может принимать одно из четырех значений: - *cm_Same* = 0 (оболочка не копируется); - *cm_KeepHistory* (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани); - *cm_KeepSurface* (исходная оболочка и её копия имеют общие базовые поверхности); - *cm_Copy* (исходная оболочка и её копия не имеют общих данных). Перечисление :blue:`MbeCopyMode` подробно описано в параграфе :ref:`Копирование множества граней MbFaceShell `. Параметр **oType** определяет тип булевой операции и может принимать три значения: *bo_Union*, *bo_Intersect*, *bo_Difference*. При **oType** = *bo_Union* рассматриваемая функция выполняет объединение тел **solid** и тела выдавливания. При **oType** = *bo_Intersect* рассматриваемая функция выполняет пересечение тел **solid** и тела выдавливания. При **oType** = *bo_Difference* рассматриваемая функция выполняет вычитание из тела **solid** тела выдавливания. Параметры **operNames** и **contoursNames** обеспечивают именование граней, ребер и вершин построенного тела. Функция :blue:`ExtrusionResult`\() при построении тела путем выдавливания кривых имеет те же возможности, что и функция :blue:`ExtrusionSolid`\(): выдавливаемые кривые могут располагаться на плоскости, криволинейной поверхности или в пространстве. Выдавливание может выполняться в прямом, обратном и в обоих направлениях, с уклоном и без уклона граней. Тело может полностью заполнять замкнутые кривые или иметь тонкую стенку. Остановимся только на некоторых возможностях рассматриваемой функции, связанных с булевыми операциями. На рис. 1 показаны тело **solid**, образующая кривая, входящая в данные **sweptData**, и направление выдавливания **direction**: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.3.1.png :width: 12cm :align: center Рис. 1 На рис. 2 приведен результат булевой операции объединения тела **solid** и тонкостенного тела, полученного выдавливанием образующей кривой **sweptData** по направлению **direction**, показанных на рис. 1, на заданное расстояние: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.3.2.png :width: 12cm :align: center Рис. 2 На рис. 3 приведен результат булевой операции объединения тела **solid** и тела, полученного выдавливанием образующей кривой **sweptData** по направлению **direction**, показанных на рис. 1. Выдавливание образующей кривой выполнено в обратном направлении без уклона с опцией «До ближайших объектов» (*params.side2*.\ *way* = sw_shell). .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.3.3.png :width: 12cm :align: center Рис. 3 На рис. 4 приведен результат булевой операции вычитания из тела **solid** тела, полученного выдавливанием образующей кривой **sweptData** по направлению **direction**, показанных на рис. 1: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.3.4.png :width: 12cm :align: center Рис. 4 На рис. 5 приведен результат булевой операции вычитания из тела **solid** тела, полученного выдавливанием образующей кривой **sweptData** по направлению **direction**, показанных на рис. 1. Выдавливание образующей кривой выполнено в обратном направлении без уклона с опцией «До ближайших объектов» (*params.side2*.\ *way* = sw_shell): .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.3.5.png :width: 12cm :align: center Рис. 5 На рис. 6 приведен результат булевой операции пересечения тела **solid** и тела, полученного выдавливанием образующей кривой **sweptData** по направлению **direction**, показанных на рис. 1: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.3.6.png :width: 12cm :align: center Рис. 6 На рис. 7 приведен результат булевой операции пересечения тела **solid** и тела, полученного выдавливанием образующей кривой **sweptData** по направлению **direction**, показанных на рис. 1. Выдавливание образующей кривой выполнено в обратном направлении без уклона с опцией «До ближайших объектов». .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.3.7.png :width: 12cm :align: center Рис. 7 Функция :blue:`ExtrusionResult`\() добавляет в журнал построенного тела строитель :blue:`MbCurveExtrusionSolid`, который содержит все необходимые данные для выполнения операции. Строитель :blue:`MbCurveExtrusionSolid` объявлен в файле *cr_extrusion_solid.h*. В тестовом приложении *test.exe* булева операция с построенным телом выдавливания выполняется командами меню «Создать→Тело→Приклеиванием к телу→Выдавливания кривой», «Создать→Тело→Вырезанием из тела→Выдавливания кривой» и «Создать→Тело→Пересечением с телом→Выдавливания кривой».