Продление грани тела
Функция
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:
Рис. 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 приведена грань тела, два краевых ребра которого будут продлены:
Рис. 2
На рис. 3 и 4 приведены результаты продления грани путем расширения области определения параметров поверхности с разными значениями параметра params.kind:
Рис. 3
Рис. 4
На рис. 5 приведен результат продления грани face добавлением новых граней, гладко стыкующихся с гранью face. На рис. 6 приведен результат продления грани face в заданном направлении.
Рис. 5
Рис. 6
Функция ExtensionShell() добавляет в журнал построенного тела строитель MbExtensionShell, который содержит все необходимые данные для построения тела. Строитель MbExtensionShell объявлен в файле cr_extension_shell.h.