.. role:: blue :class: blue Копирование множества граней MbFaceShell ======================================== .. _Copying_a_Set_of_Faces: .. версия ядра: Каждый метод построения, который в составе входящих параметров использует множество граней, представленных в виде :ref:`MbFaceShell ` или :ref:`MbSolid `, модифицирует некоторые вершины, рёбра и грани исходных объектов. Для ускорения построений и сохранения неизменным исходного множества граней применяется полное или частичное копирование данных объекта :blue:`MbFaceShell`. В геометрическом ядре C3D используются четыре способа копирования множества граней :blue:`MbFaceShell`, определяемые перечислением MbeCopyMode. Как правило, в методы построения вместе с модифицируемым множеством граней передаётся параметр типа MbeCopyMode, который управляет передачей граней, рёбер и вершин от исходного объекта построенному объекту. Перечисление :blue:`MbeCopyMode` объявлено в файле *mb_enum.h*. Параметр типа :blue:`MbeCopyMode` может принимать одно из четырёх значений: *cm_Copy*, *cm_KeepSurface*, *cm_KeepHistory*, *cm_Same*. При значении *cm_Copy* исходное множество граней модифицируемого объекта полностью копируется, поэтому исходный объект и построенный объект не будут иметь общих поверхностей, кривых, граней, рёбер, вершин и других объектов. Этот вариант используется в случаях, когда требуется, чтобы построенный объект не был связан с исходным объектом. При значении *cm_KeepSurface* исходный объект и построенный объект будут иметь одни и те же базовые поверхности граней. Этот вариант используется в случаях, когда требуется высокая скорость построения. При значении *cm_KeepHistory* исходный объект и построенный объект будут иметь одни и те же вершины, базовые поверхности граней и грани, не модифицированные выполненным построением или другим действием. Этот вариант используется в случаях, когда требуется максимально экономить память. При значении *cm_Same* в построенный объект будут перенесены все необходимые данные исходного объекта, поэтому после построения исходный объект должен быть удалён. Этот вариант используется в случаях, когда исходный объект в дальнейшем не нужен и был построен специально для выполненного построения. Перечисление MbeCopyMode присутствует в методе копирования множества граней :blue:`MbFaceShell` MbFaceShell::Copy( MbeCopyMode, MbShellHistory ). Этот метод используется в операциях построения тел, в составе входящих параметров которых присутствуют другие тела. При значении перечисления *cm_Copy* исходное множество граней и его копия не имеют общих данных. Варианту, при котором исходное множество граней и его копия имеют общие базовые поверхности, соответствует значение перечисления *cm_KeepSurface*. Варианту, при котором исходное множество граней и его копия имеют общие базовые поверхности, вершины и не изменённые операцией грани, соответствует значение перечисления *cm_KeepHistory*. В этом случае метод :blue:`Copy`\(...) использует указатель на объект :blue:`MbShellHistory`, который запоминает соответствие между исходным множеством граней и его копией. После выполнения операции копия множества граней передаётся параметром в метод MbShellHistory:::blue:`SetOrigins`\( MbFaceShell & ) для замены в копии не изменённых граней их оригиналами исходного множества граней. Варианту, при котором множество граней в методе :blue:`Copy`\(...) не копируется, соответствует значение перечисления *cm_Same*. Следует заметить, что при неудачном выполнении операции исходное множество граней будет модифицировано. Для копирования множества граней :blue:`MbFaceShell` можно использовать метод :blue:`Duplicate`\( MbRegDuplicate * iReg ). Объект :blue:`MbRegDuplicate` используется для сохранения в копии структуры взаимных ссылок, которая присутствует в исходном множестве граней. Копируемое множество граней и его копия не будут связаны между собой.