Построение тела по сечениям
Функция
MbResultType LoftedSolid( const MbLoftedSolidParams & loftSolParams,
c3d::SolidSPtr & result );
выполняет построение тела по пространственным (в том числе плоским) сечениям.
Входным параметром функции является объект loftSolParams с исходными данными для выполнения операции (определение класса MbLoftedSolidParams см. op_shell_parameter.h).
Выходным параметром функции является построенное тело result.
Функция возвращает код результата операции из перечисления MbResultType (см. mb_operation_result.h).
Функция объявлена в файле action_solid.h.
Для инициализации объекта loftSolParams с параметрами построения в классе MbLoftedSolidParams заданы следующие конструкторы (см. op_shell_parameter.h):
MbLoftedSolidParams( const std::vector<MbPlacement3D> & places,
const c3d::PlaneContoursSPtrVector & planeConours,
const c3d::ConstSpaceCurveSPtr & spine,
const LoftedValues & params,
const c3d::SpaceCurvesSPtrVector * guideCurves,
const c3d::SpacePointsVector * guidePoints,
const MbSNameMaker & operName,
const c3d::SNamesMakerSPtrVector & contourNames,
IProgressIndicator * prog = nullptr );
MbLoftedSolidParams( const c3d::SurfacesSPtrVector & surfaces,
const c3d::PlaneContoursSPtrVector & planeConours,
const c3d::ConstSpaceCurveSPtr & spine,
const LoftedValues & params,
const c3d::SpaceCurvesSPtrVector * guideCurves,
const c3d::SpacePointsVector * guidePoints,
const MbSNameMaker & operName,
const c3d::SNamesMakerSPtrVector & contourNames,
IProgressIndicator * prog = nullptr );
MbLoftedSolidParams( const std::vector<MbPlacement3D> & places,
const c3d::PlaneContoursSPtrVector & planeConours,
const c3d::ConstSpaceCurveSPtr & spine,
const LoftedValues & params,
const OperationType oType,
const c3d::SpaceCurvesSPtrVector * guideCurves,
const c3d::SpacePointsVector * guidePoints,
const MbSNameMaker & operName,
const c3d::SNamesMakerSPtrVector & contourNames,
IProgressIndicator * prog = nullptr );
MbLoftedSolidParams( const c3d::SurfacesSPtrVector & surfaces,
const c3d::PlaneContoursSPtrVector & planeConours,
const c3d::ConstSpaceCurveSPtr & spine,
const LoftedValues & params,
const OperationType oType,
const c3d::SpaceCurvesSPtrVector * guideCurves,
const c3d::SpacePointsVector * guidePoints,
const MbSNameMaker & operName,
const c3d::SNamesMakerSPtrVector & contourNames,
IProgressIndicator * prog = nullptr );
где
places – множество систем координат образующих контуров;
planeConours – множество образующих контуров;
surfaces – множество поверхностей образующих контуров.
oType – тип булевой операции;
spine – осевая кривая (может быть nullptr);
params – параметры операции;
guideCurves – множество направляющих кривых, задающих траектории соответствующих точек контуров;
guidePoints – множество точек на образующих контурах, задающее соответствующие точки (цепочки точек);
operName – именователь операции;
contourNames – именователи образующих контуров;
prog – индикатор прогресса выполнения операции.
Построение тела по плоским сечениям
Поверхность построенного по плоским сечениям тела проходит по всем плоским кривым, определяющим тело. Множество places содержит локальные системы координат, в плоскости XY которых располагаются двумерные контуры planeConours.
Множества places и planeConours согласованы по индексу: planeConours[i] располагается в плоскости XY локальной системы координат places[i]. Ориентация контуров planeConours может быть произвольной. Если все контуры planeConours замкнуты, то для предотвращения перекручивания поверхностей положения начал контуров меняются так, чтобы начала располагались как можно ближе друг к другу. Изменить требуемым образом соответствие точек стыковки кривых множества контуров позволяют контрольные точки guidePoints. Если множество guidePoints не пустое, то оно должно быть согласовано с множествами places и planeConours. Для управления формой тела между сечениями могут использоваться направляющие кривые guideCurves. Направляющей кривой тела может служить произвольная кривая.
Параметр params содержит информацию о способе движения, наличии и толщине стенок тела, замкнутости построенного тела.
Параметры params.thickness1 и params.thickness2 определяют толщину стенки построенного тонкостенного тела. Параметр params.thickness1 задает отступ наружу от образующей кривой, а параметр params.thickness2 задает отступ внутрь от образующей кривой.
Параметр params.shellClosed управляет замкнутостью построенного тела (true – замкнутое тело; false – незамкнутое тело).
Параметр params.checkSelfInt сообщает о необходимости проверки результата построения на самопересечение. По умолчанию params.checkSelfInt = false – проверка не выполняется.
Управляющие флаги mergeFlags управляют cлиянием подобных граней или ребер (mergeFaces = true – cливать подобные грани; mergeEdges = true – cливать подобные ребра).
Параметр params.closed управляет замкнутостью трубки сечений (наличием торцов у тела). При params.closed = true торцы тела отсутствуют и тело имеет топологию тора. По умолчанию params.closed = false.
Векторы params.vector1 и params.vector2 задают направление тела в районе начального и конечного торцов. Например, они позволяют задать направление тела в районе торцов ортогональным плоскостям торцов. По умолчанию векторы params.vector1 и params.vector2 равны нулю.
Параметры params.setNormal1 и params.setNormal2 устанавливают нормали в начальном и в конечном торцах соответственно, если начальное сечение точечное (по умолчанию false).
Параметры params.derFactor1 и params.derFactor2 устанавливают множители величин производных при установке нормалей в начальном и в конечном торцах соответственно.
Векторы params.directSurf1 и params.directSurf2 задают ось направления движения поверхности в начальном и в конечном торцах соответственно при установке нормали.
На рис. 1 приведены данные, используемые при построении, и схема наследования параметров построения тела по плоским сечениям MbLoftedSolidParams & loftSolParams:
Рис. 1
Параметр contourNames обеспечивает именование граней построенного тела.
На рис. 2 приведено множество двумерных контуров planeConours и их локальные системы координат places (стрелками указаны направления нормалей локальных систем координат):
Рис. 2
На рис. 3 приведено замкнутое тело, построенное по плоским сечениям, приведенным на рис. 2, с заданными направлениями нормалей на торцах для значения параметра params.closed = false.
Рис. 3
На рис. 4 приведено замкнутое тело, построенное по плоским сечениям, приведенным на рис. 2, с параметром params.closed = true. Построенное тело имеет топологию тора и у него отсутствуют торцы.
Рис. 4
На рис. 5 приведено замкнутое тонкостенное тело, построенное по плоским сечениям, приведенным на рис. 2, без задания нормалей на торцах для параметра params.closed = false:
Рис. 5
На рис. 6 приведено замкнутое тонкостенное тело, построенное по плоским сечениям, приведенным на рис. 2, с заданными нормалями на торцах для параметра params.closed = false:
Рис. 6
На рис. 7 приведено замкнутое тонкостенное тело, построенное по плоским незамкнутым контурам с не заданными нормалями на торцах для параметра params.closed = false. Параметры params.thickness1 и params.thickness2 должны быть не нулевыми.
Рис. 7
На рис. 8 приведено незамкнутое тело, построенное по плоским незамкнутым контурам с не заданными нормалями на торцах для значения параметра params.closed = false. Параметры params.thickness1 и params.thickness2 могут быть нулевыми.
Рис. 8
При неодинаковом числе сегментов плоских контуров выполняется разбивка некоторых сегментов так, чтобы число сегментов в каждом контуре множества planeConours было равным. На рис. 9 приведены три контура с разным числом сегментов.
Рис. 9
На рис. 10 приведено построенное по этим контурам замкнутое тело, в котором один из сегментов треугольного контура разбит на два сегмента, а окружность разбита на четыре дуги:
Рис. 10
Управлять положением ребер, соединяющих вершины разных контуров множества, можно с помощью контрольных точек guidePoints. Точки guidePoints[i] указывают положения стыков сегментов разных контуров множества, которые должны соединяться ребрами. Для демонстрации применения контрольных точек guidePoints построим тело по плоским сечениям, приведенным на рис. 11:
Рис. 11
На рис. 12 и 13 показаны тела, построенные по плоским сечениям, приведенным на рис. 11, с различным положением контрольных точек guidePoints.
Рис. 12
Рис. 13
На рис. 14 приведены два двумерных контура и осевая кривая spine, которая будет служить направляющей при построении тела по плоским сечениям:
Рис. 14
На рис. 15 приведено замкнутое тело, построенное по плоским сечениям и осевой кривой, приведенным на рис. 14:
Рис. 15
На рис. 16 приведено замкнутое тонкостенное тело, построенное по плоским сечениям и осевой кривой, приведенным на рис. 14:
Рис. 16
На рис. 17 приведено незамкнутое тело, построенное по плоским сечениям и осевой кривой, приведенным на рис. 14:
Рис. 17
Функция построения тела по сечениям LoftedSolid() добавляет в журнал построенного тела строитель MbCurveLoftedSolid, который содержит все необходимые для построения тела данные. Строитель MbCurveLoftedSolid объявлен в файле cr_lofted_solid.h.
В тестовом приложении Test.exe построение тела по плоским сечениям выполняется командами меню «Создать→Тело→На базе кривых→По сечениям» и «Создать→Тело→На базе кривых→По сечениям, осевой линии и направляющим».