Продление грани тела

Функция

MbResultType ExtensionShell(       MbSolid &                 solid,
                                   MbeCopyMode               sameShell,
                             const MbExtensionShellParams &  params,
                                   c3d::SolidSPtr &          result );

выполняет построение продолжения незамкнутого тела путём продления краевых рёбер заданной грани тела.

Входными параметрами функции являются:

  • solid – исходное тело;

  • sameShell – режим копирования исходного тела;

  • params – объект, содержащий необходимые параметры для операции.

В классе MbExtensionShellParams для инициализации объектов params определены два конструктора по параметрам операции:

Конструктор параметров продолжения незамкнутого тела выдавливанием по заданному набору ребер:

MbExtensionShellParams( const c3d::EdgesSPtrVector & edges,
                        const ExtensionValues &      params,
                        const MbSNameMaker &         operNames );

Конструктор параметров продолжения незамкнутого тела выдавливанием без контейнера рёбер (ребра указываются через соответствующие методы MbExtensionShellParams::Add):

MbExtensionShellParams( const ExtensionValues & params,
                        const MbSNameMaker &    operNames );
  • edges – множество краевых ребер, через которые выполняется продление;

  • params – параметры операции;

  • operNames – именователь.

Выходным параметром функции является построенное тело result. result всегда новое тело (не модификация исходного solid);

Функция возвращает код результата операции из перечисления MbResultType.

Функция объявлена в файле action_shell.h.

Параметр sameShell управляет передачей граней, ребер и вершин от исходного тела solid построенному телу result. Параметр sameShell может принимать одно из четырех значений:

  • cm_Same = 0 (оболочка не копируется);

  • cm_KeepHistory (исходная оболочка и её копия имеют общие базовые поверхности, вершины и неизменённые операцией грани);

  • cm_KeepSurface (исходная оболочка и её копия имеют общие базовые поверхности);

  • cm_Copy (исходная оболочка и её копия не имеют общих данных).

Перечисление MbeCopyMode описано в параграфе Копирование множества граней MbFaceShell.

Объект params класса ExtensionValues управляет способами продления граней и содержит данные, приведенные на рис. 1:

../../../../_images/M.1.16.1.png

Рис. 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 приведена грань тела, два краевых ребра которого будут продлены:

../../../../_images/M.1.16.2.png

Рис. 2

На рис. 3 и 4 приведены результаты продления грани путем расширения области определения параметров поверхности с разными значениями параметра params.kind:

../../../../_images/M.1.16.3.png

Рис. 3

../../../../_images/M.1.16.4.png

Рис. 4

На рис. 5 приведен результат продления грани face добавлением новых граней, гладко стыкующихся с гранью face. На рис. 6 приведен результат продления грани face в заданном направлении.

../../../../_images/M.1.16.5.png

Рис. 5

../../../../_images/M.1.16.6.png

Рис. 6

Функция ExtensionShell() добавляет в журнал построенного тела строитель MbExtensionShell, который содержит все необходимые данные для построения тела. Строитель MbExtensionShell объявлен в файле cr_extension_shell.h.