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

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:

../../../../_images/M.2.3.1.png

Рис. 1

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

../../../../_images/M.2.3.2.png

Рис. 2

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

../../../../_images/M.2.3.3.png

Рис. 3

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

../../../../_images/M.2.3.4.png

Рис. 4

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

../../../../_images/M.2.3.5.png

Рис. 5

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

../../../../_images/M.2.3.6.png

Рис. 6

На рис. 7 приведен результат булевой операции пересечения тела solid и тела, полученного выдавливанием образующей кривой sweptData по направлению direction, показанных на рис. 1. Выдавливание образующей кривой выполнено в обратном направлении без уклона с опцией «До ближайших объектов».

../../../../_images/M.2.3.7.png

Рис. 7

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

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