isicad.ru :: портал САПР, PLM и ERP :: версия для печати

Статьи

30 июня 2025

Геометрическое ядро RGK: открыто о сложностях и достижениях. Часть 3

Леонид Баранов, директор по развитию технологий 3D моделирования, АО «Топ Системы»

Леонид Баранов,

Функциональность для формирования и редактирования модели (продолжение)

Алгоритм построения поверхности приближения


Отдельного рассмотрения заслуживает развитие математики поверхностей для решения различных сложных задач «заполнения области». Об этом классе алгоритмов, которые развиваются в 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 функционально готово для внедрения в системы инженерного проектирования и моделирования тяжёлого класса. Конечно, как все понимают, предстоит большой объем работы по оптимизации алгоритмов, развитию различных опций и режимов, оттачиванию поведения математики в различных сложных случаях. Однако это уже больше экстенсивная, хотя важная и трудоёмкая работа. Предыдущий год разработки показал, что идеология и архитектура ядра полностью удовлетворяют задачам промышленных систем проектирования и служат надёжным фундаментом разработки первого в нашей стране промышленного ядра тяжёлого класса.


Реклама. АО «Топ Системы» ИНН 7726601967. erid: 2SDnjcHZ4b7

Все права защищены. © 2004-2025 Группа компаний «ЛЕДАС»

Перепечатка материалов сайта допускается с согласия редакции, ссылка на isicad.ru обязательна.
Вы можете обратиться к нам по адресу info@isicad.ru.