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

Евгений Кондратюк, математик-программист, C3D Labs, представляет обзор возможностей геометрического ядра C3D в области прямого моделирования, или прямого редактирования.

Геометрическое ядро C3D обладает функционалом, который позволяет работать с моделями без истории построения. Например, теми, которые были получены из импорта, или теми, у которых нет истории по каким-либо другим причинам. Такой функционал предусмотрен для работы непосредственно с гранями тела — либо с отдельными, либо с группами. В ядре C3D имеются такие опции, как удаление граней, очистка скруглений, отделение части тела, выступающих фичерсов, замена гладко стыкующихся граней одной гранью, замена одной грани сплайн-поверхностью для последующих модификаций и других действий, удаление вершин на открытых оболочках. Отдельный блок отвечает за модификацию граней — параллельное перемещение, перемещение грани по нормали, вращение грани относительно некоторой заданной оси и изменение радиуса скругления. Рассмотрим иллюстрации, демонстрирующие содержание данного функционала.

Удаление граней с сохранением целостности тела

Первая функция — удаление граней с сохранением целостности тела.

Удаление отверстия и резьбы

Удаление отверстия и резьбы

Эта функция подходит для удаления каких-либо отверстий, выступающих частей. Слева на рисунке синим цветом подсвечены удаляемые грани. Удаление можно производить даже в сложных случаях, например при редактировании резьбы, что демонстрируется на рисунке справа. Эта операция сохраняет целостность тела, однако не предполагает достраивания дополнительных граней или ребер.

На следующем рисунке представлен еще один пример работы данного функционала.

Разные стадии удаления граней с сохранением целостности тела

Разные стадии удаления граней с сохранением целостности тела

Очевидно, что можно удалить как часть какого-то фичерса — внутренние или внешние вырезы, так и удалить весь фичерс целиком, просто оставив гладкую поверхность.

Очистка скруглений

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

Удаление скруглений с разных моделей

Удаление скруглений с разных моделей

Помимо этого, ядро C3D позволяет удалять (обрабатывать) скругления на листовых телах. На рисунке в центре показан листовой профиль, в котором удалены скругления. Справа изображено, каким образом можно удалить даже некоторые конструктивные элементы и получить изначальную модель — ту, что была до всех этих операций.

Далее следует пример комплексного применения очистки скруглений и удаления граней из профиля.

Удаление скруглений и отверстий с сохранением целостности тела

Удаление скруглений и отверстий с сохранением целостности тела

Глядя на рисунок, мы можем убедиться, что разнородные скругления и отверстия можно удалить. Синим цветом подсвечены скругления, которые невозможно удалить, потому что нет понимания, что предшествовало операциям скругления. В ситуациях подобной неоднозначности невозможно произвести удаление, однако во всех остальных — это реально.

Отделение части тела

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

Отделение части тела

Отделение части тела

Модификация граней

Перейдем к блоку, касающемуся модификации граней.

Перемещение грани по нормали

На рисунке слева представлен пример перемещения поверхности по нормали и модификация цилиндрических граней.

Изменение радиусов цилиндрических поверхностей

Изменение радиусов цилиндрических поверхностей

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

Остановимся еще на одном примере перемещения поверхности по нормали.

Перемещение грани с изменением топологии

Перемещение грани с изменением топологии

Справа отражено, как адаптируются скругления. Слева — результат наших усилий по изменению топологии модели при модификациях прямого редактирования. Так, нам удалось переместить грань за пределы прилегающих скруглений.

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

Слияние граней и отделение касательных граней

Слияние граней и отделение касательных граней

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

Параллельное перемещение поверхности грани

Следующая функция — это перемещение поверхности грани параллельно себе.

Перемещение отверстия в пределах грани

Перемещение отверстия в пределах грани

Она подходит для перемещений отверстий или фичерсов в пределах одной грани. Здесь представлено отверстие тороидальной формы с примыкающим скруглением. Видно, что его можно двигать в рамках одной грани — и скругление адаптируется соответствующим образом.

Вращение грани относительно некоторой заданной оси

Отдельного внимания стоит новый функционал геометрического ядра C3D. Опция вращения поверхности грани относительно какой-либо оси изначально была разработана в качестве аналога операции «уклон» для одной грани, но работает и на группах граней.

Вращение грани

Вращение грани

Она подходит для некоторых цилиндрических деталей — пазы и петли можно вращать вокруг центра. Здесь также работает адаптация скруглений.

Изменение радиуса скругления

Кроме того, возможно изменение радиуса скругления.

Изменение радиуса цепочки скруглений

Изменение радиуса цепочки скруглений

На рисунке справа изменение радиуса продемонстрировано на цепочке состыкованных скруглений. Слева — на скруглении с переменным радиусом — это центральное скругление. Примеры подтверждают, что можно реализовать даже такие нестандартные сценарии.

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

Обратимся к проблеме замены гладко стыкующихся граней одной гранью.

Замена нескольких граней одной

Замена нескольких граней одной

Такой функционал есть в геометрическом ядре C3D. На рисунке изображена импортированная деталь, у которой есть два лишних ребра. Если выделить эти грани и объединить их, то на нее натягивается некая NURBS-поверхность, и две грани превращаются в одну. Далее с ними можно работать как с единым целым: ребра удалились, и ошибка исправилась.

Замена грани сплайн-поверхностью

Вариант предыдущего функционала — замена одной грани сплайн-поверхностью.

Замена грани сплайновой поверхностью

Замена грани сплайновой поверхностью

На примере мы видим, что верхняя грань была заменена на NURBS-поверхность и далее модифицирована произвольным образом для демонстрации.

Удаление вершин

Не менее важная функция — это удаление вершин.

Удаление вершин при перемещении ребра

Удаление вершин при перемещении ребра

Она разрабатывалась для незамкнутых тел. Например, для того чтобы на отдельно лежащей грани можно было выделить какие-то вершины или возможные вырезы и удалить их. По сути, эта операция аналогична удалению ребра через слияние его вершин. Можно удалить все фичерсы, оставив необходимый минимум — три грани, три вершины.

Подытожим, какие усовершенствования были внесены в данную версию геометрического ядра C3D:

  • разработан функционал поворота граней;

  • для операции «уклон» сделана адаптация скруглений методами прямого редактирования;

  • стала доступна адаптация скруглений по кривой, скруглений переменного радиуса, скруглений по закону;

  • добавлена возможность менять топологию в отдельных сценариях;

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

В дальнейшем мы планируем продолжить работу над изменением топологии во всех операциях с гранями, то есть в перемещении по нормали, перемещении в произвольном направлении, в поворотах. Мы намерены добавить новую опцию — замену грани произвольно заданной поверхностью. Кроме того, планируем расширить возможности адаптации сложных скруглений переменного радиуса, таких как — скругления по закону, скругления эллипсом. Еще одна задача — удаление и адаптация скруглений, слитых из нескольких частей. Также прямо сейчас ведется работа по унификации API в связи с тем, что функционал растет и имеющийся API уже не может охватить весь набор возможностей. API будет унифицирован в соответствии со стандартами компании C3D Labs, и в качестве подзадачи в него будет включено управление точностью построений и операций.

95fe2d916748e270ff268346d3890152.pngЕвгений Кондратюк

Математик-программист, C3D Labs

© Habrahabr.ru