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


Это — вводная статья к циклу статей "Параметрическое моделирование". Из этого цикла вы узнаете о внутреннем устройстве настоящего решателя геометрических ограничений, проблемах и их решениях на примере open-source САПР "SolveSpace". Кому не чужд мир трехмерного моделирования, добро пожаловать под кат!


image alt text
Модель ударно-спускового механизма РПГ-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 могут состоять из отрезков прямых, окружностей и их дуг, а также кубических сплайнов. Иерархически вложенные контуры становятся "дырками", а контуры, вложенные в “дырки” — снова становятся частью тел.


image alt text
Пример эскиза


В SolveSpace возможно создание тел выдавливания (extrusion) и тел вращения (lathe), а все остальные тела можно получить объединением этих двух типов с использованием так называемых Булевых (Boolean) операций, которые являются основой Constructive Solid Geometry(CSG).


image alt text
Пример тела выдавливания (extrusion)


image alt text
Пример тела вращения (revolution, lathe)


Ограничения (Constraints)


Ограничения в параметрических САПР отличаются от размерных линий обыкновенных систем автоматизированного проектирования. Их основное отличие состоит в том, что изменение размерного значения меняет и сам эскиз, то есть ограничения предоставляют интерфейс двустороннего взаимодействия. Ограничения могут "измерять" размеры эскиза, то есть выполнять роль размеров “для справок” (reference). С другой стороны, ограничения могут изменять сам эскиз при изменении значения параметра ограничения. Это очень удобно, так как во множестве случаев инженеру-конструктору требуется создать документацию не единичного изделия, а целого семейства изделий, обладающих сходной формой, но различными значениями ряда размеров. К примеру, это могут быть обыкновенные гайки:


image alt text
Эскизы гаек различного размера


image alt text
Автоматическая перестройка чертежа при изменении некоторых параметров детали


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


Часть 2

Поделиться с друзьями
-->

Комментарии (22)


  1. tzlom
    16.03.2017 21:52

    Очень круто, как в солиде, а судя по демке UI может даже и по круче


    1. kostus1974
      17.03.2017 10:44
      +1

      да, именно так. программа очень маленькая, с очень простым интерфейсом, но возможности огромны. не круче солида, конечно, но для простых задач — вполне.


  1. icoz
    16.03.2017 21:53
    +1

    Круто. Жду конкретики и примеров. Спасибо вам за труд.


    1. FadeToBlack
      17.03.2017 05:26
      +1

      Будут и конкретика, и примеры. Хотел за одну статью, но подумал, что читать длинную статью сложнее, лучше будет, если разбить по темам.


  1. icoz
    16.03.2017 21:54

    А экспорт в stl есть?


    1. engine9
      17.03.2017 02:06

      На сайте сказано, что да.


    1. baldrs_asgaardson
      17.03.2017 05:24

      Да, вот тут написано что есть: http://solvespace.com/index.pl


  1. Delsian
    17.03.2017 00:04

    Хм, а разве Relations в солидворксе делают не то же самое? :)


    1. FadeToBlack
      17.03.2017 05:30

      Да, это именно то же самое, только в проекте OpenSouce.


  1. Vjatcheslav3345
    17.03.2017 07:09

    Можно ещё про BRL-CAD рассказать — у него самого по себе история интересная.


    1. FadeToBlack
      17.03.2017 07:43

      Вряд ли BRL-CAD полезен в современности. SolveSpace, FreeCAD, OpenSCAD — живые, развивающиеся OpenSource проекты, про BRL-CAD мало кто слышал.


      1. Vjatcheslav3345
        17.03.2017 08:52

        BRL-CAD — 2624 загрузки (на этой неделе) с Sourceforge. У совр-го FreeCAD — сопоставимые по порядку 6781.
        Другое дело — у BRL-CAD не развитое вики и сайт с форумом.


        1. FadeToBlack
          17.03.2017 09:42

          Интересно узнать подробнее про проекты, которые сейчас делают на BRL-CAD. Я попробовал что-то найти, но не нашел. Думаю, что OpenSCAD современнее и покрывает всю функциональность BRL-CAD. Если не прав, поправьте, я очень мало знаю про BRL-CAD.


          1. Vjatcheslav3345
            17.03.2017 09:58

            Можно просто спросить об этом вот тут у его пользователей.


  1. aslepov78
    17.03.2017 10:46
    +1

    Было бы интересно услышать конкретные реализации алгоритмов. Какие например являются чистой классикой выч. геометрии, а какие уникальные. Вообще, на ваш взгляд, каково качество кода, можно разобраться имея минимальные знания выч. геометрии, и опыт С/C++?


    1. FadeToBlack
      17.03.2017 10:48

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


  1. 3cky
    17.03.2017 12:05

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


    1. FadeToBlack
      17.03.2017 12:09

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


  1. crystalbit
    17.03.2017 12:08
    +1

    Как инженер-конструктор с опытом работы с английским и русским интерфейсами, я бы «sketch» переводил как эскиз, а не чертёж.
    На первой картинке с вложенными контурами как раз эскиз для какой-то операции (например, выдавливания), с гайками то же.
    А на последней гифке уже чертёж (чертёж – drawing, а не sketch), который уже является частью документации. В чертеже стоят только нужные виды, размеры и ограничениями уже не пахнет.

    Не знаю, как в локализации SolveSpace, если она есть, а вот в Creo (Pro/ENGINEER) используются именно такие понятия.


    1. FadeToBlack
      17.03.2017 12:19

      Спасибо за замечание. Я как раз искал подходящее слово для этого.


    1. FadeToBlack
      18.03.2017 08:48

      Отредактировал статью с использованием терминов «эскиз» и «чертеж». спасибо еще раз.


  1. pvvv
    17.03.2017 19:33

    SolveSpace отличный, единственно чего немного не хватает, так это переменных параметров. Вот его бы совсем чуть-чуть с openscadом скрестить, совсем красота получится.

    Eсть допустим несколько базовых параметров из которых вытекают большинство остальных размеров, вот их неплохо бы задавать непосредственно в текстовом виде: baseLenght = 50.
    чтобы в нужные констрейны, например длины, потом вписывать не конкретную цифирку, а выражение baseLength*5, которое вычисляется и конвертируются в цифру не в момент ввода один раз, а пересчитывается при изменении.

    Это всё можно и сейчас сделать через lenght ratio и difference, но хотелось бы задавать параметры непосредственно.

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