10 - 2018

Что нового в геометрическом ядре и других компонентах C3D Toolkit 2018

Сергей Бирюков, 
математик-программист C3D Labs (Группа компаний АСКОН)
Сергей Бирюков,
математик-программист C3D Labs (Группа компаний АСКОН)

На конференции C3Days 2018, прошедшей в мае этого года в Технопарке «Сколково», компания C3D Labs анонсировала выход обновленного комплекта инструментов для разработки инженерного программного обеспечения C3D Toolkit 2018. Геометрическое ядро, параметрический решатель, конвертеры, модуль 3D­визуализации — все компоненты C3D Toolkit пополнились новыми возможностями, прибавили в производительности и увеличили свою надежность.

За каждым улучшением, каждой новой функцией, как правило, стоит запрос конкретного заказчика, использующего наш инструментарий в разработке САПР. Именно пользователи — от крупных научных центров до стартапов двигают вперед C3D Toolkit, ставя перед разработчиками актуальные задачи и откликаясь на результаты проделанной работы. Из многообразия требований заказчиков (а их уже больше 30) и появилась большая часть новинок, о которых пойдет речь в обзоре.

Новинки C3D Modeler 2018

На этот раз большинство новинок и улучшений геометричес­кого ядра C3D было связано с практическими задачами и запросами от пользователей.

По запросу компании ЭРЕМЕКС, разрабатывающей САПР электроники Delta Design, ускорены операции с регионами — связными областями двумерного пространства, ограниченными одним внешним и, возможно, одним или несколькими внутренними составными кривыми (контурами). Булевы операции над такими объектами являются весьма распространенными, если вы работаете с большим количеством компонентов при создании плат. С увеличением количества вершин регионов растет и трудоемкость операции над каждой парой. А если таких пар в созданной модели огромное количество, то потребуются модификации алгоритма для того, чтобы пользователь мог работать с программой в комфортных условиях. Что и было реализовано в рамках данной работы (рис. 1).

Рис 1. Печатная плата в Delta Design

Рис 1. Печатная плата в Delta Design

Наш самый первый заказчик и материнская компания — АСКОН — обратила внимание на потребность в покомпонентном проецировании в системе КОМПАС­3D. Речь шла о случае, когда создавалась сборка с набором компонентов и построенными по ним проекциями. В результате редактирования (изменения или перемещения) одного из компонентов все проекции необходимо было пересчитывать заново. Задача ядра в данной ситуации состояла в том, чтобы спроецировать заново только указанные измененные компоненты и те компоненты, которые могли быть затронуты при проецировании. Это существенно ускорило построение проекций сборки при различных модификациях ее частей. Кроме того, очевидно, что чем меньшее количество компонентов сборки оказалось затронутым данными изменениями, тем больше и заметнее эффект в скорости построения проекций (рис. 2).

Рис. 2. Покомпонентное проецирование

Рис. 2. Покомпонентное проецирование

Разработчикам семейства BIM­программ Renga из компании Renga Software потребовалось от ядра затенение кривых телами и скрытие части ребер при построении проекций (рис. 3).

Рис. 3. Затенение кривых телами при проецировании

Рис. 3. Затенение кривых телами при проецировании

Работы по ускорению затронули и другие операции ядра. Выделим некоторые из них:

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

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

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

Рис. 4. Частные случаи скругления

Рис. 4. Частные случаи скругления

Впервые в C3D Modeler 2018 реализовано скругление трех граней. Эта функция позволяет создать такое скругление, чтобы указанная грань была заменена поверхностью скругления, фактически соединяющей соседние грани. Выполнить это на практике, не имея дополнительных возможностей, затруднительно, учитывая тот факт, что придется подбирать точные значения скруглений цепочек ребер, чтобы в результате не получить плоских остаточных фрагментов или неровных изгибов на данном участке модели. Как раз для таких случаев удобно иметь под рукой операцию Скругление трех граней. В результате ее выполнения создается поверхность, которая гладко стыкуется с гранями, соседними с исходной (рис. 5а).

Рис. 5. Скругление трех граней a

Рис. 5. Скругление трех граней b

Рис. 5. Скругление трех граней

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

Важным улучшением стала доработка булевых операций с открытыми оболочками. Она была выполнена для корректной работы ядра C3D с объектами, созданными в других геометрических ядрах (рис. 6).

Рис. 6. Булевы операции с открытыми оболочками

Рис. 6. Булевы операции с открытыми оболочками

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

В новой версии C3D Modeler реализована такая операция, как трансформация сечения при движении вдоль направляющей (рис. 7).

Рис. 7. Трансформация сечения при движении вдоль направляющей

Рис. 7. Трансформация сечения при движении вдоль направляющей

Совершенствуется уникальный для геометрических ядер функционал гибки. Появилась гибка нелистовых тел, разработанная по запросам разработчиков мебельных САПР, но она будет полезна и в других областях. Чтобы согнуть любое, даже нелистовое, тело, достаточно задать режущую плоскость, количество и толщину кусков, на которые будет разбито тело, а также для каждого куска задать расположение оси сгиба и его радиус нейтрального слоя. Согласно заданным параметрам, из кусков тела будут сформированы цилиндрические сгибы, у которых слой, отстоящий на расстояние нейтрального радиуса от оси, не будет испытывать сжатия или растяжения (рис. 8).

Рис. 8. Сгиб нелистового тела

Рис. 8. Сгиб нелистового тела

Кроме того, в C3D Modeler 2018 добавлена возможность создания ребер усиления на цилиндрических сгибах с возможностью их последующего разгиба. В случае разгиба усиленных таким образом сгибов ребра усиления удаляются, и на разогнутой детали остаются только следы от них в виде двумерных контуров. При последующем сгибе ребра усиления снова восстанавливаются (рис. 9).

Рис. 9. Ребро усиления и развертка листового тела 
с контурами ребер усиления

Рис. 9. Ребро усиления и развертка листового тела
с контурами ребер усиления

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

Рис. 10. Упрощение развертки

Рис. 10. Упрощение развертки

Новинки C3D Solver 2018

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

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

Рис. 11. Жесткие множества двумерных объектов

Рис. 11. Жесткие множества двумерных объектов

Еще одной новинкой является гладкая стыковка по G2 любых кривых. Если в C3D Modeler стыкуются поверхности по G2 (без ограничений), то в C3D Solver — это ограничения. Что такое ограничение? Допустим, есть два разных объекта и пользователь налагает на них какое­либо ограничение, например два отрезка должны быть перпендикулярны. Что бы дальше с этими отрезками ни происходило, это отношение должно сохраняться. Один отрезок переместили в сторону — второй должен за ним «побежать», если наложено условие совпадения или перпендикулярности. И сейчас у нас появилась возможность стыковать кривые по G2, то есть очень гладко (рис. 12).

Рис. 12. Стыковка двумерных кривых по G2

Рис. 12. Стыковка двумерных кривых по G2

В новой версии C3D Solver более дружественным для пользователя стал драггинг, или перемещение объектов. В чем же проявляется его дружественность? Допустим, есть сложный эскиз, и его часть (отрезок) надо переместить. Чтобы поведение было предсказуемым, мы стараемся как можно больше частей этого эскиза зафиксировать для минимизации изменений. Одна из работ заключалась в том, чтобы улучшить это поведение. Теперь намного больше объектов можно «замораживать», драггинг стал более ожидаемым для пользователя (рис. 13).

Рис. 13. Оптимизированный драггинг

Рис. 13. Оптимизированный драггинг

Мы провели большую работу над улучшением производительности. В результате двумерный решатель ускорился в среднем на 30­40%, а в некоторых случаях — в несколько раз. Например, ситуация, в которой при наложении ограничений на один объект налагаются ограничения большого количества объектов. Ярким примером может послужить симметрия большого количества разных объектов относительно прямой. Такие случаи ускорились в 50­70 раз. В модели, которая послужила первопричиной работ, расчет наложения симметрии выполнялся за 40 секунд. В результате операция стала рассчитываться не дольше, чем за 300 миллисекунд (рис. 14).

Рис. 14. Симметрия большого числа объектов относительно линейного объекта

Рис. 14. Симметрия большого числа объектов относительно линейного объекта

Значительное ускорение было получено при работе с интерполяционными сплайнами. Интерполяционный сплайн — это сплайн, проходящий через набор заданных точек. В данном случае было достигнуто пятикратное улучшение производительности. При этом, чем больше сплайн (количество задающих его точек), тем значительнее ускорение. Для сплайна, проходящего через 100­200 точек, было зафиксировано десятикратное ускорение.

Новинки C3D Converter 2018

После реализации формата JT версии 9.5, которая описывается стандартом ISO, в предыду­щей версии C3D Converter работа по данному формату получила развитие.

В новом C3D Converter 2018 диапазон версий формата JT был расширен, причем как в большую сторону до версии 10.2, так и в меньшую — до версии 8. И если версия 9.5 — это стандарт ISO, то остальные версии относятся к ветке развития Siemens, основоположника этого формата. Хотя формат и стандартизирован, Siemens продолжает в своих продуктах развивать другие версии формата и вводить свои особенности. В 10­й версии наиболее значимые изменения связаны со сжатием данных. Если по стандарту ISO для данной задачи использовалась кроссплатформенная библиотека zlib, которая хорошо описана и достаточно проста для внедрения, то в 10­й версии она была заменена алгоритмом сжатия данных LZMA. В отличие от zlib, исходные коды новой библиотеки являются платформозависимыми, что добавляет разработчикам трудностей при ее использовании.

Другой сложностью при работе над новой версией стало качество документации. Siemens не раскрывает детали своих фактически проприетарных продуктов. В тот момент, когда продукт на основе C3D начинает взаимодействовать с программой, базирующейся на другом ядре, возможен вариант, при котором эта программа указывает в настройках по умолчанию JT версии 10.2. Такую ситуацию надо уметь корректно обрабатывать. И если при экспорте мы еще можем ссылаться на ISO как на рабочий стандарт, то при импорте мы работаем с теми данными, которые получены.

Работа по JT очень важна, так как у этого формата есть несомненные достоинства. Например, он позволяет передавать одни и те же данные синхронно, но в разных представлениях. Если модифицируется изделие или деталь, то нужно работать с той частью JT­файла, которая записана в граничном представлении. Если достаточно просмот­реть изделие — визуально оценить, то можно использовать плоскогранное (­полигональное) представление. Если нужны характеристики, например плотность или информация об авторах изделия, то необходима работа с метаданными. Такая работа с данными очень удобна, однако при любой модификации формы изделия потребуется синхронно изменить все уровни детализации. Из всего перечисленного видно, что данный формат — это весьма нетривиальная и гибкая система, но очень востребованная нашими заказчиками (рис. 15).

Рис. 15. Чтение моделей формата JT

Рис. 15. Чтение моделей формата JT

Еще одна новинка C3D Converter — возможность чтения модели из буфера памяти и записи в него, благодаря чему больше нет необходимости работать с файлами. Такой вариант гораздо быстрее. Кроме того, пользователи смогут проводить ревизию тех программных комплексов, в которых имеет место интенсивный обмен 3D­моделями. Чтение модели из буфера тоже является следствием работы по формату JT. Граничное представление внутри JT хранится в виде XT­потока. XT­конвертер у нас уже был, но он работал только с файлами. Возникло требование заставить его работать с потоком. Решения, которые были получены при работе над этой задачей, применены и ко всем другим форматам.

Разработчики, заинтересованные в использовании C3D Toolkit, могут взять на бесплатное тестирование любые его компоненты. Напишите нам или оставьте запрос на сайте c3dlabs.com.