.. role:: blue :class: blue Продление грани тела ==================== .. _Extension_of_Body_Face: .. версия ядра: 118041 Функция .. code-block:: cpp MbResultType ExtensionShell( MbSolid & solid, MbeCopyMode sameShell, const MbExtensionShellParams & params, c3d::SolidSPtr & result ); выполняет построение продолжения незамкнутого тела путём продления краевых рёбер заданной грани тела. Входными параметрами функции являются: - **solid** -- исходное тело; - **sameShell** -- режим копирования исходного тела; - **params** -- объект, содержащий необходимые параметры для операции. В классе :blue:`MbExtensionShellParams` для инициализации объектов **params** определены два конструктора по параметрам операции: Конструктор параметров продолжения незамкнутого тела выдавливанием по заданному набору ребер: .. code-block:: cpp MbExtensionShellParams( const c3d::EdgesSPtrVector & edges, const ExtensionValues & params, const MbSNameMaker & operNames ); Конструктор параметров продолжения незамкнутого тела выдавливанием без контейнера рёбер (ребра указываются через соответствующие методы :blue:`MbExtensionShellParams::Add`): .. code-block:: cpp MbExtensionShellParams( const ExtensionValues & params, const MbSNameMaker & operNames ); - **edges** -- множество краевых ребер, через которые выполняется продление; - **params** -- параметры операции; - **operNames** -- именователь. Выходным параметром функции является построенное тело **result**. **result** всегда новое тело (не модификация исходного **solid**); Функция возвращает код результата операции из перечисления :blue:`MbResultType`. Функция объявлена в файле *action_shell.h*. Параметр **sameShell** управляет передачей граней, ребер и вершин от исходного тела **solid** построенному телу **result**. Параметр **sameShell** может принимать одно из четырех значений: - *cm_Same* = 0 (оболочка не копируется); - *cm_KeepHistory* (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани); - *cm_KeepSurface* (исходная оболочка и её копия имеют общие базовые поверхности); - *cm_Copy* (исходная оболочка и её копия не имеют общих данных). Перечисление :blue:`MbeCopyMode` описано в параграфе :ref:`Копирование множества граней MbFaceShell `. Объект **params** класса :blue:`ExtensionValues` управляет способами продления граней и содержит данные, приведенные на рис. 1: .. figure:: /MODELER/METHODS_OF_SOLID_BUILDING/pictures/M.1.16.1.png :width: 12cm :align: center Рис. 1 Продление грани может быть трех типов. Тип продления определяет параметр **params**.\ *type*: - При **params**.\ *type* = *et_same* продляется исходная грань путем расширения области определения параметров поверхности и смещения краевых ребер **edges**; - При **params**.\ *type* = *et_tangent* к грани гладко пристыковываются новые грани через ребра **edges**; - При **params**.\ *type* = *et_direction* к грани через ребра **edges** пристыковываются новые грани, полученные выдавливанием кривых ребер **edges** в направлении **params**.\ *direction*. Параметр **params**.\ *way* определяет расстояние продления края грани: - При **params**.\ *way* = *ew_distance* продление выполняется на расстояние **params**.\ *distance*; - При **params**.\ *way* = *ew_vertex* продление выполняется до вершины, определяемой точкой **params**.\ *point*; - При **params**.\ *way* = *ew_shell* продление выполняется до оболочки **params**.\ *shell*. Если **params**.\ *way* ≠ *ew_shell*, то **params**.\ *shell* может быть равен нулю. Параметр **params**.\ *faceIndex* задаёт индекс грани в оболочке **params**.\ *shell*, используемой при продлении до оболочки. Параметр **params**.\ *kind* определяет способ обрезки краев граней продления в начале и в конце каждого ребра множества **edges**: - Если **params**.\ *kind* = *le_normal*, то край продления грани обрезается по нормали к соответствующему ребру множества **edges**. - Если **params**.\ *kind* = *le_prolong*, то край продления грани определяется соседними к ребрам множества **edges** ребрами. Параметр **params**.\ *output* определяет варианты представления результирующего тела: - Если **params**.\ *output* = *eo_Original*, то удлиняются исходные грани тела; - Если **params**.\ *output* = *eo_newFace*, то результат продления формируется в виде новых граней; - Если **params**.\ *output* = *eo_newShell*, то результат продления формируется в виде новой оболочки. Параметр **params**.\ *toShellType* определяет способ продления до оболочки: - Если **params**.\ *toShellType* = *sot_ToShell*, то продление осуществляется до оболочки; - Если **params**.\ *toShellType* = *sot_ThroughShellLayer*, то продление осуществляется через первый слой оболочки (до первого выхода из оболочки); - Если **params**.\ *toShellType* = *sot_ToShellWithoutCut*, то продление осуществляется до оболочки без подрезки. Параметр **operNames** обеспечивает именование граней, ребер и вершин построенного тела. На рис. 2 приведена грань тела, два краевых ребра которого будут продлены: .. figure:: /MODELER/METHODS_OF_SOLID_BUILDING/pictures/M.1.16.2.png :width: 12cm :align: center Рис. 2 На рис. 3 и 4 приведены результаты продления грани путем расширения области определения параметров поверхности с разными значениями параметра **params**.\ *kind*: .. figure:: /MODELER/METHODS_OF_SOLID_BUILDING/pictures/M.1.16.3.png :width: 12cm :align: center Рис. 3 .. figure:: /MODELER/METHODS_OF_SOLID_BUILDING/pictures/M.1.16.4.png :width: 12cm :align: center Рис. 4 На рис. 5 приведен результат продления грани **face** добавлением новых граней, гладко стыкующихся с гранью **face**. На рис. 6 приведен результат продления грани **face** в заданном направлении. .. figure:: /MODELER/METHODS_OF_SOLID_BUILDING/pictures/M.1.16.5.png :width: 11cm :align: center Рис. 5 .. figure:: /MODELER/METHODS_OF_SOLID_BUILDING/pictures/M.1.16.6.png :width: 11cm :align: center Рис. 6 Функция :blue:`ExtensionShell`\() добавляет в журнал построенного тела строитель :blue:`MbExtensionShell`, который содержит все необходимые данные для построения тела. Строитель :blue:`MbExtensionShell` объявлен в файле *cr_extension_shell.h*.