Построение тела по сечениям

Функция

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:

../../../../_images/Lofted_Inheritance_scheme.png

Рис. 1

Параметр contourNames обеспечивает именование граней построенного тела.

На рис. 2 приведено множество двумерных контуров planeConours и их локальные системы координат places (стрелками указаны направления нормалей локальных систем координат):

../../../../_images/M.1.6.2.png

Рис. 2

На рис. 3 приведено замкнутое тело, построенное по плоским сечениям, приведенным на рис. 2, с заданными направлениями нормалей на торцах для значения параметра params.closed = false.

../../../../_images/M.1.6.3.png

Рис. 3

На рис. 4 приведено замкнутое тело, построенное по плоским сечениям, приведенным на рис. 2, с параметром params.closed = true. Построенное тело имеет топологию тора и у него отсутствуют торцы.

../../../../_images/M.1.6.4.png

Рис. 4

На рис. 5 приведено замкнутое тонкостенное тело, построенное по плоским сечениям, приведенным на рис. 2, без задания нормалей на торцах для параметра params.closed = false:

../../../../_images/M.1.6.5.png

Рис. 5

На рис. 6 приведено замкнутое тонкостенное тело, построенное по плоским сечениям, приведенным на рис. 2, с заданными нормалями на торцах для параметра params.closed = false:

../../../../_images/M.1.6.6.png

Рис. 6

На рис. 7 приведено замкнутое тонкостенное тело, построенное по плоским незамкнутым контурам с не заданными нормалями на торцах для параметра params.closed = false. Параметры params.thickness1 и params.thickness2 должны быть не нулевыми.

../../../../_images/M.1.6.7.png

Рис. 7

На рис. 8 приведено незамкнутое тело, построенное по плоским незамкнутым контурам с не заданными нормалями на торцах для значения параметра params.closed = false. Параметры params.thickness1 и params.thickness2 могут быть нулевыми.

../../../../_images/M.1.6.8.png

Рис. 8

При неодинаковом числе сегментов плоских контуров выполняется разбивка некоторых сегментов так, чтобы число сегментов в каждом контуре множества planeConours было равным. На рис. 9 приведены три контура с разным числом сегментов.

../../../../_images/M.1.6.9.png

Рис. 9

На рис. 10 приведено построенное по этим контурам замкнутое тело, в котором один из сегментов треугольного контура разбит на два сегмента, а окружность разбита на четыре дуги:

../../../../_images/M.1.6.10.png

Рис. 10

Управлять положением ребер, соединяющих вершины разных контуров множества, можно с помощью контрольных точек guidePoints. Точки guidePoints[i] указывают положения стыков сегментов разных контуров множества, которые должны соединяться ребрами. Для демонстрации применения контрольных точек guidePoints построим тело по плоским сечениям, приведенным на рис. 11:

../../../../_images/M.1.6.11.png

Рис. 11

На рис. 12 и 13 показаны тела, построенные по плоским сечениям, приведенным на рис. 11, с различным положением контрольных точек guidePoints.

../../../../_images/M.1.6.12.png

Рис. 12

../../../../_images/M.1.6.13.png

Рис. 13

На рис. 14 приведены два двумерных контура и осевая кривая spine, которая будет служить направляющей при построении тела по плоским сечениям:

../../../../_images/M.1.6.14.png

Рис. 14

На рис. 15 приведено замкнутое тело, построенное по плоским сечениям и осевой кривой, приведенным на рис. 14:

../../../../_images/M.1.6.15.png

Рис. 15

На рис. 16 приведено замкнутое тонкостенное тело, построенное по плоским сечениям и осевой кривой, приведенным на рис. 14:

../../../../_images/M.1.6.16.png

Рис. 16

На рис. 17 приведено незамкнутое тело, построенное по плоским сечениям и осевой кривой, приведенным на рис. 14:

../../../../_images/M.1.6.17.png

Рис. 17

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

В тестовом приложении Test.exe построение тела по плоским сечениям выполняется командами меню «Создать→Тело→На базе кривых→По сечениям» и «Создать→Тело→На базе кривых→По сечениям, осевой линии и направляющим».