Рекламодатель: АО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557

Рекламодатель:
ООО «С3Д Лабс»

ИНН 7715938849 ОГРН 1127747049209

4 - 2024

C3D Solver: принципы параметрического черчения 2D-паттернов и улучшения для 3D-моделирования сборок

Александр Алахвердянц, 
ведущий математик-программист, компания C3D Labs
Александр Алахвердянц,
ведущий математик-программист, компания C3D Labs

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

Что такое решатели? Решатели — это библиотеки, которые позволяют налагать связи на геометрические объекты. Эти связи мы называем ограничениями. Они бывают двух видов: логические (касания, симметрии, совпадения) и размерные (угловой и линейный размеры, паттерны). Кроме того, мы предоставляем функционал анализа степеней свободы, минималистичного драггинга и логирования вызовов API. Логирование вызовов API существенно помогает при составлении баг­репортов.

Первая и главная новинка группы C3D Solver в этом году — это появление нового типа объектов, а именно двумерных паттернов (рис. 1).

Рис. 1

Рис. 1

Под двумерными паттернами мы понимаем множество объектов, которые рождены как копии от некоторого образца и расположены на плоскости относительно этого образца в соответствии с заданным законом. Этот закон может быть как простым, например в случае с линейным сдвигом, так и очень сложным.

Для начала мы проанализировали широкий набор запросов от наших пользователей (рис. 2). В чем была проблема?

Рис. 2

Рис. 2

Так как ранее мы не предоставляли такой функционал, то разработчикам САПР и непосредственно инженерам приходилось самостоятельно создавать копии большого числа одинаковых объектов при моделировании эскизов, самостоятельно налагать на них ограничения, поддерживать связи. Это было крайне сложно. Более того, когда объектов становилось слишком много, выполнять эти задачи было практически невозможно.

Поэтому мы реализовали в нашей библиотеке паттерны (рис. 3).

Рис. 3

Рис. 3

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

Рис. 4

Рис. 4

Рассмотрим, что важно для инженеров. Как уже было обозначено, в паттернах есть некоторая неявная односторонняя связь между образцом и копиями. Когда инженер моделирует что­то в эскизе, ему не требуется информация об этой связи. Ему необходимо, чтобы все объекты были равноправными, а на копии можно было бы налагать точно такие же ограничения, как на образец. Мы достигли этой цели. Помимо этого, когда инженер моделирует паттерны, ему необходима возможность в произвольном порядке добавлять копии, удалять их, редактировать. Эту возможность мы тоже реализовали (рис. 5).

Рис. 5

Рис. 5

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

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

Соответственно, в решателе мы добавили два новых паттерна. Первый паттерн — это паттерн вращения (рис. 6).

Рис. 6

Рис. 6

Создается он просто. Задается центр вращения, образец и какой­то угловой шаг. Пропорционально этому шагу будут располагаться копии относительно образца. То есть угол, на который копия отклоняется от образца, должен быть кратным шагу.

Аналогичным образом мы создали второй вид паттернов — линейные паттерны (рис. 7).

Рис. 7

Рис. 7

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

На рис. 8 приведен пример такого составного паттерна — паттерн «карусель», где есть и вращения, и сдвиг вдоль прямой.

Рис. 8

Рис. 8

В API мы предусмотрели два способа работы с паттернами. Первый способ представлен на рис. 9 на примере создания линейного паттерна. Здесь создается отрезок, потом определяется линейный паттерн с помощью функции GCE_AddLinearPattern и после этого рождаются новые геометрические объекты­копии по заданному образцу, уже принадлежащие линейному паттерну.

Рис. 9

Рис. 9

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

Рис. 10

Рис. 10

Следующей новинкой двумерного решателя является управление длиной сплайна (рис. 11).

Рис. 11

Рис. 11

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

Кроме того, мы значительно улучшили производительность сплайнов (рис. 12).

Рис. 12

Рис. 12

К нам поступила серия запросов от заказчиков, в которых описывалась похожая ситуация: если в эскизе присутствует множество сплайнов с большим количеством контрольных точек — от 100 и больше, и эти сплайны связаны небольшим количеством ограничений, то в результате получается малосвязный граф, при работе с которым проседает производительность. Отвечая на требования пользователей, мы почти на два порядка повысили производительность в таких сценариях.

Стоит добавить, что для сплайнов был добавлен новый случай касаний — касание с эллипсом.

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

Рис. 13

Рис. 13

Мы много работаем над анализом степеней свободы. Любому ограничению в решателе присваивается один из четырех статусов, приведенных в таблице на рис. 14.

Рис. 14

Рис. 14

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

Рис. 15

Рис. 15

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

Небольшие доработки коснулись размерных ограничений (рис. 16).

Рис. 16

Рис. 16

Была решена проблема для линейного размера между двумя окружностями, когда они переходили от положительного к отрицательному значению или наоборот. Помимо этого, устранена проблема с вырожденностью биссектрисы, например, если угол ее раствора равен 180°. Появились две новые функции: ReleaseGeom и ReleaseVariable. Они позволяют разработчику САПР указать решателю, что геометрический объект или переменная ему больше не нужны и далее можно не заботиться о порядке их удаления и времени их жизни.

Далее рассмотрим новинки трехмерного решателя, реализация которых потребовала большого труда.

Первая новинка связана с угловыми размерами. Ранее если пользователь создавал в трехмерном решателе угловой размер, не указывая ось вращения, то область значений такого размера находилась в диапазоне от 0° до 180°. Это корректно математически, но неудобно для инженеров, так как углы, допустим, в 160° или 200°, или 90° и 270° были неотличимы. Мы почти полностью переписали формулировки трехмерных углов, и теперь все трехмерные углы меняются в диапазоне от 0° до 360°. После этого мы добавили новый вид угловых размеров — «интервальные размеры». Так что теперь трехмерный решатель поддерживает не только управляющие угловые размеры, но и интервальные (рис. 17). Таким образом, все размеры в решателе — как линейные, так и угловые — могут быть интервальными.

Рис. 17

Рис. 17

Вторая проблема, с которой мы справились, касалась конструирования сборок трехмерных тел. В ходе этого процесса бывает очень важно знать, что геометрический объект фиксирован, то есть полностью определен. В прошлом функция IsWellDefined достаточно часто давала неправильный результат. Мы провели работу в этом направлении, и теперь практически в 100% случаев функция дает корректные результаты о фиксированности элемента сборки (рис. 18).

Рис. 18

Рис. 18

Решатель — это сложный продукт, и часто нас спрашивают о том, как внедрить его в свое приложение. Для того чтобы упростить нашим заказчикам работу, мы подготовили пример внедрения трехмерного решателя в приложение с помощью библиотек C3D Vision и Qt. Этот пример доступен теперь в библиотеке примеров C3D Vision. Код примера открытый и может быть использован вами на свое усмотрение.

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

О наших ближайших планах вы можете узнать из нашей дорожной карты, которая доступна на официальном сайте C3D (www.c3dlabs.com), где вы всегда можете ознакомиться с актуальной информацией о наших флагманских продуктах и ходе работ.

Регистрация | Войти

Мы в телеграм:

Рекламодатель:
ООО «Нанософт разработка»

ИНН 7751031421 ОГРН 5167746333838

Рекламодатель: АО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557