Булева операция с кинематическим телом
Функция
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:
Рис. 1
На рис. 2 приведен результат булевой операции объединения тела srcSolid и тела, полученного движением образующей кривой sweptData вдоль направляющей кривой spine, показанных на рис. 1:
Рис. 2
На рис. 3 приведен результат булевой операции вычитания из тела srcSolid тела, полученного движением образующей кривой sweptData вдоль направляющей кривой spine, показанных на рис. 1:
Рис. 3
На рис. 4 приведен результат булевой операции пересечения тела srcSolid и тела, полученного движением образующей кривой sweptData вдоль направляющей кривой spine, показанных на рис. 1:
Рис. 4
В тестовом приложении test.exe булева операция с построенным кинематическим телом выполняется командами меню «Создать→Тело→Приклеиванием к телу→Движения кривой», «Создать→Тело→Вырезанием из тела→Движения кривой» и «Создать→Тело→Пересечением с телом→Движения кривой».