Многие из нас в школе или университете посещали уроки черчения, но не многим из нас это нравилось. Часами возиться с линейкой, циркулем и плохо заточенным карандашом, пытаясь ровно и без помарок выводить размерные линии, бесконечные штриховки и странные формы, мало кому могло показаться интересным. Тем более, что к тому времени уже существовали компьютерные программы, способные автоматизировать это скучное, бессмысленное и беспощадное занятие. А настоящий прорыв в области проектирования деталей и подготовки конструкторской документации произошел в 1989 вместе с дебютом параметрического моделирования в Системе Автоматизированного Проектирования (САПР) Pro/Engineer.
Это — вводная статья к циклу статей "Параметрическое моделирование". Из этого цикла вы узнаете о внутреннем устройстве настоящего решателя геометрических ограничений, проблемах и их решениях на примере open-source САПР "SolveSpace". Кому не чужд мир трехмерного моделирования, добро пожаловать под кат!
Модель ударно-спускового механизма РПГ-7, созданная в САПР SolveSpace
Идея
В основе параметрического моделирования лежит простая идея: выразить сложные геометрические формы изделий с помощью простых примитивов (entities), форма которых задается с помощью параметров (parameters) и отношений между ними. Параметрами могут быть координаты точек, величины углов, длин, радиусов окружностей или эллипсов. Отношения между параметрами называют ограничениями (constraints). Для инженера-конструктора такие ограничения выглядят как размеры или как геометрические отношения инцидентности (совпадения), параллельности, перпендикулярности или касательности простейших геометрических форм: точек, линий, окружностей, эллипсов и т. д. Совокупность примитивов, служащих основой для построения геометрического представления детали, называют эскизом (sketch). При таком подходе процесс построения эскиза сводится к формированию грубого наброска контура объектов и наложению таких ограничений, которые однозначно определяют значения параметров всех примитивов. Преимуществом такого подхода является то, что инженеру не требуется точно определять координаты всех объектов, достаточно указать лишь геометрические взаимоотношения между объектами, а всю работу по вычислению результирующих координат объектов выполнит решатель геометрических ограничений (geometric constraint solver) — основа параметрического подхода к моделированию. Именно наличие такого решателя отличает параметрические САПР от остальных.
SolveSpace
Подробности реализации системы параметрического моделирования будем рассматривать на основе open-source проекта SolveSpace, созданного Джонатаном Вэстью (Jonathan Westhues) и поддерживаемого в настоящее время сообществом open-source — разработчиков, в числе которых состоит и автор данной статьи, то есть я.
Среди всех проектов с открытым исходным кодом, SolveSpace обладает самой адекватной реализацией решателя геометрических ограничений. Решатель SolveSpace имеет си-подобный интерфейс и доступен для лицензирования и использования в коммерческих проектах. Основным преимуществом решателя, созданного Джонатаном, является символьный подход к записи исходных уравнений, что позволяет очень быстро и просто создавать новые ограничения, а также предоставляет возможность вычислять выражения в полях ввода значений. Еще одним преимуществом решателя SolveSpace является возможность единообразно решать как двумерные, так и трехмерные ограничения.
В качестве контр-примера можно привести встроенный решатель FreeCAD, который построен на других принципах, что вызывает ряд проблем. Одной из проблем является сложность добавления новых ограничений ввиду того, что приходится вручную записывать все частные производные уравнений. Но основным минусом решателя FreeCAD является его ограниченность областью проектирования двумерных эскизов, что негативным образом сказалось на функциональности FreeCAD — в нем до сих пор нет нормальной возможности делать трехмерные сборки деталей.
Эскиз (Sketch)
Несмотря на то, что SolveSpace является параметрической системой трехмерного моделирования, объемные тела создаются на основе набора двумерных контуров. Контуры в SolveSpace могут состоять из отрезков прямых, окружностей и их дуг, а также кубических сплайнов. Иерархически вложенные контуры становятся "дырками", а контуры, вложенные в “дырки” — снова становятся частью тел.
Пример эскиза
В SolveSpace возможно создание тел выдавливания (extrusion) и тел вращения (lathe), а все остальные тела можно получить объединением этих двух типов с использованием так называемых Булевых (Boolean) операций, которые являются основой Constructive Solid Geometry(CSG).
Пример тела выдавливания (extrusion)
Пример тела вращения (revolution, lathe)
Ограничения (Constraints)
Ограничения в параметрических САПР отличаются от размерных линий обыкновенных систем автоматизированного проектирования. Их основное отличие состоит в том, что изменение размерного значения меняет и сам эскиз, то есть ограничения предоставляют интерфейс двустороннего взаимодействия. Ограничения могут "измерять" размеры эскиза, то есть выполнять роль размеров “для справок” (reference). С другой стороны, ограничения могут изменять сам эскиз при изменении значения параметра ограничения. Это очень удобно, так как во множестве случаев инженеру-конструктору требуется создать документацию не единичного изделия, а целого семейства изделий, обладающих сходной формой, но различными значениями ряда размеров. К примеру, это могут быть обыкновенные гайки:
Эскизы гаек различного размера
Автоматическая перестройка чертежа при изменении некоторых параметров детали
В этом и состоит мощь параметрического моделирования: изменяя всего один или несколько параметров мы добиваемся полной перестройки всей модели, включая трехмерное представление и наборы видов на каждом из чертежей. Не нужно вносить тысячи правок, если необходимо изменить всего один размер — достаточно задать его новое значение и решатель геометрических ограничений рассчитает новые координаты объектов, а в случае ввода некорректных значений выдаст сообщение об ошибке.
Комментарии (22)
icoz
16.03.2017 21:53+1Круто. Жду конкретики и примеров. Спасибо вам за труд.
FadeToBlack
17.03.2017 05:26+1Будут и конкретика, и примеры. Хотел за одну статью, но подумал, что читать длинную статью сложнее, лучше будет, если разбить по темам.
Vjatcheslav3345
17.03.2017 07:09Можно ещё про BRL-CAD рассказать — у него самого по себе история интересная.
FadeToBlack
17.03.2017 07:43Вряд ли BRL-CAD полезен в современности. SolveSpace, FreeCAD, OpenSCAD — живые, развивающиеся OpenSource проекты, про BRL-CAD мало кто слышал.
Vjatcheslav3345
17.03.2017 08:52BRL-CAD — 2624 загрузки (на этой неделе) с Sourceforge. У совр-го FreeCAD — сопоставимые по порядку 6781.
Другое дело — у BRL-CAD не развитое вики и сайт с форумом.FadeToBlack
17.03.2017 09:42Интересно узнать подробнее про проекты, которые сейчас делают на BRL-CAD. Я попробовал что-то найти, но не нашел. Думаю, что OpenSCAD современнее и покрывает всю функциональность BRL-CAD. Если не прав, поправьте, я очень мало знаю про BRL-CAD.
aslepov78
17.03.2017 10:46+1Было бы интересно услышать конкретные реализации алгоритмов. Какие например являются чистой классикой выч. геометрии, а какие уникальные. Вообще, на ваш взгляд, каково качество кода, можно разобраться имея минимальные знания выч. геометрии, и опыт С/C++?
FadeToBlack
17.03.2017 10:48Да, это будут статьи про алгоритмы и общие принципы, будет немного кода, но без подробностей. На самом деле, весь код доступен в OpenSource уже давно для всех желающих:) Разобраться можно, код достаточно хорошо отлажен, заложены хорошие идеи.
3cky
17.03.2017 12:05Насколько активно развивается проект? Насколько я вижу, в репозитории на гитхабе последний коммит от ноября прошлого года.
FadeToBlack
17.03.2017 12:09Обратите внимание на даты предыдущих коммитов. Так случилось, потому что не все фичи мержатся сразу, просто эта фича слишком долго ждала своей участи. Гит пишет дату, когда коммит создан, а не когда он смержен. На самом деле проект обновляется каждую неделю.
crystalbit
17.03.2017 12:08+1Как инженер-конструктор с опытом работы с английским и русским интерфейсами, я бы «sketch» переводил как эскиз, а не чертёж.
На первой картинке с вложенными контурами как раз эскиз для какой-то операции (например, выдавливания), с гайками то же.
А на последней гифке уже чертёж (чертёж – drawing, а не sketch), который уже является частью документации. В чертеже стоят только нужные виды, размеры и ограничениями уже не пахнет.
Не знаю, как в локализации SolveSpace, если она есть, а вот в Creo (Pro/ENGINEER) используются именно такие понятия.FadeToBlack
18.03.2017 08:48Отредактировал статью с использованием терминов «эскиз» и «чертеж». спасибо еще раз.
pvvv
17.03.2017 19:33SolveSpace отличный, единственно чего немного не хватает, так это переменных параметров. Вот его бы совсем чуть-чуть с openscadом скрестить, совсем красота получится.
Eсть допустим несколько базовых параметров из которых вытекают большинство остальных размеров, вот их неплохо бы задавать непосредственно в текстовом виде: baseLenght = 50.
чтобы в нужные констрейны, например длины, потом вписывать не конкретную цифирку, а выражение baseLength*5, которое вычисляется и конвертируются в цифру не в момент ввода один раз, а пересчитывается при изменении.
Это всё можно и сейчас сделать через lenght ratio и difference, но хотелось бы задавать параметры непосредственно.
Lua, например, всунуть ему в качестве интерпретатора заданных констрейнов, и писать туда какие угодно выражения, а не только цифры.
tzlom
Очень круто, как в солиде, а судя по демке UI может даже и по круче
kostus1974
да, именно так. программа очень маленькая, с очень простым интерфейсом, но возможности огромны. не круче солида, конечно, но для простых задач — вполне.