Геометрическое ядро C3D обладает функционалом, который позволяет работать с моделями без истории построения. Например, с теми, которые были получены из импорта, или теми, у которых нет истории по каким-либо другим причинам. Такой функционал предусмотрен для работы непосредственно с гранями тела — либо с отдельными, либо с группами. В ядре C3D имеются такие опции, как удаление граней, очистка скруглений, отделение части тела, выступающих фичерсов, замена гладко стыкующихся граней одной гранью, замена одной грани сплайн-поверхностью для последующих модификаций и других действий, удаление вершин на открытых оболочках. Отдельный блок отвечает за модификацию граней: параллельное перемещение, перемещение грани по нормали, вращение грани относительно некоторой заданной оси и изменение радиуса скругления. Рассмотрим иллюстрации, демонстрирующие содержание данного функционала.
Первая функция — удаление граней с сохранением целостности тела (рис. 1).
Рис. 1
Эта функция подходит для удаления каких-либо отверстий, выступающих частей. Слева на рисунке синим цветом подсвечены удаляемые грани. Удаление можно производить даже в сложных случаях, например при редактировании резьбы, что демонстрируется на рисунке справа. Эта операция сохраняет целостность тела, однако не предполагает достраивания дополнительных граней или ребер.
На рис. 2 представлен еще один пример работы данного функционала.
Рис. 2
Очевидно, что можно удалить как часть какого-то фичерса — внутренние или внешние вырезы, так и весь фичерс целиком, просто оставив гладкую поверхность.
В качестве одного из вариантов удаления граней в ядре C3D на рис. 3 показана возможность очистки скруглений, разработанная специально для решения этой специфической задачи. Более того, можно удалять различные цепочки стыкующихся скруглений.
Рис. 3
Помимо этого ядро C3D позволяет удалять (обрабатывать) скругления на листовых телах. На рис. 3 в центре приведен листовой профиль, в котором удалены скругления. Справа показано, каким образом можно удалить даже некоторые конструктивные элементы и получить изначальную модель — ту, что была до всех этих операций.
На рис. 4 приведен пример комплексного применения очистки скруглений и удаления граней из профиля.
Глядя на рис. 4, мы можем убедиться, что разнородные скругления и отверстия можно удалить. Синим цветом подсвечены скругления, которые невозможно удалить, потому что нет понимания, что предшествовало операциям скругления. В ситуациях подобной неоднозначности невозможно произвести удаление, однако во всех остальных — это реально.
Рис. 4
Следующая функция — отделение части тела — подходит для отделения небольших выступающих фичерсов с крупной модели, когда нецелесообразно удалять с нее множественное количество граней. В этом случае можно просто выделить малую часть и получить отдельное тело, отдельную замкнутую оболочку (рис. 5).
Рис. 5
Перейдем к блоку, касающемуся модификации граней. На рис. 6 слева представлен пример перемещения поверхности по нормали и модификация цилиндрических граней.
Для цилиндрических сферических, тороидальных и подобных поверхностей перемещение по нормали эквивалентно изменению радиуса. На рис. 6 справа — пример реализации этой опции, которую можно применить, в том числе, для изменения радиусов отверстий. Нужно отметить, что все скругления, которые примыкают к модифицированным граням, адаптируются, то есть общая топология модели и радиусы скруглений — сохраняются.
Рис. 6
Остановимся еще на одном примере перемещения поверхности по нормали.
На рис. 7 справа отражено, как адаптируются скругления. Слева — результат наших усилий по изменению топологии модели при модификациях прямого редактирования. Так, нам удалось переместить грань за пределы прилегающих скруглений.
Рис. 7
Рис. 8 также демонстрирует проведенную работу по изменению топологии в отдельных случаях.
Рис. 8
Слева на рис. 8 представлено слияние двух граней: можно оттянуть одну из них заподлицо с другой, и они сольются в единую плоскость, с которой потом можно будет взаимодействовать как с единым целым. Справа представлено отделение от касательных граней цилиндрической поверхности. Верхняя цилиндрическая поверхность касается боковых плоскостей, но путем перемещения поверхности по нормали их можно отделить от цилиндра. Во всех этих случаях топология модели меняется. Пока такая опция возможна лишь для отдельных сценариев.
Следующая функция — это перемещение поверхности грани параллельно ей самой (рис. 9).
Рис. 9
Она подходит для перемещения отверстий или фичерсов в пределах одной грани. Здесь представлено отверстие тороидальной формы с примыкающим скруглением. Видно, что его можно двигать в рамках одной грани — и скругление адаптируется соответствующим образом.
Особого внимания заслуживает новый функционал геометрического ядра C3D. Опция вращения поверхности грани относительно какой-либо оси изначально была разработана в качестве аналога операции «уклон» для одной грани, но работает и на группах граней (рис. 10).
Рис. 10
Она подходит для некоторых цилиндрических деталей — пазы и петли можно вращать вокруг центра. Здесь также работает адаптация скруглений.
Кроме того, возможно изменение радиуса скругления.
На рис. 11 справа изменение радиуса продемонстрировано на цепочке состыкованных скруглений. Слева — на скруглении с переменным радиусом — это центральное скругление. Примеры подтверждают, что можно реализовать даже такие нестандартные сценарии.
Рис. 11
Обратимся к проблеме замены гладко стыкующихся граней одной гранью.
Такой функционал есть в геометрическом ядре C3D. На рис. 12 изображена импортированная деталь, у которой есть два лишних ребра. Если выделить эти грани и объединить их, то на нее натягивается некая NURBS-поверхность, и две грани превращаются в одну. Далее с ними можно работать как с единым целым: ребра удалились и ошибка исправилась.
Рис. 12
Вариант предыдущего функционала — замена одной грани сплайн-поверхностью.
На рис. 13 мы видим, что верхняя грань была заменена на NURBS-поверхность, которая затем модифицирована произвольным образом для демонстрации.
Рис. 13
Не менее важная функция — это удаление вершин (рис. 14).
Рис. 14
Она разрабатывалась для незамкнутых тел. Например, для того чтобы на отдельно лежащей грани можно было выделить какие-то вершины или возможные вырезы и удалить их. По сути, эта операция аналогична удалению ребра через слияние его вершин. Можно удалить все фичерсы, оставив необходимый минимум: три грани, три вершины.
Подытожим, какие усовершенствования были внесены в данную версию геометрического ядра C3D:
- разработан функционал поворота граней;
- для операции «уклон» сделана адаптация скруглений методами прямого редактирования;
- стала доступна адаптация скруглений по кривой, скруглений переменного радиуса, скруглений по закону;
- добавлена возможность менять топологию в отдельных сценариях;
- сделаны общие улучшения в алгоритмах адаптации скруглений, в том числе около швов и полюсов.
В дальнейшем мы планируем продолжить работу над изменением топологии во всех операциях с гранями, то есть в перемещении по нормали, перемещении в произвольном направлении, в поворотах. Мы намерены добавить новую опцию — замену грани произвольно заданной поверхностью. Кроме того, планируем расширить возможности адаптации сложных скруглений переменного радиуса, таких как скругления по закону, скругления эллипсом. Еще одна задача — удаление и адаптация скруглений, слитых из нескольких частей. Также прямо сейчас ведется работа по унификации API в связи с тем, что функционал растет и имеющийся API уже не может охватить весь набор возможностей. API будет унифицирован в соответствии со стандартами компании C3D Labs, и в качестве подзадачи в него будет включено управление точностью построений и операций.