Разработчик и интегратор российского ПО
для управления жизненным циклом изделий
Тележка с продуктами   телефонная трубка   изображение конверта
Продукты Решения Услуги Загрузки и поддержка Купить Контакты О компании

23.05.2025

Новая версия геометрического ядра RGK: открыто о сложностях и достижениях

Автор: Леонид Баранов, директор по развитию технологий моделирования

RGK-banner 2025

Приближается релиз новой версии отечественного геометрического ядра RGK от «Топ Системы». Компания делится результатами работы команды разработчиков за прошедший с предыдущей публикации период времени. Работа была проделана большая и разноплановая. Улучшения касались как функциональности API ядра, так и внутренних базовых алгоритмов. В статье хочется остановиться не только на новой функциональности ядра, но и на важных внутренних улучшениях и алгоритмах, которым, в значительной степени, была посвящена разработка за последний год.

«Неприятные» задачи в геометрическом моделировании

Для того, чтобы обсуждать достижения в некоторых аспектах функциональности ядра, нужно поговорить о том, какие задачи являются традиционно трудными и «неприятными» для геометрических ядер. Обычно не принято говорить о таких аспектах в обзорных публикациях, но нам кажется, что для читателей будет полезно полнее понимать внутреннюю «кухню» разработки промышленных геометрических ядер, сложности и вызовы, которые возникают в этом процессе. Как известно из прошлых публикаций важной особенностью ядра RGK является поддержка точностей топологических элементов и управление этими точностями. В том или ином виде такого рода информация присутствует во всех промышленных ядрах, хотя и в разных формах. Тут важно понимать, что механизм точностей должен являться базовым архитектурным элементом всего ядра, и все алгоритмы ядра должны поддерживать адекватную работу с этой важной информацией. В этом смысле невозможно адекватно внедрить этот механизм в код, который изначально не проектировался с учётом проблем, возникающих в связи со «сквозным» управлением точностью вычислений. На первый взгляд, наличие точностей у рёбер и вершин кажется очень простой идеей – любой инженер прекрасно понимает, что размеры в жизни не бывают точными. Но в геометрическом моделировании механизм точностей — это несколько более глубокая вещь. Именно правильная архитектура алгоритмов с учётом точностей является основой для обеспечения надёжности еометрического ядра на реальных промышленных данных. Основываясь на многолетнем опыте использования промышленных геометрических ядер и опыте собственных разработок, мы утверждаем, что невозможно обеспечить стабильную работу алгоритмов геометрического ядра без тонкой настройки алгоритмов по управлению точностью. Такие рассуждения могут показаться несколько абстрактными, но они объясняют почему разработчики RGK так много сил и времени уделяют совершенствованию именно этого аспекта ядра, хотя формально такая работа и не расширяет API. Излишне говорить, что архитектурная поддержка тех или иных аспектов моделирования представляет собой не более, чем необходимое условие успеха алгоритмов в обработке сложных и неприятных конфигураций при моделировании. Поэтому процесс совершенствования и выстраивания логики работы ядра в нетривиальных случаях идёт постоянно и будет продолжаться в будущих версиях.  Итак, какие задачи традиционно считаются «неприятными» в геометрическом моделировании? Это, в первую очередь, задачи, возникающие при построении пересечений касательных и «почти» касательных поверхностей и кривых. Они возникают в разных алгоритмах ядра – не только как чисто геометрических, но и топологических. Бывают ситуации, когда пересечение в некоторой области с заданной точностью становится двумерным множеством. То есть любая кривая в такой области удовлетворяет заданному условию. Но все дело в том, что с точки зрения конечного результата требуется выбрать только одно решение. То есть доопределить решение плохо обусловленной задачи в математическом смысле. Как следствие, из подобных ситуаций возникает понимание «неприятных» задач, которые не могут быть решены с произвольной точностью в силу особенностей своей постановки. Техника обработки подобных ситуаций зависит как от основного алгоритма моделирования, будь то булева операция, построение сглаживания, уклона и проч., так и от типов уравнений, задающих геометрию кривых и поверхностей – для аналитических логика и точности обработки могут быть одни, а для сплайновой геометрии – другие. Рассмотрим на примерах, какие результаты получены в новом релизе. Начнём с примеров в булевых операциях.

Задача вычитания «трубки» из тела с прорезями. Особенность задачи в том, что геометрия «трубки» почти касается прорезей первого операнда. При этом требуемая точность результата задаётся генератору в качестве входного параметра

Задача вычитания «трубки» из тела с прорезями. Особенность задачи в том, что геометрия «трубки» почти касается прорезей первого операнда. При этом требуемая точность результата задаётся генератору в качестве входного параметра

Результат булева вычитания в зависимости от точности входных данных и требуемой точности операции, заданной как входной параметр

Результат булева вычитания в зависимости от точности входных данных и требуемой точности операции, заданной как входной параметр

Рассмотрим более подробно поведение алгоритмов ядра в такой ситуации, чтобы пояснить суть происходящего «под капотом». Возьмём один из «уголков» из рисунков выше и приблизим его. Вот, что мы видим, так сказать, «под микроскопом»:

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

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

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

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

В приведённой иллюстрации производится совместный учёт точностей в булевой операции:

  • Учёт точности операции при слиянии поверхностей
  • Учёт точностей рёбер и вершин исходных тел
  • Слияние вершин и удаление рёбер для получения корректного результирующего тела

Ещё пара примеров на эту тему. Рассмотрим вот такое булево вычитание:

Учёт точностей в булевой операции: слияние вершин и удаление микро рёбер для построения корректного тела

Учёт точностей в булевой операции: слияние вершин и удаление микрорёбер для построения корректного тела

Ещё более непросто обстоит дело с пересечением сплайновых поверхностей. Рассмотрим задачу объединения почти касательных тел со сплайновой геометрией:

Пример, показывающий работу RGK в случае частичного наложения сплайновых поверхностей в булевых операциях

Пример, показывающий работу RGK в случае частичного наложения сплайновых поверхностей в булевых операциях

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

Конечно, развитие геометрического ядра «в глубину» не заменяет его развитие «в ширину», а именно неуклонное наращивание функциональности API как в плане развития уже существовавших генераторов, так и разработке новой функциональности.

Функциональность по формированию и редактированию модели

Логическое развитие получила функциональность генераторов тел по траектории. Теперь в генераторах Sweep, Extrusion и Rotation поддерживается возможность задания толщины стенки результирующего тела.

Придание толщины телу при движении контура по траектории

Придание толщины телу при движении контура по траектории

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

Расширилась «интеллектуальность» генерации. В частности, при движении по винтовой и «квазивинтовой» траектории стало доступно три режима ориентации перемещаемого профиля:

Режимы ориентации профиля при движении по траектории, похожей на винтовую линию

Режимы ориентации профиля при движении по траектории, похожей на винтовую линию

Следует отметить режим автоматического распознавания винтовой линии – он позволяет создавать «правильно» ориентированные тела не только в случае строго винтовой траектории, но и при траектории в определённом интуитивном смысле подобной винтовой. Подобным образом ведут себя генераторы геометрии в некоторых других промышленных ядрах. Как говорится, все дело в деталях, и это одна из таких деталей.

В новой версии добавлена поддержка продления многопрофильного тела по траектории за пределы первого и последнего профиля/контура.

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

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

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

Построение многопрофильного многосвязного тела по траектории с заданием соответствия компонент связности

Построение многопрофильного многосвязного тела по траектории с заданием соответствия компонент связности

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

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

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

В генераторе «по сечениям»:

  • Существенно доработан генератор
  • Некоторые алгоритмы стали проще и надёжнее
  • Выросла стабильность и качество результатов
  • Добавлена новая функциональность

Теперь поддерживается комбинация замкнутого и открытого сечения в общем виде.

Комбинация разных типов сечений в операции «По сечениям»

Комбинация разных типов сечений в операции «По сечениям»

Добавлена поддержка касания сечений по вершинам.

Пример на касание нескольких сечений по вершине

Пример на касание нескольких сечений по вершине

Реализована поддержка касательных граничных условий в операции «По сечениям» с вершиной – можно задать нормаль плоскости касательной, к которой будет поверхность в точке завершения.

Примеры операции «По сечениям» с касанием в вершине (верхние поверхности построены без задания условия касания, нижние с условием)

Примеры операции «По сечениям» с касанием в вершине (верхние поверхности построены без задания условия касания, нижние с условием)

Значительно улучшены алгоритмы обеспечения построения поверхностей в операции «По сечениям» с соблюдением граничных условий как для продольных, так и поперечных сечений.

Примеры операции «По сечениям» с условиями гладкости на продольные сечения

Примеры операции «По сечениям» с условиями гладкости на продольные сечения

Примеры операции «По сечениям» с векторным условием касания на поперечном сечении

Примеры операции «По сечениям» с векторным условием касания на поперечном сечении

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

Примеры работы генератора на одном и том же наборе сечений с указанием разных требований по гладкости в каждом из сечений

Примеры работы генератора на одном и том же наборе сечений с указанием разных требований по гладкости в каждом из сечений

Дальнейшее развитие получила функциональность булевых операций. Точнее инструментов моделирования на основе теоретико-множественной логики, частным случаем которых являются традиционные операции сложения, вычитания и пересечения объёмов. Была значительно расширена возможность работы с так называемыми non-manifold топологиями – обобщением понятия твёрдого тела на комбинацию топологий различной размерности.

Пример работы булевого объединения твёрдого и поверхностного тела с различными значениями опций слияния топологий

Пример работы булевого объединения твёрдого и поверхностного тела с различными значениями опций слияния топологий

Иллюстрация различных результатов булевого вычитания в non-manifold случае с различными значениями флагов управления топологией ответов

Иллюстрация различных результатов булевого вычитания в non-manifold случае с различными значениями флагов управления топологией ответов

Пример булевого вычитания non-manifold тел

Пример булевого вычитания non-manifold тел

В текущей версии логика работы с обобщённой топологией доведена до полноты – поддерживаются все требуемые на практике конфигурации, а алгоритмы ядра учитывают в своей работе возникающие топологические обобщения.

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

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

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

Пример булевого объединения нескольких тел с отбрасыванием лишней топологии

Пример булевого объединения нескольких тел с отбрасыванием лишней топологии

Развивается в RGK и функциональность локального редактирования модели. В распознавании сглаживаний добавлена поддержка фасок.

Автоматическое распознавание фасок на модели

Автоматическое распознавание фасок на модели

Значительно улучшились возможности ядра в части редактирования сглаживаний с ветвлениями. Вот пара примеров для иллюстрации текущих возможностей.

Пример изменения радиуса сглаживаний с ветвлением и зависимыми гранями

Пример изменения радиуса сглаживаний с ветвлением и зависимыми гранями

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

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

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

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

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

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

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

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

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

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

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

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

Пример удаления цепочек сглаживания с ветвлениями

Пример удаления цепочек сглаживания с ветвлениями

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

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

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

Пример работы общего алгоритма удаления граней

Пример работы общего алгоритма удаления граней

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

Построение уклона граней с предварительным разрезанием изоклиной

Построение уклона граней с предварительным разрезанием изоклиной

В новой версии возможно задание поверхности разъёма (поверхностного тела), лежащей за пределами уклоняемых граней, и даже твёрдого тела.

Построение уклона с указанием поверхностного тела как неподвижной геометрии, так что уклоняемые грани формируются относительно неподвижной геометрии

Построение уклона с указанием поверхностного тела как неподвижной геометрии, так что уклоняемые грани формируются относительно неподвижной геометрии

Пример уклонения грани, в котором неподвижная геометрия не пересекает грань

Пример уклонения грани, в котором неподвижная геометрия не пересекает грань

Появилась возможность задания рёбер и граней для построения ступенек в уклоне.

Доступные опции в построении уклона граней с построением ступенек (с указанием рёбер отрыва и поверхности разъёма как со ступенькой по нормали, так и по поверхности)

Доступные опции в построении уклона граней с построением ступенек (с указанием рёбер отрыва и поверхности разъёма как со ступенькой по нормали, так и по поверхности)

Доступные опции в построении уклона граней с построением ступенек (с указанием рёбер отрыва и поверхности разъёма как со ступенькой по нормали, так и по поверхности)

Доступные опции в построении уклона граней с построением ступенек (с указанием рёбер отрыва и поверхности разъёма как со ступенькой по нормали, так и по поверхности)

В генераторе построения оболочек появилась поддержка изменения топологии тела при смещении. Тем самым, поддерживается возможность вырождения топологических элементов.

Пример вырождения граней при построении оболочки внутрь тела

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

Традиционно, значительное развитие получила функциональность RGK в части построения сглаживаний рёбер и граней. Как известно по прошлым обзорам функциональности ядра, развитие происходит в двух основных направлениях: расширение списка решаемых геометрических задач и совершенствование топологических алгоритмов. В обоих этих направлениях в новой версии разработчиками достигнуты значительные успехи. Рассмотрим, в первую очередь, геометрическую часть задачи. Для начала остановимся на обработке ситуации, когда при построении поверхности может получиться самопересечение поверхностей сглаживания. Как известно, ранее в RGK уже были разработаны алгоритмы, которые позволяют бороться с некоторыми типами таких сложностей. В новой версии эти инструменты получили дальнейшее развитие. Во-первых, были улучшены методы поиска границ области самопересечения. Во-вторых, разработана математика коррекции границы такой области – регуляризации задачи – и применена новая математика генерации поверхностей сглаживания для областей сложной формы. Это позволило решать весьма сложные постановки, ранее доступные только паре-тройке геометрических ядер в мире.

Пример построения сглаживания в зоне самопересечения с применением силу большого радиуса

Пример построения сглаживания в зоне самопересечения с применением силу большого радиуса

Добавились новые типы поверхностей сглаживания. В частности, теперь поддерживается переменная ширина поверхности сглаживания.

Иллюстрация схемы построения поверхности сглаживания переменной ширины

Иллюстрация схемы построения поверхности сглаживания переменной ширины

Управляющие параметры режима переменной ширины сглаживания

Управляющие параметры режима переменной ширины сглаживания

Примеры возможных формы сечений в режиме переменной ширины

Примеры возможных формы сечений в режиме переменной ширины

Пример работы нового режима в случае «катящегося шарика» и дискового сглаживания

Пример работы нового режима в случае «катящегося шарика» и дискового сглаживания

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

Иллюстрация режимов «конических» сглаживаний

Иллюстрация режимов «конических» сглаживаний

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

Таблица, иллюстрирующая режимы сглаживания RGK

Таблица, иллюстрирующая режимы сглаживания RGK

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

Иллюстрация проблемы излома касательной плоскости при линейном изменении радиуса и поведения алгоритма сглаживания в новой версии ядра

Иллюстрация проблемы излома касательной плоскости при линейном изменении радиуса и поведения алгоритма сглаживания в новой версии ядра

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

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

Примеры работы Y-формы в новой версии ядра

Примеры работы Y-формы в новой версии ядра

Примеры работы Y-формы в новой версии ядра

Примеры работы Y-формы в новой версии ядра

Примеры работы Y-формы в новой версии ядра

Примеры работы Y-формы в новой версии ядра

Иллюстрация сравнения поведения алгоритма Y-формы с известным иностранным конкурирующим ядром

Иллюстрация сравнения поведения алгоритма Y-формы с известным иностранным конкурирующим ядром

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

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

Иллюстрация поддержки много сегментной «заплатки» в алгоритмах сглаживания переменного радиуса

Иллюстрация поддержки много сегментной «заплатки» в алгоритмах сглаживания переменного радиуса

Много внимания было уделено улучшению надёжности алгоритмов с учётом точностей исходных моделей.

Пример обработки через «почти касательное» ребро с корректировкой фактической точности топологии

Пример обработки через «почти касательное» ребро с корректировкой фактической точности топологии

Иллюстрация учёта точности входной геометрии в ситуации обрезки боковой гранью

Иллюстрация учёта точности входной геометрии в ситуации обрезки боковой гранью

Также был снят ряд ограничений в алгоритмах перекрытия сглаживающих последовательностей. Вот несколько примеров, которые теперь обрабатываются новой обобщённой логикой.

Примеры перекрытия сглаживающих последовательностей (построение сглаживания за одну операцию)

Примеры перекрытия сглаживающих последовательностей (построение сглаживания за одну операцию)

Примеры перекрытия сглаживающих последовательностей (построение сглаживания за одну операцию)

Ослаблены ограничения в топологии трёх и четырёх-рёберных обработок, сходящихся в одну вершину рёбер.

Иллюстрация новых возможностей RGK в «трёхрёберной» обработке

Иллюстрация новых возможностей RGK в «трёхрёберной» обработке

Иллюстрация возможностей «четырёх-рёберной» обработки (тело справа с аналитическими поверхностями, а слева тело той же топологии, но со сплайновыми гранями и более грубой точностью топологии)

Иллюстрация возможностей «четырёх-рёберной» обработки (тело справа с аналитическими поверхностями, а слева тело той же топологии, но со сплайновыми гранями и более грубой точностью топологии)

Рассмотрим ещё ряд улучшений топологических алгоритмов сглаживания. Нередко возникают ситуации, когда сглаживаемые грани в одной своей области трансверсальны, а в другой практически касаются друг друга. Бывают так же ситуации, когда конфигурации граней имеют так называемую «переменную» выпуклость – одна часть выпуклая, а другая вогнутая. Такие случаи являются вызовом для любого геометрического ядра. Если ещё добавить, что сглаживаемые рёбра могут иметь разные точности, то, становится понятно, что стоит задача корректного учёта как входных точностей модели, так и особенностей задачи с «неприятной» постановкой, о которых писали в начале статьи. Теперь несколько наглядных примеров, что умеет новая версия RGK.

Примеры работы RGK в областях с «неприятной» структурой

Примеры работы RGK в областях с «неприятной» структурой

Примеры работы RGK в областях с «неприятной» структурой

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

Пример корректной работы алгоритмов RGK новой версии в «пограничных» случаях (приведён случай на фрагменте реальной модели, где сглаживаемые грани представляют собой сплайновые поверхности)

Пример корректной работы алгоритмов RGK новой версии в «пограничных» случаях (приведён случай на фрагменте реальной модели, где сглаживаемые грани представляют собой сплайновые поверхности)

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

Примеры работы нового алгоритма встраивания сглаживания

Примеры работы нового алгоритма встраивания сглаживания

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

Пример работы функциональности остановки сглаживания по выбранной топологии тела

Пример работы функциональности остановки сглаживания по выбранной топологии тела

Отдельного рассмотрения заслуживает развитие математики поверхностей для решения различных сложных задач «заполнения области». Об этом классе алгоритмов, которые развиваются в RGK, было объявлено в прошлой версии. С тех пор был достигнут значительный прогресс в качестве результатов. Следует отметить, что для его получения потребовалось существенно больше времени и усилий по развитию уникальной математики поверхностей приближения, которая находит применение в разных частях ядра, чем первоначально предполагалось. Также следует отметить, что работа в этой области продолжается, но уже в новой версии эти алгоритмы включены в различные обработки, которым они соответствуют. Рассмотрим подробнее, о каком инструменте идёт речь. При моделировании часто возникает потребность построить поверхность, которая бы аппроксимировала заданный контур (набор кривых) с заданной точностью, при этом обеспечивала бы гладкое (в смысле G1 или G2) сопряжение с поверхностями, граничащими с границами контура. Другой вариант задачи предполагает возможность задания кривых и точек внутри области затягивания. Есть задача замены набора гладко сопряжённых граней одной поверхностью с требуемой степенью гладкости.  Есть ещё целый ряд родственных постановок. В частности, пресловутая задача формирования «чемоданного угла» в сглаживании и ее обобщение. Во всех современных промышленных ядрах для решения указанных задач исторически используются разные техники построения поверхностей. Однако наиболее общим механизмом является алгоритм построения поверхности приближения, близкий по идеям к физическим моделям тонких деформируемых пластин. Тут нужно указать, что вообще-то речь идёт не о компактном алгоритме, который формально решает задачу, а скорее о семействе параметрически управляемых алгоритмов, которые на выходе формируют поверхность требуемого качества. Этим фактом и обусловлена большая математическая и программная сложность реализации такого подхода в ядрах. Вместе с тем мощность математики, которая стоит за этим, позволяет решить целый спектр задач поверхностного моделирования. Приведём примеры работы таких алгоритмов в новой версии RGK.

Примеры поверхностей приближения при заполнении областей с разной степень гладкости на границе

Примеры поверхностей приближения при заполнении областей с разной степень гладкости на границе

Более подробно рассмотрим случай формирования поверхности приближения на «неприятной» задаче приближения «ломанного» каркаса.

Пример построения поверхности (слева исходный контур с изломом, дальше гладкая поверхность, которая приближает его с заданной точностью)

Пример построения поверхности (слева исходный контур с изломом, дальше гладкая поверхность, которая приближает его с заданной точностью)

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

Пример G1 гладкого заполнения области невыпуклой формы с соблюдением касания с соседними гранями

Пример G1 гладкого заполнения области невыпуклой формы с соблюдением касания с соседними гранями

Пример затягивания области типа «неправильная звезда» с соблюдением G1 гладкости на границах

Пример затягивания области типа «неправильная звезда» с соблюдением G1 гладкости на границах

Пример заполнения шестиугольной области по G2 условию через границу

Пример заполнения шестиугольной области по G2 условию через границу

Пример применения алгоритма приближения в задаче замены набора гладко сопряжённых граней поверхностью с соблюдением гладкости через границы

Пример применения алгоритма приближения в задаче замены набора гладко сопряжённых граней поверхностью с соблюдением гладкости через границы

В завершение обзора алгоритма приближения поверхностей хочется рассказать об использовании инструментов RGK в новой версии T-FLEX CAD 18 для решения важной прикладной задачи. Речь идёт о задаче построения, так называемой поверхности «грубого смещения». Дело в том, что в автомобильной промышленности при проектировании кузова автомобиля возникает необходимость построения поверхности, эквидистантной набору граней с большим смещением – таким, что эквидистанта в обычном смысле не существует из-за «схлопывания» топологий и самопересечений. Это пример сугубо прикладной задачи геометрического моделирования, которую нельзя отнести к функциональности общего применения и решение которой нет смысла добавлять в ядро как отдельный генератор. Но ее можно решить, используя инструменты ядра. В качестве референса здесь мы используем аналогичную функциональность CATIA v5. И так покажем наглядно в чем состоит задача.

Иллюстрация постановки задачи построения поверхности «грубого смещения» (серым цветом показано исходное листовое тело, а красным результирующая сплайн поверхность смещения)

Иллюстрация постановки задачи построения поверхности «грубого смещения» (серым цветом показано исходное листовое тело, а красным результирующая сплайн поверхность смещения)

Как видно на приведённой иллюстрации, задача не может быть решена традиционной функциональностью геометрических ядер из-за фактически полного вырождения топологий на больших величинах смещения. Также следует заметить, что требования по точности аппроксимации результата в данной задаче не высоки – требуется построить «спокойную» поверхность, примерно повторяющую форму исходного листового тела. Применение математики RGK дало возможность решить эту задачу в рамках проекта T-FLEX CAD 18.

Пример работы алгоритма на меньшем смещении

Пример применения функциональности «грубого смещения» на реальной модели в сравнении с конкурирующим решением (нужно обратить внимание, что результат в T-FLEX CAD несколько точнее)

Пример работы алгоритма на меньшем смещении

Пример работы алгоритма на меньшем смещении

Ещё раз обратим внимание, что показанный пример – это демонстрация использования применения технологий RGK в рамках проекта T-FLEX CAD 18, а не функция самого ядра. Это важный момент, иллюстрирующий факт, что разработчики RGK очень аккуратно подходят к составу API ядра, не перегружая его прикладными функциями, не требуемыми большинству приложения. Тем самым не «раздувая» API, но обеспечивая необходимый инструментальный базис для всех областей применения. Это важный принцип разработки ядра в качестве универсального промышленного инструмента для использования в широкой гамме приложений. Такой достаточный минимализм стал возможен, так как RGK изначально разрабатывалось как универсальное ядро на основе многолетнего опыта применения промышленных геометрических ядер, а не как рефакторинг внутренних алгоритмов той или иной прикладной системы.  Кстати говоря, исходная модель была получена импортом через формат STEP, транслятором, входящим в расширенную поставку RGK.

Помимо совершенствования уже существовавших в прошлых версиях инструментов, разработан ряд новых генераторов. В частности, большая работа была проделана по созданию генератора построения серединных тел. Эта важная для расчётных приложений функциональность ранее не была доступна в RGK, но с выходом новой версии ядра появилась в API. Следует предварительно рассказать, что это за функциональность и почему ей в новой версии было уделено значительное внимание. Дело в том, что при построении расчётной модели так называемых «оболочечных» конструкций важно уметь заменить тонкостенное твёрдое тело поверхностным телом, грани которого будут находится внутри и, в некотором смысле, «посередине» граней исходного тела. «Серединность» обычно понимается по крайней мере в трёх смыслах.

Пояснение трёх различных интерпретации срединной поверхности в RGK

Пояснение трёх различных интерпретации срединной поверхности в RGK

Понятно, что наиболее типичный способ – это интерпретировать серединную поверхность именно как простую эквидистантную к заданной паре поверхностей. Но это возможно не всегда. А именно только тогда, когда соответствующая пара граней сама содержит поверхности, эквидистантные друг другу. В других случаях используются другие интерпретации. В том числе и формально точное – поверхность, каждая точка которой равноудалена от двух заданных поверхностей. Для построения такой поверхности требуется решать некоторые уравнения. Но построением самой поверхности задача не ограничивается. Так как исходное тело содержит больше одной пары граней, требуется построить грани нового листового тела для каждой «эквидистантной» пары и потом увязать такие грани между собой для формирования корректного поверхностного тела. Этот результат достигается за счёт нескольких последовательных шагов.

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

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

Примеры формирования листовой модели для тонкостенных твёрдых тел

Примеры формирования листовой модели для тонкостенных твёрдых тел

Примеры формирования листовой модели для тонкостенных твёрдых тел

Как можно заметить из представленных иллюстраций, возможен ответ как виде набора отдельных связанных листовых тел, так и в виде non-manifold листового тела – в зависимости от потребностей приложения. Новый инструмент уже сейчас оснащён довольно мощными практическими опциями. Так, например, доступна возможность автоматического удаления сглаживаний.

Построение серединного тела с автоматическим удалением сглаживаний

Построение серединного тела с автоматическим удалением сглаживаний

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

Примеры работы генератора теней на точной модели тела в случае параллельной проекции

Примеры работы генератора теней на точной модели тела в случае параллельной проекции

Пример работы генератора теней на точной модели тела в случае центральной проекции

Пример работы генератора теней на точной модели тела в случае центральной проекции

Пример разделения тела изоклинами с заданным углом уклонения нормалей

Пример разделения тела изоклинами с заданным углом уклонения нормалей

При работе с проволочными телами (кривыми) добавилась возможность построения эквидистанты к кривой по поверхности, на которой она лежит и построение листового тела как смещения кривой в две стороны.

Пример построения поверхностного тела путём построения эквидистанты заданной кривой с обработкой углов и самопересечений

Пример построения поверхностного тела путём построения эквидистанты заданной кривой с обработкой углов и самопересечений

Улучшения в функциональности анализа модели

Дальнейшие улучшения проведены в алгоритмах расчёта параметров модели. В частности, площади поверхности и объёма тела. Теперь возможно получение таких параметров с высокой точностью в случае определённых классов геометрии. Более конкретно поддерживается:

  • Плоскость, ограниченная прямыми, окружностями и эллипсами
  • Сфера, ограниченная окружностями любого радиуса
  • Цилиндр, конус и тор, ограниченные своими изолиниями

Например, вот для таких тел объем и площадь могут быть подсчитаны с точностью машинного округления:

Пример тел, объём которых сейчас насчитывается точно

Пример тел, объём которых сейчас насчитывается точно

Пример тел, площадь поверхности и объем (для верхних тел), которых сейчас насчитывается точно

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

Значительное внимание в новой версии ядра было уделено совершенствованию алгоритмов построения проекций моделей на плоскость. Была существенно улучшена точность вычисления проекций и корректность алгоритмов удаления невидимых линий. Так же был разработан режим центрального (перспективного) проецирования – опция ранее недоступная в RGK. Несмотря на то, что на практике эта функциональность востребована гораздо меньше, чем параллельное проецирование, для некоторых случаев она может быть полезна, поэтому было принято решение о ее добавлении в ядро.

Пример тел, объём которых сейчас насчитывается точно

Иллюстрация отличия построения очерковых линий на модели при центральном проецировании

Иллюстрация работы алгоритма проецирования с удалёнными невидимыми линиями (снизу вид параллельного проецирования, сверху вид центрального проецирования – видно перспективное искажение проекции)

Иллюстрация работы алгоритма проецирования с удалёнными невидимыми линиями (снизу вид параллельного проецирования, сверху вид центрального проецирования – видно перспективное искажение проекции)

Улучшение в работе алгоритмов триангуляции

Не осталось без внимания и развитие такой важной функциональности, как построение полигональной модели – триангуляция B-rep. Завершена работа по унификации базовых алгоритмов разбиений и оптимизации структур данных. Это позволило примерно вдвое сократить требования по оперативной памяти в процессе триангуляции, обработать сложные случаи самопересечений циклов на гранях, уменьшить размеры получаемых сеток с сохранением точности, поднять общую производительность алгоритмов. Вот несколько примеров иллюстрирующих текущий прогресс:

Примеры работы триангулятора RGK текущей версии в сравнении с предыдущей и известным промышленным ядром

Примеры работы триангулятора RGK текущей версии в сравнении с предыдущей и известным промышленным ядром

Примеры работы триангулятора RGK текущей версии в сравнении с предыдущей и известным промышленным ядром

Примеры работы триангулятора RGK текущей версии в сравнении с предыдущей и известным промышленным ядром

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

Пример работы новой функциональности по игнорированию мелких элементов

Пример работы новой функциональности по игнорированию мелких элементов

Следует отметить, что в новой версии триангулятор поддерживает корректную работу с обобщённой топологией, о которой шла речь ранее в этой статье.

Пример работы триангулятора на non-manifold теле, полученном объединением трёх тел

Пример работы триангулятора на non-manifold теле, полученном объединением трёх тел

Заключение

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


Поделиться ссылкой:

© 2025 АО «Топ Системы»