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

Функция

MbResultType EvolutionResult( const c3d::SolidSPtr &         srcSolid,
                              const MbeCopyMode              copyMode,
                                    OperationType            oType,
                              const MbEvolutionShellParams & evShellParams,
                                    c3d::SolidSPtr &         result );

выполняет построение кинематического тела и булеву операцию заданного тела с построенным телом.

Входными параметрами функции являются:

  • srcSolid – заданное тело для булевой операции;

  • copyMode – режим копирования заданного тела;

  • oType – тип булевой операции:

    bo_Union – объединение тел,

    bo_Intersect – пересечение тел,

    bo_Difference – вычитание тел;

  • evShellParams – исходные данные для создания кинематического тела.

Выходным параметром функции является построенное тело result.

Функция возвращает код результата операции из перечисления MbResultType (см. mb_operation_result.h).

Функция объявлена в файле action_solid.h.

При создании объекта evShellParams с исходными данными для построения используется один из следующих конструкторов (см. op_shell_parameter.h):

MbEvolutionShellParams( const MbSweptData &           sweptData,
                        const MbCurve3D &             spineCurve,
                        const EvolutionValues &       evolParams,
                        const MbSNameMaker &          operName,
                        const RPArray<MbSNameMaker> & contoursNames,
                        const MbSNameMaker &          spineName,
                              IProgressIndicator *    prog = nullptr );
MbEvolutionShellParams( const MbSweptData &           sweptData,
                        const MbWireFrame &           spineFrame,
                        const EvolutionValues &       evolParams,
                        const MbSNameMaker &          operName,
                        const RPArray<MbSNameMaker> & contoursNames,
                        const MbSNameMaker &          spineName,
                              IProgressIndicator *    prog = nullptr );
MbEvolutionShellParams( const MbSweptData &           sweptData,
                        const MbSpine &               spine,
                        const EvolutionValues &       evolParams,
                        const MbSNameMaker &          operName,
                        const RPArray<MbSNameMaker> & contoursNames,
                        const MbSNameMaker &          spineName,
                              IProgressIndicator *    prog = nullptr );
MbEvolutionShellParams( const MbSweptData &           sweptData,
                        const MbSpine &               spine,
                        const EvolutionValues &       evolParams,
                        const MbSNameMaker &          operName,
                        const RPArray<MbSNameMaker> & contoursNames,
                        const MbSNameMaker &          spineName,
                        const VariableSectionValues & varSectVals,
                              IProgressIndicator *    prog = nullptr );

где

  • sweptData – данные об образующей;

  • spineCurve – направляющая кривая;

  • spineFrame – направляющая кривая в виде проволочного каркаса;

  • spine – направляющая кривая c дополнительной информацией;

  • evolParams – параметры операции;

  • operName – именователь операции;

  • contoursNames – именователь контуров образующей;

  • spineName – именователь направляющей;

  • varSectVals – данные, необходимые для построения элемента по траектории с изменяемым сечением;

  • prog – индикатор прогресса выполнения операции.

Функция представляет собой последовательное объединение двух функций: функции EvolutionShell(), выполняющей построение тела путем движения образующих кривых sweptData вдоль направляющей кривой spine (spineCurve, spineFrame), и функции BooleanResult(), выполняющего булеву операцию oType тела srcSolid с построенным на предыдущем шаге кинематическим телом. Функция EvolutionShell() описана в параграфе Построение кинематического тела, функция BooleanResult() описана в параграфе Булева операция над телами.

Параметр copyMode управляет передачей граней, ребер и вершин от исходного тела srcSolid построенному телу result и может принимать одно из четырех значений:

  • cm_Same = 0 (оболочка не копируется);

  • cm_KeepHistory (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани);

  • cm_KeepSurface (исходная оболочка и её копия имеют общие базовые поверхности);

  • cm_Copy (исходная оболочка и её копия не имеют общих данных).

Перечисление MbeCopyMode подробно описано в параграфе Копирование множества граней MbFaceShell.

Параметр oType определяет тип булевой операции и может принимать три значения: bo_Union, bo_Intersect, bo_Difference.

При oType = bo_Union функция выполняет объединение тела srcSolid и кинематического тела.

При oType = bo_Intersect функция выполняет пересечение тел srcSolid и кинематического тела.

При oType = bo_Difference функция выполняет вычитание из тела srcSolid кинематического тела.

Параметры operName и contoursNames обеспечивают именование граней, ребер и вершин построенного тела.

Функция EvolutionResult() при построении тела путем движения кривых имеет те же возможности, что и функция EvolutionShell(): направляющие кривые могут располагаться на плоскости, криволинейной поверхности или в пространстве, тело может полностью заполнять замкнутые кривые или иметь тонкую стенку. Остановимся на некоторых возможностях рассматриваемой функции, связанных с булевыми операциями.

На рис. 1 показаны тело srcSolid, образующая кривая sweptData и направляющая кривая spine:

../../../../_images/M.2.5.1.png

Рис. 1

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

../../../../_images/M.2.5.2.png

Рис. 2

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

../../../../_images/M.2.5.3.png

Рис. 3

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

../../../../_images/M.2.5.4.png

Рис. 4

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