Размножение тела

Функция

MbResultType DuplicationSolid( const MbSolid &                    solid,
                               const MbDuplicationSolidParams &   params,
                                     c3d::SolidSPtr &             result );

выполняет построение копий исходного тела, трансформацию их по указанному закону и объединение в одно тело.

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

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

  • params - параметры построения.

В классе MbDuplicationSolidParams для инициализации объекта params с параметрами построения используются следующие конструкторы (см. op_shell_parameter.h):

MbDuplicationSolidParams( const DPtr<DuplicationValues> &  values,
                                IProgressIndicator *       prog = nullptr )

_duplicationValues ( values )
, _selIndices      (        )
, _adaptMode       ( false  )
, _names           (        )
, _progress        ( prog   )
{
   if ( _duplicationValues == nullptr )
   {
      C3D_ASSERT( _duplicationValues != nullptr );
      _duplicationValues = new DuplicationMatrixValues();
   }
}
MbDuplicationSolidParams( const DPtr<DuplicationValues> &  values,
                          const MbSNameMaker &             names,
                                IProgressIndicator *       prog = nullptr )

_duplicationValues ( values )
, _selIndices        (        )
, _adaptMode         ( false  )
, _names             (        )
, _progress          ( prog   )
{
   if ( _duplicationValues == nullptr )
   {
      C3D_ASSERT( _duplicationValues != nullptr );
      _duplicationValues = new DuplicationMatrixValues();
   }
}

Конструктор на основе класса DuplicationMeshValues для копирования по сетке:

MbDuplicationSolidParams(       bool                  isPolar,
                          const MbVector3D &          dir1,
                          const double                step1,
                          const uint                  num1,
                          const MbVector3D &          dir2,
                          const double                step2,
                          const uint                  num2,
                          const MbCartPoint3D *       center,
                                bool                  isAlongAxis,
                                IProgressIndicator *  prog = nullptr )

_duplicationValues( new DuplicationMeshValues( isPolar, dir1, step1, num1, dir2, step2, num2, center, isAlongAxis ) )
, _selIndices()
, _adaptMode( false )
, _names()
, _progress( prog )
{}

Конструкторы на основе класса DuplicationMatrixValues для копирования по матрицам:

MbDuplicationSolidParams( const MbMatrix3D &           matr,
                                IProgressIndicator *   prog = nullptr )

_duplicationValues( new DuplicationMatrixValues( matr ) )
, _selIndices()
, _adaptMode( false )
, _names()
, _progress( prog )
{}
MbDuplicationSolidParams( const SArray<MbMatrix3D> &   matr,
                                IProgressIndicator *   prog = nullptr )

_duplicationValues( new DuplicationMatrixValues( matr ) )
, _selIndices()
, _adaptMode( false )
, _names()
, _progress( prog )
{}
MbDuplicationSolidParams( const std::vector<MbMatrix3D> &  matr,
                                IProgressIndicator *       prog = nullptr )

: _duplicationValues( new DuplicationMatrixValues( matr ) )
, _selIndices()
, _adaptMode( false )
, _names()
, _progress( prog )
{}

где

  • _duplicationValues - параметры копирования;

  • _selIndices - индексы выбранных граней оболочки;

  • _adaptMode - режим адаптации открытых оболочек;

  • _names - именователь тел и граней, создаваемых операцией;

  • IProgressIndicator * _progress - индикатор прогресса выполнения операции.

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

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

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

Параметр _names обеспечивает именование граней, рёбер и вершин построенного тела.

Параметр values задаёт параметры построения. На рис. 1 приведены данные, используемые при построении, и схема наследования параметров построения от абстрактного класса DuplicationValues:

../../../../_images/M.2.25.1.png

Рис. 1

Для размножения тела, копии которого располагаются по двумерной сетке, следует использовать параметры DuplicationMeshValues.

Поддерживаются два типа размножения: по двум направлениям и по полярной сетке.

Параметр values.isPolar определяет тип сетки.

axis1 и axis2 - векторы в глобальной системе координат, задающие направления сетки (линейной или полярной).

Если values.isPolar = false, то исходное тело и построенные копии располагаются в узлах двумерной сетки с осями values.axis1 и values.axis2. Началом отсчёта служит исходное тело. Вдоль оси values.axis1 располагаются values.num1 копий тела с шагом values.step1, вдоль оси values.axis2 располагаются values.num2 копий тела с шагом values.step2, включая исходное тело.

Если values.isPolar = true, построенные копии располагаются в узлах полярной сетки. Началом отсчёта служит исходное тело. Радиальное направление сетки определяется вектором values.axis1, а ось вращения определяется векторным произведением values.axis1 и values.axis2. Вдоль радиальных направлений располагаются values.num1 копий тела с шагом values.step1, на каждой окружности располагаются values.num2 копий тела с угловым шагом values.step2.

Если values.isAlongAxis = true, то тела располагаются вдоль радиальной оси. Если values.isAlongAxis = false, то тела располагаются параллельно исходному телу.

Параметр values.center определяет центр локальной системы координат (а также точку приложения оси вращения в случае полярной системы).

Для размножения тела, копии которого трансформированы по набору матриц, следует использовать параметры DuplicationMatrixValues. Множество матриц трансформации определено параметром values.matrices.

Если после построения копии и исходное тело пересекаются друг с другом, то выполняется булева операция объединения пересекшихся тел. На рис. 2 приведён результат построения размноженного по полярной сетке тела:

../../../../_images/M.2.25.2.png

Рис. 2

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

В тестовом приложении test.exe размножение тела выполняется командами меню «Создать→Тело→На базе тела→Размножением по сетке» и «Создать→Тело→На базе тела→Размножением матрицами».