Построение модифицированного тела

Функция

MbResultType ModifiedSolid(       MbSolid &                 solid,
                                  MbeCopyMode               sameShell,
                            const MbModifiedSolidParams &   params,
                                  MbModifiedSolidResults &  results );

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

  1. Удаление из тела выбранных граней без прилегающих скруглений (dmm_RemoveFaces).

    Удаление грани вместе с прилегающими скруглениями (dmm_RemoveFacesWithAdjacentFillets).

    Удаление замкнутых цилиндрических, конических, тороидальных, сферических граней, граней вращения и выдавливания радиуса меньше заданного без прилегающих скруглений (dmm_RemoveBelowRadius).

    Удаление замкнутых цилиндрических, сферических граней, граней вращения и выдавливания радиуса меньше заданного вместе с прилегающими скруглениями (dmm_RemoveBelowRadiusWithAdjacentFillets).

  2. Создание тела из выбранных граней с окружением (dmm_Create).

  3. Перемещение выбранных граней с окружением относительно оставшихся граней тела (dmm_MoveFacesByVector) или без адаптации прилегающих скруглений (dmm_MoveFacesByVectorNoAdaptation). Направление и величину перемещения определяет вектор direction.

  4. Замена выбранных граней тела эквидистантными гранями (перемещение по нормали, изменение радиуса) (dmm_OffsetFaces). Расстояние смещения определяется параметром value.

  5. Изменение радиуса выбранных граней скругления на заданную величину (dmm_FilletsRadiusChange). Величина изменения радиуса определяется параметром value.

  6. Замена выбранных граней тела деформируемыми гранями (превращение в NURBS) для редактирования (dmm_ConvertFacesToNurbs).

  7. Удаление выбранных граней скругления тела (dmm_PurifyFillets).

    Удаление также всех гладко прилегающих скруглений (dmm_PurifyFilletsChains).

    Удаление всех скруглений тела, меньших определённого радиуса (dmm_PurifyFilletsBelowRadius).

  8. Слияние вершин рёбер и удаление рёбер (dmm_DeleteEdges).

  9. Замена гладко стыкующихся граней одной гранью (dmm_UniteFaces).

  10. Поворот выбранных граней с адаптацией прилегающих скруглений (dmm_RotateFaces) или без (dmm_RotateFacesNoFilletAdaptation). Угол поворота определяется параметром angle, ось поворота определяется осью axis.

  11. Замена выбранных граней тела (dmm_ReplaceFaces).

  12. Установка радиусов выбранных граней скругления для цепочки гладко стыкующихся скруглений (dmm_FilletsRadiusSet) и установка радиусов выбранных граней скругления (dmm_FilletsRadiusSetSingle). Новый радиус определяется параметром value.

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

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

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

  • params – параметры модификации.

Выходным параметром функции является структура результатов модификации results, содержащая модифицированное тело и дополнительную информацию об операции.

При удачной работе функция возвращает rt_Success, в противном случае функция возвращает код ошибки из перечисления MbResultType (см. mb_operation_result.h).

Возможные коды ошибок:

rt_Success – ошибок нет;

rt_Error – неизвестная ошибка;

rt_IncorrectData – некорректные данные;

rt_ParameterError – ошибочный параметр.

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

При создании объекта params с параметрами модификации используется один из следующих конструкторов (см. op_direct_mod_parameter.h).

Конструкторы без набора граней

  • type – тип модификации. Для данного конструктора доступны: dmm_OffsetFaces, dmm_FilletsRadiusChange;

  • value – величина сдвига для dmm_OffsetFaces или величина изменения радиуса для dmm_FilletsRadiusChange;

  • names – именователь операции.

MbModifiedSolidParams(       MbeModifyingMode type,
                       const MbSNameMaker &   names,
                             double           value );

  • type – тип модификации. Для данного конструктора доступны: dmm_RotateFaces, dmm_RotateFacesNoFilletAdaptation;

  • axis – ось вращения;

  • angle – угол вращения;

  • names – именователь операции.

MbModifiedSolidParams(       MbeModifyingMode  type,
                       const MbSNameMaker &    names,
                       const MbAxis3D &        axis,
                             double            angle );

  • type – тип модификации. Для данного конструктора доступны: dmm_MoveFacesByVector, dmm_MoveFacesByVectorNoAdaptation;

  • direction – направление перемещения;

  • names – именователь операции.

MbModifiedSolidParams(       MbeModifyingMode  type,
                       const MbSNameMaker &    names,
                       const MbVector3D &      direction );

Конструкторы по набору граней

  • modType – тип модификации. Для данного конструктора доступны: dmm_UniteFaces, dmm_Create, dmm_ConvertFacesToNurbs, dmm_PurifyFillets;

  • names – именователь операции;

  • faces – список граней для модификации.

MbModifiedSolidParams(       MbeModifyingMode   modType,
                       const MbSNameMaker &     names,
                       const c3d::ItemIndices & faces );

  • type – тип модификации. Для данного конструктора доступны: dmm_OffsetFaces, dmm_FilletsRadiusChange, dmm_RemoveBelowRadius, dmm_RemoveBelowRadiusWithAdjacentFillets, dmm_PurifyFilletsBelowRadius;

  • names – именователь операции;

  • faces – список граней для модификации;

  • value – величина сдвига для dmm_OffsetFaces, величина изменения радиуса для dmm_FilletsRadiusChange, величина максимального радиуса для dmm_Remove и dmm_Purify.

MbModifiedSolidParams(       MbeModifyingMode   type,
                       const MbSNameMaker &     names,
                       const c3d::ItemIndices & faces,
                             double             value )
: MbModifiedSolidParams( type, names, value )
{
  AddFaces( faces );
}

  • type – тип модификации. Для данного конструктора доступны: dmm_RotateFaces, dmm_RotateFacesNoFilletAdaptation;

  • names – именователь операции;

  • faces – список граней для модификации;

  • axis – ось вращения;

  • angle – угол вращения.

MbModifiedSolidParams(       MbeModifyingMode    type,
                       const MbSNameMaker &      names,
                       const c3d::ItemIndices &  faces,
                       const MbAxis3D &          axis,
                             double              angle )
: MbModifiedSolidParams( type, names, axis, angle )
{
  AddFaces( faces );
}

  • type – тип модификации. Для данного конструктора доступны: dmm_MoveFacesByVector;

  • names – именователь операции;

  • faces – список граней для модификации;

  • direction – направление сдвига.

MbModifiedSolidParams(       MbeModifyingMode   type,
                       const MbSNameMaker &     names,
                       const c3d::ItemIndices & faces,
                       const MbVector3D &       direction )
: MbModifiedSolidParams( type, names, direction )
{
  AddFaces( faces );
}

  • type – тип модификации. Для данного конструктора доступны: dmm_ConvertFacesToNurbs;

  • names – именователь операции;

  • faces – список граней для модификации;

  • surfaces – поверхности замены (может быть пустым массивом).

template<class SurfArray>
MbModifiedSolidParams(       MbeModifyingMode   type,
                       const MbSNameMaker &     names,
                       const c3d::ItemIndices & faces,
                       const SurfArray &        surfaces )
: MbModifiedSolidParams( type, names )
{
  AddFaces( faces );
  AddSurfaces( surfaces );
}

  • type – тип модификации. Для данного конструктора доступны: dmm_ReplaceFaces;

  • names – именователь операции;

  • replacedFaces – список заменяемых граней;

  • replacementSurfaces – список заменяющих поверхностей;

  • surfaceParts – список номеров частей поверхностей, которые будут использоваться при нескольких возможных вариантах замены;

  • sameSurfaces – использовать исходные поверхности (true) или их копии (false);

  • offsets – список сдвигов от заменяющих поверхностей.

template<class SurfArray> MATH_FUNC_EX
MbModifiedSolidParams(       MbeModifyingMode     type,
                       const MbSNameMaker &       names,
                       const c3d::ItemIndices &   replacedFaces,
                       const SurfArray &          replacementSurfaces,
                             bool                 sameSurfaces,
                       const c3d::NumbersVector & surfaceParts,
                       const c3d::DoubleVector &  offsets );

  • modType – тип модификации. Для данного конструктора доступны: dmm_DeleteEdges;

  • names – именователь операции;

  • edges – список рёбер для модификации;

  • beginOrEnd – флаг удаления начала или конца соответствующего ребра.

MbModifiedSolidParams(       MbeModifyingMode        modType,
                       const MbSNameMaker &          names,
                       const c3d::EdgeFacesIndices & edges,
                       const c3d::BoolVector &       beginOrEnd )
: MbModifiedSolidParams( modType, names )
{
  AddEdges( edges, beginOrEnd );
}

Параметр solid содержит исходное тело, которое подлежит обработке.

Параметр sameShell управляет передачей данных от исходного тела solid к построенному телу results и может принимать одно из четырёх значений:

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

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

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

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

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

Параметр params описывает параметры модификации, которые определяются типом модификации и дополнительными параметрами в зависимости от используемого конструктора.

Тип модификации задаётся параметром _modificationType, который может принимать одно из значений перечисления MbeModifyingMode (см. op_direct_mod_parameter.h).

При типах модификации dmm_RemoveFaces и dmm_RemoveFacesWithAdjacentFillets рассматриваемая функция удаляет грани faces из копии тела solid и, используя окружение, обрабатывает место удалённых граней, сохраняя замкнутость тела. Если грани faces связаны с остальными гранями скруглениями, то в режиме dmm_RemoveFacesWithAdjacentFillets прилегающие грани скругления автоматически добавляются к множеству удаляемых граней.

При типах модификации dmm_RemoveBelowRadius и dmm_RemoveBelowRadiusWithAdjacentFillets функция удаляет замкнутые цилиндрические, конические, тороидальные, сферические грани, а также грани вращения и выдавливания радиуса меньше или равного заданному значению радиуса. В режиме dmm_RemoveBelowRadiusWithAdjacentFillets эти грани удаляются вместе с прилегающими скруглениями. Такая настройка позволяет автоматически убирать мелкие сквозные или глухие отверстия без явного перечисления всех соответствующих граней.

На рис. 1 приведено исходное тело, а на рис. 2 — построенное тело, полученное путём удаления указанных граней исходного тела:

../../../../_images/M.6.2.1.png

Рис. 1

../../../../_images/M.6.2.2.png

Рис. 2

Аналогичный результат можно получить, если выбрать все указанные грани и прилегающие к ним скругления и использовать тип dmm_RemoveFaces.

При типе модификации dmm_Create рассматриваемая функция создаёт новое тело из копий граней faces. Если грани faces связаны с остальными гранями скруглениями, то сначала удаляются прилегающие скругления, а затем из граней faces создаётся новое тело. Новое тело будет замкнутым, так как в него входят как исходные грани faces, так и грани, построенные на базовых поверхностях, смежных с гранями faces. Дополнительные грани необходимы для ликвидации краевых рёбер.

На рис. 3 приведено исходное тело, а на рис. 4 — вновь построенное тело, полученное из указанных граней исходного тела. Тело на рис. 3 состоит из пяти граней: трёх граней множества faces и двух граней на базе цилиндрической поверхности, на которую опирались два удалённых скругления:

../../../../_images/M.6.2.3.png

Рис. 3

../../../../_images/M.6.2.4.png

Рис. 4

При типах модификации dmm_MoveFacesByVector и dmm_MoveFacesByVectorNoAdaptation рассматриваемая функция перемещает грани faces относительно остальных граней в копии тела solid. Перемещение выполняется в направлении вектора direction на расстояние его длины. В режиме dmm_MoveFacesByVector адаптируются прилегающие скругления, в режиме dmm_MoveFacesByVectorNoAdaptation скругления не перестраиваются.

Если грани faces связаны с остальными гранями скруглениями, то в режиме с адаптацией сначала удаляются скругления, далее перемещаются грани faces и затем скругления восстанавливаются на новых местах.

На рис. 5 и рис. 6 приведены тела, построенные путём перемещения указанных граней исходных тел, приведённых на рис. 1 и рис. 3, соответственно:

../../../../_images/M.6.2.5.png

Рис. 5

../../../../_images/M.6.2.6.png

Рис. 6

При типе модификации dmm_OffsetFaces рассматриваемая функция заменяет грани faces в копии тела solid эквидистантными гранями. Эквидистантные грани смещены по нормали на расстояние, заданное параметром value. Если value положительно, смещение выполняется в сторону внешних нормалей, при отрицательном значении – в противоположную сторону.

Если грани faces связаны с остальными гранями скруглениями, то сначала удаляются скругления, далее грани faces заменяются эквидистантными, и затем скругления восстанавливаются на новых местах.

На рис. 7 и рис. 8 приведены тела, построенные путём замены указанных граней эквидистантными гранями. Исходные тела приведены на рис. 1 и рис. 3, соответственно:

../../../../_images/M.6.2.7.png

Рис. 7

../../../../_images/M.6.2.8.png

Рис. 8

Если параметр value отрицателен, то эквидистантные грани смещаются на отрицательное расстояние. На рис. 9 и рис. 10 приведены тела, построенные путём замены указанных граней эквидистантными гранями с отрицательным смещением. Исходные тела приведены на рис. 5 и рис. 6, соответственно:

../../../../_images/M.6.2.9.png

Рис. 9

../../../../_images/M.6.2.10.png

Рис. 10

При типе модификации dmm_FilletsRadiusChange рассматриваемая функция изменяет радиусы граней скругления faces в копии тела solid. Радиус каждой грани скругления увеличивается или уменьшается на величину, заданную параметром value.

Положительное значение value приводит к увеличению радиуса скруглений, отрицательное – к уменьшению. При этом сохраняется замкнутость тела и непрерывность сопряжения с соседними гранями, насколько это возможно с учётом заданной геометрии.

На рис. 11 и рис. 12 приведены тела, построенные путём изменения радиуса указанных граней скругления. Исходные тела приведены на рис. 1 и рис. 3, соответственно:

../../../../_images/M.6.2.11.png

Рис. 11

../../../../_images/M.6.2.12.png

Рис. 12

При типе модификации dmm_ConvertFacesToNurbs рассматриваемая функция заменяет грани faces в копии тела solid деформируемыми гранями (NURBS-поверхностями), обеспечивая возможность дальнейшего редактирования этих граней по контрольным точкам.

Если грани faces связаны с остальными гранями скруглениями, то сначала удаляются прилегающие скругления, далее грани faces заменяются деформируемыми гранями на базе соответствующих NURBS-поверхностей, после чего скругления восстанавливаются на новых местах.

На рис. 13 приведено исходное тело, а на рис. 14 – построенное тело, полученное путём замены указанной грани исходного тела деформируемой гранью, и показаны контрольные точки деформируемой грани. Деформируемая грань построена на базе NURBS-поверхности:

../../../../_images/M.6.2.13.png

Рис. 13

../../../../_images/M.6.2.14.png

Рис. 14

На рис. 15 приведено деформируемое тело с перемещёнными контрольными точками деформируемой грани. На рис. 16 приведён результат деформирования тела:

../../../../_images/M.6.2.15.png

Рис. 15

../../../../_images/M.6.2.16.png

Рис. 16

При типах модификации dmm_PurifyFillets и dmm_PurifyFilletsChains рассматриваемая функция удаляет грани скруглений faces в копии тела solid и, используя окружение, обрабатывает место удалённых граней, сохраняя замкнутость тела. В режиме dmm_PurifyFilletsChains дополнительно удаляются все скругления, гладко стыкующиеся с выбранными гранями.

На рис. 17 и рис. 18 приведены тела, построенные путём удаления указанных граней скругления. Исходные тела приведены на рис. 1 и рис. 3, соответственно:

../../../../_images/M.6.2.17.png

Рис. 17

../../../../_images/M.6.2.18.png

Рис. 18

Функция ModifiedSolid() работает при условии сохранения неизменной топологии редактируемого тела.

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

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