.. role:: blue :class: blue Построение эквидистантного тела ================================ .. _Construction_of_Equidistant_Body: .. версия ядра: 118041 Функция .. code-block:: cpp MbResultType OffsetShell( MbSolid & solid, MbeCopyMode sameShell, RPArray & initFaces, bool checkFacesConnection, SweptValues & p, const MbSNameMaker & operNames, bool copyFaceAttrs, MbSolid *& result ); выполняет построение эквидистантного тела для множества граней. Входными параметрами функции являются: - **solid** -- исходное тело; - **sameShell** -- режим копирования исходного тела; - **initFaces** -- множество исходных граней тела, для которых выполняется операция построения эквидистантного тела; - **checkFacesConnection** -- флаг проверки связности выбранных граней: *true* -- операция проверяет, что все грани в **initFaces** образуют одну связную область, при нарушении связности возвращается код ошибки и эквидистантное тело не строится; *false* -- проверка не выполняется, что может привести к нескольким разрозненным участкам результата или к неуспеху операции; - **p** -- объект, содержащий параметры построения; - **operNames** -- именователь; - **copyFaceAttrs** -- флаг копирования атрибутов из исходных граней в эквидистантные. Выходным параметром функции является построенное эквидистантное тело **result**. Функция возвращает код результата операции из перечисления :blue:`MbResultType`\(). Функция объявлена в файле *action_shell.h*. Функция строит тело, грани которого эквидистантны граням **initFaces** исходного тела **solid**. Параметр **sameShell** управляет передачей граней, ребер и вершин от исходного тела **solid** построенному телу **result**. Данный параметр может принимать одно из четырех значений: - *cm_Same* = 0 (оболочка не копируется); - *cm_KeepHistory* (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани); - *cm_KeepSurface* (исходная оболочка и её копия имеют общие базовые поверхности); - *cm_Copy* (исходная оболочка и её копия не имеют общих данных). Детальное описание перечисления :blue:`MbeCopyMode` находится в параграфе :ref:`Копирование множества граней MbFaceShell `. Параметр **p** содержит информацию о расстоянии между гранями построенного тела и гранями исходного тела. Расстояние может быть равным **p**.\ *thickness1* в положительном направлении или **p**.\ *thickness2* в отрицательном направлении нормали граней исходного тела. Если **p**.\ *shellClosed* = *false*, то будет построено незамкнутое тело. Параметр **p**.\ *checkSelfInt* сообщает о необходимости проверки результата построения на самопересечение. По умолчанию **p**.\ *checkSelfInt* = *false* -- проверка не выполняется. Флаги **p**.\ *mergeFlags* управляют слиянием подобных граней и ребер (*true* - сливать подобные элементы). Параметр **operNames** обеспечивает именование граней, ребер и вершин построенного тела. На рис. 1 приведено тело, на базе указанных граней которого будет построено эквидистантное тело: .. figure:: /MODELER/METHODS_OF_SOLID_BUILDING/pictures/M.1.15.1.png :width: 12cm :align: center Рис. 1 На рис. 2 приведено построенное эквидистантное тело: .. figure:: /MODELER/METHODS_OF_SOLID_BUILDING/pictures/M.1.15.2.png :width: 12cm :align: center Рис. 2 Если множество граней **initFaces** будет содержать все грани исходного тела **solid**, то построенное тело **result** будет эквидистантным исходному телу **solid**. Функция :blue:`OffsetShell`\() добавляет в журнал построенного тела строитель :blue:`MbShellSolid`, который содержит все необходимые данные для построения тела. Строитель :blue:`MbShellSolid` объявлен в файле *cr_thin_shell_solid.h*. В тестовом приложении *test.exe* построение эквидистантного незамкнутого тела осуществляется командой меню «Создать→Тело→На базе тела→Эквидистантное».