Объединение множества тел

Функция

MbResultType UnionSolid(       RPArray<MbSolid> &  solids,
                               MbeCopyMode         sameShells,
                               bool                checkIntersect,
                         const MbSNameMaker &      names,
                               bool                isArray,
                               MbSolid *&          result,
                               RPArray<MbSolid> *  notGluedSolids = NULL );

выполняет объединение тел заданного множества в одно тело.

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

  • solids — множество тел;

  • sameShells — вариант копирования тел множества;

  • checkIntersect — флаг проверки пересечения тел множества (false — не проверять);

  • names — именователь операции;

  • isArray — флаг регулярности множества тел.

Выходными параметрами функции являются построенное тело result и множество тел notGluedSolids, которые оказались не используемыми в операции (указатель может быть равен нулю).

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

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

Рассматриваемая функция работает так же, как функция UnionResult() при значениях параметров последнего solid = 0, sameShell = cm_Same, oType = bo_Union, mergeFlags.mergeFaces = true. Функция выполняет объединение множества тел solids в одно тело result, при этом тела могут не пересекаться друг с другом.

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

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

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

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

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

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

Параметр checkIntersect даёт команду на проверку пересечения тел множества solids между собой. Если параметр checkIntersect == true, то при построении результата выполняется булева операция объединения всех пересекающихся тел множества solids. В противном случае объединение тел заданного множества выполняется простым перекладыванием граней всех тел в построенное тело. Вне зависимости от значения параметра checkIntersect все не пересекающиеся тела множества solids передают свои грани общему промежуточному телу.

Параметр isArray работает только при checkIntersect == true и сообщает о регулярности множества тел solids. Если isArray == true, то тела множества расположены в узлах прямоугольной или круговой сетки и позиции тел заданы в именах граней.

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

Параметр notGluedSolids содержит тела, которые оказались не используемыми в операции из-за невозможности их объединения.

На рис. 1 приведены исходные тела solids:

../../../../_images/M.2.18.1.png

Рис. 1

На рис. 2 приведён результат result объединения тел solids. В данном случае параметр checkIntersect необходимо положить равным true, так как тела solids пересекаются друг с другом.

../../../../_images/M.2.18.2.png

Рис. 2

Функции

MbResultType UnionSolid( const RPArray<MbSolid> & solids,
                         const MbSNameMaker &     names,
                               MbSolid *&         result ),
MbResultType UnionSolid( const c3d::SolidsVector & solids,
                         const MbSNameMaker &      names,
                               MbSolid *&          result ),
MbResultType UnionSolid( const c3d::SolidsSPtrVector & solids,
                         const MbSNameMaker &          names,
                               MbSolid *&              result )

являются упрощёнными вариантами рассматриваемой ранее одноимённой функции, объединяя тела заданного множества простым перекладыванием граней всех тел в одно новое тело. Таким образом, построенное тело и исходные тела имеют одни и те же грани.

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

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