26.03.2024 • C3D Modeler

Новые команды в функциях прямого моделирования C3D Modeler — изменение радиуса скругления и замена грани

В C3D Modeler, в функциях прямого моделирования, появились новые команды. Прямое моделирование — изменение формы импортированных моделей без истории построения.

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

Новые команды в функциях прямого моделирования C3D Modeler — изменение радиуса скругления и замена грани, фото 1
Рис. 1. Работа команды изменения радиуса скругления

Если в процессе импорта скругления превратились в nurbs-поверхности, команда их распознает как скругления. И после выполнения операции эти поверхности перестанут быть сплайнами и превратятся в элементарные, сохранив свои атрибуты.

Для вызова всех методов прямого редактирования используется функция:
MATH_FUNC (MbResultType) ModifiedSolid (файл action_direct.h)

Для передачи в неё требуется создать класс параметров MbModifiedSolidParams с типом операции MbeModifyingMode::dmm_FilletsRadiusSet или dmm_FilletsRadiusSetSingle.

Параметры создаются по подходящему конструктору:

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

dmm_FilletsRadiusSet — изменяет всю цепочку гладко состыкованных скруглений одинакового радиуса, как проиллюстрировано на рисунке выше.

dmm_FilletsRadiusSetSingle — изменит только указанные грани, если это возможно. Это может потребоваться, например, для изменения только одного из нескольких скруглений одного радиуса, стыкующихся на угле.

Отличие от существовавшего ранее типа операции dmm_FilletsRadiusChange в том, что dmm_FilletsRadiusChange изменяет радиус на указанное число value, а dmm_FilletsRadiusSet устанавливает новый радиус всем присланным скруглениям. Например, если на вход поданы 2 грани скругления с радиусами 10 и 20, то при value=5 в режиме dmm_FilletsRadiusChange эти скругления после операции будут иметь радиусы 15 и 25, а при dmm_FilletsRadiusSet 5 и 5 соответственно.

Данная функциональность не предназначена для использования на скруглениях переменного радиуса, скруглениях эллипсом и т. п. Конфигурация скруглений на углах по возможности сохраняется, но в сложных случаях это не гарантируется.

В результатах операции создаются несколько вспомогательных объектов, характеризующие предполагаемое расположение новой грани, даже при невозможности выполнения операции. Это точка в центре новой грани скругления, ось, перпендикулярная окружности скругления, угол раскрывания скругления. Их можно получить при помощи метода MbModifiedSolidResults::GetFilletRadiusSetHotPoint.

Другая новинка в прямом моделировании — это функция замены граней. Достаточно выбрать редактируемую грань и указать опорную. В этом случае тело перестроится, изменив форму грани. Скругления, гладко примыкающие к заменяемым граням, адаптируются.

Новые команды в функциях прямого моделирования C3D Modeler — изменение радиуса скругления и замена грани, фото 2
Рис. 2. Замена грани

Для вызова требуется класс параметров MbModifiedSolidParams с типом операции MbeModifyingMode::dmm_ReplaceFaces.

Параметры создаются по подходящему конструктору:

  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 )

Редактируемую грань можно сразу заменять на поверхности с эквидистантным смещением (массив значений offsets). Если существует несколько вариантов замены: различные петли или периодические поверхности, то выбор осуществляется при помощи номера, заданного в surfaceParts. Для элементарных поверхностей замена возможна на продолжении указанной поверхности, для всех прочих требуется существование поверхности в области продления тела, иначе результат не гарантируется.

Новые команды в функциях прямого моделирования C3D Modeler — изменение радиуса скругления и замена грани, фото 3
Рис. З. Замена нескольких граней на поверхность

Можно заменить сразу несколько граней на одну.

В результатах операции выдаются вспомогательные объекты, характеризующие предполагаемое расположение новой грани, даже при невозможности выполнения операции: точка в центре новой грани скругления и вектор, по которому эта точка смещается при изменении параметра сдвига. Их можно получить при помощи метода MbModifiedSolidResults::GetReplaceFacesHotPoint.

Описанная функциональность готовится к выпуску и уже доступна для тестирования в модуле C3D Modeler. Запросить пробную версию вы можете через форму обратной связи на нашем сайте.

Поделиться материалом
Вверх