Копирование множества граней MbFaceShell

Каждый метод построения, который в составе входящих параметров использует множество граней, представленных в виде MbFaceShell или MbSolid, модифицирует некоторые вершины, рёбра и грани исходных объектов. Для ускорения построений и сохранения неизменным исходного множества граней применяется полное или частичное копирование данных объекта MbFaceShell. В геометрическом ядре C3D используются четыре способа копирования множества граней MbFaceShell, определяемые перечислением MbeCopyMode. Как правило, в методы построения вместе с модифицируемым множеством граней передаётся параметр типа MbeCopyMode, который управляет передачей граней, рёбер и вершин от исходного объекта построенному объекту.

Перечисление MbeCopyMode объявлено в файле mb_enum.h. Параметр типа MbeCopyMode может принимать одно из четырёх значений: cm_Copy, cm_KeepSurface, cm_KeepHistory, cm_Same.

При значении cm_Copy исходное множество граней модифицируемого объекта полностью копируется, поэтому исходный объект и построенный объект не будут иметь общих поверхностей, кривых, граней, рёбер, вершин и других объектов. Этот вариант используется в случаях, когда требуется, чтобы построенный объект не был связан с исходным объектом.

При значении cm_KeepSurface исходный объект и построенный объект будут иметь одни и те же базовые поверхности граней. Этот вариант используется в случаях, когда требуется высокая скорость построения.

При значении cm_KeepHistory исходный объект и построенный объект будут иметь одни и те же вершины, базовые поверхности граней и грани, не модифицированные выполненным построением или другим действием. Этот вариант используется в случаях, когда требуется максимально экономить память.

При значении cm_Same в построенный объект будут перенесены все необходимые данные исходного объекта, поэтому после построения исходный объект должен быть удалён. Этот вариант используется в случаях, когда исходный объект в дальнейшем не нужен и был построен специально для выполненного построения.

Перечисление MbeCopyMode присутствует в методе копирования множества граней MbFaceShell MbFaceShell::Copy( MbeCopyMode, MbShellHistory ). Этот метод используется в операциях построения тел, в составе входящих параметров которых присутствуют другие тела.

При значении перечисления cm_Copy исходное множество граней и его копия не имеют общих данных. Варианту, при котором исходное множество граней и его копия имеют общие базовые поверхности, соответствует значение перечисления cm_KeepSurface. Варианту, при котором исходное множество граней и его копия имеют общие базовые поверхности, вершины и не изменённые операцией грани, соответствует значение перечисления cm_KeepHistory. В этом случае метод Copy(…) использует указатель на объект MbShellHistory, который запоминает соответствие между исходным множеством граней и его копией. После выполнения операции копия множества граней передаётся параметром в метод MbShellHistory::SetOrigins( MbFaceShell & ) для замены в копии не изменённых граней их оригиналами исходного множества граней. Варианту, при котором множество граней в методе Copy(…) не копируется, соответствует значение перечисления cm_Same. Следует заметить, что при неудачном выполнении операции исходное множество граней будет модифицировано.

Для копирования множества граней MbFaceShell можно использовать метод Duplicate( MbRegDuplicate * iReg ). Объект MbRegDuplicate используется для сохранения в копии структуры взаимных ссылок, которая присутствует в исходном множестве граней. Копируемое множество граней и его копия не будут связаны между собой.