Новая версия RGK - новая функциональность и улучшение базовых инструментов
Автор: Леонид Баранов, директор по развитию технологий моделирования
Приближается время выхода очередной версии геометрического ядра RGK от компании «Топ системы». С момента предыдущей публикации («Новая версия геометрического ядра RGK: открыто о сложностях и достижениях») прошёл почти ровно год, и имеет смысл рассказать о результатах, достигнутых за это время командой разработки RGK. С одной стороны, была проделана большая работа по развитию внутренних технологий ядра – работа с точностями в генераторах, распараллеливании внутренней логики, оптимизации алгоритмов как по скорости, так и по точности результата. С другой, наращивались возможности и устойчивость уже существующих функций ядра, разрабатывались различные, полезные на практике, инструменты. В частности, это относится к инструментам анализа геометрии, тесселяции, генерации проекций. И, наконец, разрабатывались принципиально новые технологические направления, значительно расширяющие возможности ядра при решении практических задач.
Приближается время выхода очередной версии геометрического ядра RGK от компании «Топ системы». С момента предыдущей публикации («Новая версия геометрического ядра RGK: открыто о сложностях и достижениях») прошёл почти ровно год, и имеет смысл рассказать о результатах, достигнутых за это время командой разработки RGK. С одной стороны, была проделана большая работа по развитию внутренних технологий ядра – работа с точностями в генераторах, распараллеливании внутренней логики, оптимизации алгоритмов как по скорости, так и по точности результата. С другой, наращивались возможности и устойчивость уже существующих функций ядра, разрабатывались различные, полезные на практике, инструменты. В частности, это относится к инструментам анализа геометрии, тесселяции, генерации проекций. И, наконец, разрабатывались принципиально новые технологические направления, значительно расширяющие возможности ядра при решении практических задач.
Развитие формообразующих операций и средств редактирования модели
В первую очередь, хотелось бы остановиться на дальнейшем развитии базовых операций создания модели. Практически во всех этих операциях-генераторов были сделаны важные улучшения.
В операции «по сечениям» была добавлена возможность использования «почти гладких» сечений. То есть сечений, сегменты которых состыкованы с управляемым допуском по углу. Такая возможность требуется при практической работе, чтобы упростить конечному пользователю или приложению создавать геометрию по не совсем аккуратным данным, но с управляемой погрешностью.
Рисунок иллюстрирует ситуацию задания в качестве исходных данных негладкой проволоки, но результат операции в форме одной сплайн поверхности с формированием толерантных рёбер на границе грани
На практике нередко встречается необходимость построить поверхность «по сечениям» с направляющими за пределами крайних сечений. В новой версии ядра реализована такая возможность как для случая одной направляющей, так и для набора направляющих.
Пример построения поверхности «по сечениям» с продлением за пределы крайнего сечения
Пример построения поверхности «по сечениям» с продлением за пределы крайнего сечения для нескольких направляющих
Кроме того, в алгоритм генератора добавлена возможность автоматической синхронизации сечений как с одинаковым числом «углов», так и с разным. Вот пара примеров на эту функциональность:
Пример работы режима автоматической синхронизации сечений с изломами
Значительное внимание в улучшении алгоритмов ядра уделялось вопросам качества и оптимизации поверхностей. Эта работа ведётся в самых разных инструментах ядра в том числе и в генераторе «по сечениям». Вот несколько примеров изменений в генерации поверхностей в этой операции в новой версии по сравнению с прошлым годом.
Пример, иллюстрирующий оптимизацию формы поверхности в новой версии генератора «по сечениям»
Пример, иллюстрирующий улучшение в алгоритме «по сечениям» пи обработке граничных условий G2
Диаграмма изменения числа контрольных точек поверхностей, полученных операцией «по сечениям»
Была добавлена опция «впечатывания» промежуточных сечений и направляющих в топологию результирующего тела.
Иллюстрация работы опции впечатывания рёбер промежуточных сечений и направляющих в результирующее тело
В операции «по траектории» большое внимание было уделено поддержке граничных условий по гладкости в случае многопрофильного задания – когда задаётся несколько образующих и направляющих. Как известно, при внешней схожести такого способа задания с операций «по сечениям», форма создаваемой поверхности будет другой из-за природы алгоритма её получения – как бы движения некой кривой по траектории с деформированием кривой по законам, заданным явно (функциями кручения-масштабирования) или неявно – несколькими траекториями и/или промежуточными кривыми-сечениями. При разработке RGK принято детально рассматривать задачу, в том числе и регламентировать поведение алгоритмов в пограничных и вырожденных конфигурациях, проводить сравнение с лидирующими на мировом рынке инструментами моделирования. Такой подход, конечно, сильно повышает трудоёмкость и требования к качеству математики ядра, но и позволяет обеспечить приложениям требуемый уровень функциональности и стабильности. Приведём примеры работы новой функциональности в операции «по траектории».
Пример построения поверхности методом протягивания границы грани по траектории с переходом в заданную кривую с сохранением гладкости с исходной гранью
Пример работы функциональности в случае задания условия гладкости на некоторых (но не всех) исходных гранях
Пример создания листового тела операцией «по траектории» с сохранением гладкости даже в случае негладкой границы на исходных сечениях
Пример поведения алгоритма в ситуации геометрической неопределённости (выбрано одно из возможных решений)
Пример, иллюстрирующий поведение алгоритма в ситуации, когда нормаль ГУ «переворачивается» в разных точках образующей
Пример, показывающий влияние задания множителя ГУ на форму результирующей поверхности
Иллюстрация использования множителя ГУ для выбора решения в случае геометрической неоднозначности задачи
Пример построения замкнутого листового тела с выполнением условия касания в начале-конце траектории и с заданием «перекручивания» при помощи задания точек соответствия
Пример создания листового тела операцией «по траектории» с соблюдением касания к исходным граням и сведением нескольких граней в одну точку
Приведённые иллюстрации, на наш взгляд, лаконично, но довольно наглядно демонстрируют прогресс в генерации сложных форм операцией «по траектории». Как легко видеть в этих примерах, ядру удаётся построить поверхности предсказуемой формы с соблюдением всех условий по геометрической гладкости даже в ситуациях неоднозначных и практически вырожденных. За таким поведением стоит не только довольно сложная алгоритмическая составляющая, но и много разных любопытных математических задач. По традиции наших статей вкратце расскажем об одном вопросе, который пришлось решить в базовых инструментах ядра, чтобы обеспечить построение и использование в ядре некоторых из приведённых выше форм. Важным требованием к поверхностям при моделировании является требование определённости нормали к поверхности в любой точке. В ряде случаев это требование формально не выполняется. Ниже приведён пример поверхности для которой правило получения нормали как векторного произведения векторов частных производных не выполняется.
Пример неопределённой нормали в углах поверхности
Как легко видеть на этом примере, «интуитивная» нормаль при этом существует в любой точке этой поверхности. Задача состоит в придумывании математической схемы, которая позволила бы вычислять нормаль к таким и подобным поверхностям устойчивым и однозначным образом.
Иллюстрация регуляризации задачи вычисления нормали к поверхности
Иллюстрация решения задачи
Иллюстрация поведения алгоритма вычисления нормали к поверхности в зонах сингулярности
Приведённая схема решения одной из многочисленных задач при разработке ядра показывает, что часто приходится довольно тонко анализировать задачи и подходы к их решениям для получения качественного ответа. Любопытно, что описанный подход в ядре используется не только «напрямую» для работы с поверхностями в «конечных» моделях, но и при генерации поверхностей, и вообще работе с функциями двух переменных в тех же алгоритмах генерации «по сечениям» и «по траектории».
В булевых операциях была сделана очередная «незаметная» доработка. А именно в одновременной булевой надо набором тела была добавлена возможность получения обобщённой топологии в процессе построения.
Иллюстрация булевого объединения нескольких тел по новой схеме
Был разработан новый генератор из класса локальных операций – «Рельеф/тиснение». Он позволяет формировать надписи и рисунки на твёрдых и листовых телах путём задания профилей и ограничений. Вот общий список возможностей этого генератора:
- Операция построения рельефа или тиснения по заданному профилю
- Пользователь передаёт целевое тело, профиль и, при необходимости, ограничивающий контур
- Поддерживаются листовые и твёрдые тела
- Доступно выполнение локально на определённых гранях тела
- Можно выбрать способ построения: по направлению, с уклонами граней или по нормалям поверхности
- Возможно создание как операции как «наружу» тела – рельеф, так и внутрь – «тиснение»
Пример работы выполнения рельефа на твёрдом теле с передачей профиля и ограничивающих граней в случае твёрдого тела
Пример работы выполнения рельефа на твёрдом теле с передачей профиля и ограничивающих граней в случае листового тела
Продолжали совершенствоваться представленные в прошлой версии новые генераторы. В частности, генератор построения серединного тела. В первую очередь был улучшен алгоритм расширения серединных тел и затягивания отверстий, что значительно повысило его стабильность в работе на практических примерах. В частности, в новой версии RGK, операция подрезки серединных тел может проанализировать входные серединные тела и их родительское твёрдое тело, и, если потребуется, расширить серединные тела и затянуть в них отверстия. Как известно, создание серединных тел и последующая подрезка может привести к появлению моделей, в которых грани перекрывают друг друга. Зачастую это происходит при работе с твёрдыми телами с неоднородной толщиной. При объединении листовых тел это может привести к образованию обобщённой (non-manifold) топологии. Для исправления ситуации в новой версии RGK в операцию подрезки серединных тел добавлен режим поиска и/или удаления перекрывающихся наборов граней.
Иллюстрация работы нового режима поиска перекрытий и подрезки серединных листовых тел в перекрывающихся конфигурациях
В RGK активно развивается режим построения истинно серединных листовых тел, о котором мы писали в прошлой публикации, как о важном режиме построения. Ранее режим был реализован для одиночных родительских граней. Теперь реализуется режим для множеств родительских граней. Серединное листовое тело в RGK состоит из листов, каждый из которых представляет истинно серединную поверхность, построенную между некоторой парой родительских граней.
Пример работы алгоритма построения истинно серединных тел в новой версии RGK (случай гладко сопряжённых граней)
Пример работы алгоритма построения истинно серединных тел в новой версии RGK (случай негладкого сопряжения граней)
Как видно из приведённых иллюстраций, технология генерации серединных тел получила значительное улучшение. Проводимые в ходе работ постоянные сравнения с ведущими иностранными ядрами показывают, во многих случаях получение более точного и топологически верного результата работы нового алгоритма.
Дальнейшему развитию подверглась функциональность расширения листовых тел. Добавлен режим расширения «до тела», а также возможность построения «заплатки» поверхности для исключения появления разрывов между расширяемыми гранями.
Иллюстрация нового режима расширения листового тела «до тела»
Кроме того, появилась опция «частичного расширения до тела». Она позволяет делать максимально возможное расширение листового тела до возникновения самопересечений.
Иллюстрация режима частичного расширения до тела
Понятно, что в общем случае, расширение листа – это довольно сложный процесс, и очень важно, чтобы ядро предоставляло возможности не получать «плохую» геометрию. Опция «частичного расширения» – как раз и есть пример такого поведения, не допускающего очевидную некорректность ответа. Вот ещё пример, как работает эта опция в иной конфигурации.
Иллюстрация поведения ядра при расширении листового тела для периодических поверхностей
Традиционно значительное внимание в разработке уделялось совершенствованию алгоритмов построения сглаживаний рёбер и поверхностей. Может показаться, что в новой версии изменения не столь значительны, как в прошлых релизах. С точки зрения изменений в API ядра, это действительно так, но прогресс в части совершенствования внутренних алгоритмов, повышения скорости и робастности всё же был значительным. Вот, к примеру, иллюстрация такого «незаметного» прогресса.
Примеры улучшения в сглаживании несколькими радиусами за одну операцию
Пример расширения возможностей генератора сглаживаний RGK
Пример обработки перекрытия поверхностей сглаживания большого радиуса в новой версии ядра
Улучшено определение типа необходимой заплатки при схождении трёх родительских рёбер скругления на промышленной детали авиационного назначения. Результат иностранного САПР на нижнем правом рисунке
Комментируя примеры на рисунках, хочется сказать, как в одной старой рекламе: «мы работает ради этих миллиметров!». В контексте обсуждения обработки перекрытий листов сглаживания в процессе операции следует указать, что в новой версии добавлена возможность построения перекрытий в случае наличия набора последовательностей переменной выпуклости за одну операцию.
Наглядная иллюстрация работы ядра со сглаживанием перекрывающихся последовательностей разной выпуклости за одну операцию
Пример, показывающий улучшение в «обрезке» сглаживания в сложном случае сплайновых граней
Пример построения сглаживания с обработкой зон высокой кривизны
Пример построения завершения листа сглаживания на сплайновых гранях в толерантных в случаях
Пример работы алгоритма сглаживания в случае, где требуется расширение обрезающих граней
Последний пример показывает кажущимся небольшим улучшение алгоритма. Но тут стоит учесть, что «пирамидка» в нем – это построенная сплайнами топология, и сложность состоит как в расширении такой геометрии до требуемого для обрезки расстояния, не говоря уже о том, что алгоритм определяет какие грани нужно расширять, и в какой комбинации, для получения требуемого ответа. Таких, казалось бы, малозаметных улучшений, в новой версии довольно много. Их «незаметность» с точки зрения внешнего интерфейса отражает переход стадии разработки ядра от наращивания функциональности к оттачиванию алгоритмов на «промышленных» примерах.
Применение нового алгоритма на «промышленном» примере
Как этот процесс организуется в рамках разработки, поговорим чуть позже. Сейчас же стоит отметить, что только совершенствованием внутренней «начинки» алгоритма сглаживания доработки не ограничились. Были добавлены и принципиально новые возможности. В частности, появилась возможность строить гладкую поверхность скругления с сохранением как одной, так и двух границ в одной операции.
Пример, иллюстрирующий поведение алгоритма сглаживания новой версии при переходе в режиме сохранения рёбер на постоянном радиусе
Иллюстрация сохранения гладкости поверхности между участками различной обработки в случае, представленном выше
Важно, что такое поведение демонстрирует алгоритм не только постоянного, но и переменного радиуса.
Пример работы алгоритма сглаживания переменного радиуса с сохранением рёбер на переменном радиусе с сохранением G1 стыковки поверхностей сглаживания
Иллюстрация новой опции сглаживания в режиме переменного радиуса
Кроме того, добавлена возможность комбинировать различные режимы построения поверхностей сглаживания для разных участков последовательности сглаживания. Эта возможность ещё больше повышает гибкость и мощность алгоритма сглаживания, как в рёберной, так и граневой постановке задачи.
Пример работы алгоритма сглаживания в новой версии RGK с явным и неявным заданием ограничивающих рёбер в рамках одной последовательности
Была значительно доработана функциональность придания толщины листовому телу. В частности:
- Добавлена возможность задавать направление придания толщины
- При задании различных толщин для различных гладко сопряжённых граней появилась возможность задать режим стыковки результирующих граней (ступенька или продление до пересечения соседей)
- Добавлена возможность задавать «выколотые» грани на исходном теле. По аналогии с подобным поведением в операции «Оболочка»
- Улучшена обработка стыковки между негладкими поверхностями смещения
Приведём иллюстрации новой функциональности.
Иллюстрация построения тела смещения в заданном направлении внутрь и наружу от исходного листового тела
Иллюстрация обработки построения тела смещения с формированием ступеньки в месте разрыва смещаемых граней
Иллюстрация обработки построения тела смещения с расширением результирующих граней в месте разрыва смещаемых граней
Пример построение тела смещения с исключением выделенной грани исходного тела из обработки
Иллюстрация построения тела смещения при изломе ламинарной границы
Расширена функциональность различных инструментов ядра. В операцию «Сшивка» добавлена возможность задания «шаблона» при сшивке. То есть, указания наборов рёбер, которые нужно сшить. Эта функциональность полезна во многих приложениях как при разработке различных трансляторов, так и при формировании модели по специальной прикладной логике. Она позволяет, с одной стороны, ускорить процесс при наличии большого числа топологий, но, что более важно, избегать некорректного срабатывания операции при наличии мелких рёбер и грубых точностей на модели.
Иллюстрация результата работы сшивки «по шаблону» (справа) от «глобальной» сшивки (слева)
Кроме того, в операцию «Сшивка» добавлена возможность формировать обобщённые тела в качестве корректного ответа в соответствующем режиме генератора.
Иллюстрация получения обобщённого тела в результате сшивки двух листовых тел
Продолжено развитие функциональности замены граней. Теперь можно заменить сразу несколько граней тела на многогранные листы.
Пример работы нового режима в операции замены граней (разными цветами показаны соответствия грань-тело для замены в рамках одной операции)
Как можно заметить из рисунка, одна грань исходного тела может быть заменена на листовое тело, в котором содержится несколько граней. Ещё более наглядно эта возможность представлена на картинке ниже.
Пример замены одной грани тела на совокупность граней
Следует добавить, что при замене граней могут возникать неоднозначности, как на рисунке ниже.
Пример выбора варианта решения при неоднозначности
Вариант решения определяется указанием ориентации целевого листового тела, что добавляет гибкости операции при решении реальных задач.
Были выполнены доработки функциональности вычисления тени на теле. В ней добавлена дополнительная опция разделения входных тел на группы Cast - отбрасывающие тень тела, Gather - собирающие тень тела. Опция ускоряет работу на сложных телах, когда самозатенение отдельных тел не требуется, повышает стабильность генератора для касательных к направлению наблюдения граней.
Пример работы новых опций при формировании тени тел (красным цветом отмечено тело с заданием опции Cast, самозатенение этого тела отсутствует)
Опция Gather также устраняет самозатенение тела. Это позволяет точнее управлять областями, куда должна попадать тень от других тел на сложных телах.
Пример работы новых опций при формировании тени тел (красным цветом отмечено тело с заданием опции Cast, второе тело задано с опцией Gather)
Были доработаны и расширены востребованные в приложениях функции анализа геометрии, которое присутствовали в прошлых версиях, но в новом релизе были значительно переработаны. Например, метод для анализа кривой на разрыв производной. Внешнее приложение передаёт желаемую степень непрерывности кривой, метод возвращает разрывы производных на интервале от нулевой до желаемой степени непрерывности включительно (от С0 до С3 включительно по умолчанию). Доступна также функциональность вычисления вырождения кривизны кривых.
Пример работы функции проверки аналитической гладкости кривой
Значительное внимание при разработке таких функций было уделено скорости вычислений и сравнению с конкурирующими ядрами мировых лидеров. Ниже приведено одно из таких сравнений.
Пример сравнения скорости работы алгоритмов проверки гладкости кривых в сравнении с известным иностранным ядром
Похожая функциональность доступна и для анализа поверхностей. Доступен как анализ на аналитическое вырождение, так и на самопересечение сплайн поверхностей и поверхностей смещения.
Иллюстрация поиска вырождения сплайн-поверхности
Примеры работы алгоритма поиска зон самопересечения
Оптимизация алгоритмов ядра
Помимо развития функциональности на всех уровнях, разработчики RGK традиционно большое внимание уделяют оптимизации алгоритмов геометрического ядра. Как уже неоднократно говорилось, задачей разработки является получения промышленного инструмента высокого качества на замену подобных библиотек ведущих мировых разработчиков. Поэтому вопрос оптимизации как по скорости, так и по памяти является крайне важным, и с течением времени занимает и будет занимать в будущем одно из центральных мест в процессе разработки. Приведём некоторые результаты, которые удалось получить в новой версии.
Иллюстрация прогресса в ускорении наиболее ресурсоёмких фаз булевых операций по сравнению с версией прошлого года
Достигнутые ускорения получены и за счёт оптимизаций вычислений «низкого» уровня. Как тех, что приведены на рисунке ниже, так и за счёт более аккуратной работы с точностями кривых и точек, получаемых алгоритмами для решения задач.
Иллюстрация достигнутого прогресса при вычислении параметров на сплайн поверхностях в сравнении с состоянием года назад, и актуальной версией известного иностранного ядра
Иллюстрация достигнутого прогресса при вычислении линий пересечения поверхностей
Иллюстрация уменьшения «тяжести» кривых пересечения за счёт оптимизации точности вычислений (экономится как память, так и время расчёта)
К рисунку выше стоит добавить комментарий. Речь идёт о построении модели с той же самой результирующей точностью, заданной в параметре генератора, но использованию более «лёгких» математических форм для кривых пересечения.
Кое-что существенно новое
Как уже упоминалось в начале статьи, в новой версии разработан ряд принципиально новых инструментов, расширяющих область применения геометрического ядра. В первую очередь нужно рассказать о появлении в RGK поддержки «гибридной» геометрии. Речь идёт о поддержке возможности использовать при моделировании в рамках общего формализма B-rep сеточных поверхностей и полилиний. Начиная с новой версии, в RGK можно создавать и работать с гранями, представленными треугольными сетками и рёбрами, представленными полилиниями. В отличии от подобных решений в других ядрах, в RGK разработана уникальная технология, позволяющая работать с такой геометрией ровно при помощи того же API, как и при «точном» моделировании. То есть с точки зрения внешнего приложения ничего принципиально не меняется – в теле те же рёбра и грани, но под ними лежит геометрия в полигональной форме. Самым важным моментом в этом представлении является тот факт, что в одном теле (твёрдом или листовом) может быть одновременно геометрия обоих типов – и точная и сеточная. И ядро теперь умеет оперировать с такими гибридными телами точно так же, как раньше работала с точными. Например, можно делать булевы операции над гибридными телами, строить проекции с удалёнными невидимыми линиями, рассчитывать масс-инерционные характеристики, проводить анализ пересечения и т.д. Понятно, что как частный случай, может быть создано полностью полигональное тело и, как и раньше, полностью «точное». Важно, что в гибридных телах работает вся та-же логика толерантных рёбер и вершин, что раньше была разработана для точных представлений. То есть, удалось добавить в ядро поддержку полигональных геометрий совершенно естественным и прозрачным образом – без изменения API генераторов и принуждения прикладного ПО специально обрабатывать случай полигональной геометрии каким-то особым образом. Понятно, что с точки зрения практической полезности, работа с сетками не ограничивается функциональностью общего назначения – требуется и дополнительная функциональность, учитывающая специфику этого типа геометрии. Опять же скажем сразу, что речь идёт о первой версии этой принципиально новой функциональности и часть полезных функции будет доступна в рамках ближайшего релиза, а часть в будущих обновления ядра. Но сейчас предлагается рассмотреть более подробно, как у нас принято, с иллюстрациями, что умеет делать RGK с гибридными телами в новой версии. В первую очередь, можно создать «сеточное» тело из внешней сетки. Сделать это можно разными способами. Например, есть возможность загрузить в ядро стеку в формате STL и позволить алгоритмам ядра декомпозировать её на грани и рёбра, то есть сформировать топологию тела. Ниже приведён пример работы такой функции на известном примере с формированием полностью корректного B-Rep представления твёрдого тела.
Иллюстрация функции RGK, которая конвертирует STL модель в сеточное тело, с которым можно выполнять различные операции
В данном случае стоит обратить внимание на правую часть рисунка, где сетка разрезана рёбрами – каждый такой участок – это отдельная грань результирующего тела, а каждое ребро, соответственно, ребро такой модели. Сетка разбивается на отдельные грани, близкие к плоским, в которых вместо традиционной поверхности лежит сеточная поверхность.
Вот ещё один пример работы алгоритма преобразования входной сетки STL в тело RGK.
Пример работы функции преобразования неструктурированной сетки в твёрдое тело
Приведённые примеры показывают самый простой способ получения тела с сеточной геометрией. Как уже отмечалось, он не единственный. В этом смысле сеточная геометрия не сильно отличается от точной: фактически в ядро только добавился дополнительный тип геометрии наряду с традиционными типами. То есть помимо плоскости, сферы, тора, цилиндра, конуса и NURBS, есть ещё и треугольная сетка. Например, можно удалить грань тела и вместо неё пришить сеточную грань или листовое тело, содержащее и сеточные и точные грани, полученные тем или иным способом.
Пример работы операции сшивки листового «точного» тела и листового тела с «сеточными» гранями с формированием твёрдого «гибридного» тела
Модели с сеточной геометрией можно создавать преобразованием из точного представления через фасетер. Можно также использовать стандартные низкоуровневые функции создания топологии тела с передачей сеточной геометрии в качестве одного из стандартных типов геометрии. Например, можно всю сетку модели кролика передать в функцию создания граней и получить твёрдое тело с одной замкнутой гранью, а потом разрезать эту грань на произвольный набор граней при помощи операций проецирования и встраивания рёбер. Важно, что это те же самые вызовы API, что используются для работы с любой другой геометрией. Стоит отметить, что если сетка не замкнута, то такие тела будут иметь топологию листового тела – точно так же, как в «точном» случае. После формирования такого тела ядро позволяет делать с ним булевы операции без ограничений. Причём операнды, как уже говорилось, могут быть сеточными, точными, или гибридными телами – алгоритм булевых операций один и тот же для всех типов. Такой универсальности удалось добиться во многом благодаря мощной парадигме толерантного моделирования, которая изначально заложена в архитектуре ядра. Действительно, линия пересечения точного цилиндра и сеточной грани, это просто ребро с меньшей точностью, чем это было бы если вместо сетки использовать точную поверхность.
Пример вычитания из сеточного тела набора точных тел-цилиндров
Пример на замену граней тот же что был выше, но в качестве заменяющей используется сеточная геометрия
Чуть более экзотический пример булевой операции с получением гибридного тела
Так как структурно модель тела не претерпела изменений при добавлении «гибридности», как и следовало ожидать, функциональность ядра общего назначения продолжает работать на таких телах без изменений, так сказать «из коробки». Вот пример, работы функции вычисления масс-инерционных характеристик на модели, представленной на последнем рисунке.
Пример расчёта характеристик твёрдого тела
Как можно предположить из вышесказанного, функциональность построения проекций с удалёнными невидимыми линиями работает, в том числе, и с гибридными телами.
Примеры работы функциональности проецирования с удалёнными невидимым рёбрами на телах с гибридной геометрией (красным цветом на исходной модели помечены аналитические поверхности)
Но есть и специфичные алгоритмы, разработанные для сеточных геометрий. Например, алгоритм затягивания дыры в полигональной грани – листовом теле.
Пример работы алгоритма затягивания дыры на полигональной сетке в новой версии RGK
Этот алгоритм в настоящее время умеет затягивать не только односвязные «дыры». Ниже приведён простой пример работы этого алгоритма на многосвязной области. В конфигурации с так называемыми «островами».
Пример работы функциональности затягивания островной области на сеточных гранях
Разработанная функциональность обладает значительной гибкостью и позволяет решать различные задачи достраивания сеточных геометрий на основе существующей в модели сеточной геометрии. Приведём ещё несколько примеров работы этих инструментов.
Иллюстрация возможностей управления формой затягивающей сетки для областей, ограниченных сеточной геометрией
Важной особенностью разработанного инструмента является то, что граница затягиваемой области может быть не замкнутой, как на примере ниже.
Пример работы алгоритма на области с не замкнутой границей
И даже просто разрывной в нескольких местах, как на рисунке ниже.
Пример работы алгоритма затягивания области с полигональной разрывной границей
Важным моментом, который стоит отметить является возможность фасетера ядра получать согласованную по границам сетку на гибридных телах. Это важная возможность, которая позволяет корректно использовать такие геометрии в различных приложениях, например, в модулях CAE или CAM.
Примеры работы фасетера на гибридных телах
Как уже говорилось ранее, разработка функциональности гибридного моделирования ещё не полностью завершена. Соответственно, доработки будут вестись в двух направлениях. Во-первых, в направлении обеспечения поддержки сеточной геометрии в различных операциях ядра. Например, построении оболочек, уклонов, замене граней и других операциях. Во-вторых, развитии алгоритмов, специфичных для сеток. Важно отметить, что B-rep модель, используемую в RGK, удалось естественным образом обобщить с целью обеспечения поддержки сеточной геометрии. И это является в определённом смысле уникальным достижением команды разработки и показателем гибкости и общности архитектуры ядра в плане классов решаемых задач.
В статье прошлого года мы писали про технологию построения аппроксимирующей поверхности как мощного инструмента RGK, разрабатываемого для решения различных задач поверхностного моделирования общего вида. За прошедший год эта работа продвинулась далеко вперёд, несмотря на, в значительной степени, поисково-исследовательский её характер. В связи с этим, в новой версии ядра, помимо использования этой математики в различных внутренних алгоритмах для приложений, использующих ядро, стала доступна функциональность построения «поверхности-заплатки» заполняющую область между гранями тела с соблюдением заданных условий геометрической гладкости (G0, G1, G2) на границах. А также функциональность замены набора «гладко» состыкованных граней (в смысле допуска по углу уклонения нормалей или кривизны) одной поверхностью с заданной точностью. Рассмотрим подробнее полученные результаты в этой области. В первую очередь, стоит отметить новый G2 решатель, который позволил повысить скорость и точность получаемых решений.
Пример работы нового решателя в типовой задаче генерации поверхности
Пример работы функции построения поверхности «заплатки» с различными условиями непрерывности на различных границах
Пример работы функции построения поверхности «заплатки» с различными условиями непрерывности на различных границах на разрывном контуре
В нижней части приведённого рисунка на диаграмме «зебра» заметно выполнение условий по G2 через верхние рёбра, а также нарушение условий G1 на боковых рёбрах – ровно так, как и было задано на генерацию.
Приведём результаты улучшений по скорости генерации поверхностей «заплаток» в новой версии в сравнении с прошлой и конкурирующим решением.
Иллюстрация изменения скорости генерации поверхности из прошлогодней статьи
Иллюстрация достигнутого ускорения в новой версии
Выше упоминалась функциональность построения поверхности, заменяющей набор гладко сопряжённых граней с заданной точностью с сохранением условий гладкости через границы граней. Теперь приведём пару примеров работы этой функции ядра.
Примеры работы функции построения заменяющей поверхности с одновременным встраиванием её в тело вместо заменяемых граней
И ещё на одном аспекте в разработке новой версии RGK стоит остановится отдельно. Вскользь об этом упоминалось в более ранних статьях, но возможно, стоит рассказать подробнее о технологии формирования тестов для ядра. Общая схема этой технологии не меняется несколько лет, но в новой версии она получила значительное расширение и развитие. Речь идёт о получении тестовых скриптов для RGK из процесса пересчёта моделей T-FLEX CAD. Схема довольно проста: в код параметрического пересчёта операций T-FLEX CAD по определённым условиям вписано обращение к функциям RGK – аналогам функций ядра Parasolid. Полученные таким образом тестовые скрипты по реальным данным от пользователей служат основой тестовой базы RGK. Важно отметить, что это не некие unit-тесты, а именно реальная геометрия из промышленности, созданная при помощи одного из лучших промышленных ядер в мире. Нередко на пределе возможностей этого ядра. То есть, когда мы говорим, о задаче при разработке RGK, соответствовать лучшим мировым технологиям это не пустые слова – мы в каждодневном режиме сравниваемся с этими технологиями на реальных тестах. Такой подход позволяет, в настоящее время начать работы по широкому внедрению ядра RGK в продукты компании «Топ Системы».
Вместо заключения
В ближайшее время новая версия геометрического ядра RGK станет доступной как для промышленного применения, так и для тестирования. Уточним, что за последнее время появились коммерческие продукты, которые используют RGK в качестве основного инструмента моделирования. В приведённой статье мы постарались продемонстрировать, что за прошедший год была проведена значительная и многоплановая работа. Были улучшены и оптимизированы как базовые алгоритмы ядра, так и различные инструменты высокого уровня. Но, с нашей точки зрения произошло ещё одно важное изменение в развитии этого инструмента – от парадигмы «догнать» мировых технологических конкурентов происходит плавный переход к парадигме «развить новые технологии». Появление гибридного твердотельного моделирования и значительный прогресс в алгоритмах создания сложных поверхностей показывают это качественное изменение. В рамках развития будущих версий есть ещё не один приятный для разработчиков приложений технологический «сюрприз». Конуры некоторых из них можно угадать уже сейчас. Конечно важно понимать, что работы ещё много, но и цели остаются максимально амбициозными. Темп разработки от версии к версии сохраняется на высоком уровне и это приносит свои плоды.



















