.. role:: blue :class: blue Построение симметричного тела ============================== .. _Constructing_a_Symmetrical_Body: .. версия ядра: 118041 Функция .. code-block:: cpp MbResultType SymmetrySolid( MbSolid & solid, MbeCopyMode sameShell, const MbSymmetrySolidParams & symParams, c3d::SolidSPtr & result ); выполняет построение симметричного тела с заданной плоскостью симметрии. Входными параметрами функции являются: - **solid** -- исходное тело; - **sameShell** -- режим копирования исходного тела; - **symParams** -- параметры операции. Выходным параметром функции является построенное тело **result**. Функция возвращает код результата операции из перечисления :blue:`MbResultType`. Функция объявлена в файле *action_solid.h*. Параметр **sameShell** может принимать одно из четырех значений: - *cm_Same* = 0 (оболочка не копируется); - *cm_KeepHistory* (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани); - *cm_KeepSurface* (исходная оболочка и её копия имеют общие базовые поверхности); - *cm_Copy* (исходная оболочка и её копия не имеют общих данных). Перечисление :blue:`MbeCopyMode` описано в параграфе :ref:`Копирование множества граней MbFaceShell `. В классе :blue:`MbSymmetrySolidParams` для инициализации объекта **symParams** задан конструктор параметров создания симметричного тела относительно плоскости XY локальной системы координат (см. *op_shell_parameter.h*): .. code-block:: cpp MbSymmetrySolidParams( const MbPlacement3D & place, const MbSNameMaker & operNames, ThreeStates side ); где - **place** -- система координат плоскости симметрии; - **side** -- сохраняемая часть исходной оболочки (+1, 0, -1); - **operNames** -- именователь операции. Если параметр **symParams**.\ *side* = 1, то функция создаёт симметричное тело с заданной плоскостью симметрии следующим образом: исходное тело режется плоскостью XY локальной системы координат, берётся часть исходного тела, расположенная по положительному направлению оси Z от этой плоскости, строится зеркальная копия выбранной части исходного тела и объединяется с выбранной частью. Если **symParams**.\ *side* = -1, то функция объединяет часть исходного тела, расположенную по отрицательному направлению оси Z от плоскости XY локальной системы координат, с зеркальной копией этой части относительно плоскости симметрии. Параметр **operNames** обеспечивает именование граней, ребер и вершин построенного тела. На рис. 1 показаны исходное тело **solid** и плоскость симметрии **place**: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.9.1.png :width: 9cm :align: center Рис. 1 На рис. 2 приведено построенное тело **result**: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.9.2.png :width: 11cm :align: center Рис. 2 На рис. 3 приведено построенное тело **result** для плоскости симметрии с противоположной нормалью: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.9.3.png :width: 9cm :align: center Рис. 3 На рис. 4 показаны исходное тело **solid** и плоскость симметрии **place**, не соприкасающиеся друг с другом: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.16.1.png :width: 9cm :align: center Рис. 4 На рис. 5 приведены исходное тело **solid** и построенное зеркальное тело **result**: .. figure:: /MODELER/OPERATIONS_ON_BODIES/pictures/M.2.16.2.png :width: 12cm :align: center Рис. 5 Функция :blue:`SymmetrySolid`\() добавляет в журнал построенного тела строитель :blue:`MbSymmetrySolid`, который содержит все необходимые данные для выполнения операции. Строитель :blue:`MbSymmetrySolid` объявлен в файле *cr_symmetry_solid.h*. В тестовом приложении *test.exe* построение симметричного тела выполняется командой меню «Создать→Тело→На базе тела→Симметричное».