САПР SolveSpace выпущена под лицензией GPL

SolveSpace

Джонатан Уэстхьюс освободил исходный код SolveSpace — САПР для параметрического моделирования в 2D и 3D.

Проект был начат в 2008 году как развитие идей, положенных в основу SketchFlat — более ранней САПР Джонатана, которая работала только с 2D. Основные возможности SolveSpace — моделирование в 2D и 3D, подготовка моделей к 3D-печати и создание G-Code, симуляция механической связи и т.д.

В SolveSpace немало удивительного: крохотный исполняемый файл, который поместился бы на дискету (привет, олдфаги!), продвинутый решатель геометрических ограничителей, аналоги которого можно найти преимущественно в дорогих САПР, вывод в STL, DXF, PDF,  SVG и другие форматы.

Пока что программа собирается только в Windows, но стабильно работает в WINE. Это прекрасно видно на следующем видео, снятом в Ubuntu, где Кристофер Мэдсен показывает моделирование стопора для закрылка Sonex при помощи SolveSpace.

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

Кривая обучения, конечно, есть, но моему 11-летнему сыну понадобилось всего полчаса, чтобы начать работать с приложением после просмотра получасового урока. Понятно, что он не эксперт (да и я тоже), но ему этого хватило, чтобы начать решать свои задачи.

Мы попросили Джонатана немного рассказать об истории проекта, причинах публикации исходного кода и планах на будущее.

Какого рода проблемы ты пытался решить с помощью SketchFlat, а позднее — и SolveSpace?

Я разработал эти программы (а) для собственных потребностей, и (б) из-за неудовлетворённости решателями ограничителей в большинстве коммерческих САПР. Многие коммерческие решатели устроены так, что при частичном ограничении чертежа перетаскивание точки даёт неудовлетворительный результат: решатель может удовлетворить условия ограничения за счёт перемещения точки А на очень большое расстояние, хотя можно было бы переместить точку Б на куда как меньшее расстояние.

SolveSpace работает намного умнее, а кроме того, позволяет использовать разные экзотические ограничители, которых больше нигде нет — например, соотнесение с сущностями в 3D, а не просто с чем-то спроецированным на рабочую плоскость.

Черчение в SolveSpace
Черчение в SolveSpace

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

Как ты сам используешь SolveSpace?

Я проектирую достаточно простые вещи. Обычно это испытательные установки для всякой электроники, разные СВЧ-компоненты (антенны, экраны от СВЧ-излучения, фильтры…), либо станки с несколькими осями движения. Иными словами, простые поверхности и не слишком много деталей — SolveSpace с такими задачами как раз отлично справляется.

Большинство проектируемых деталей — для быстрого прототипирования. Чаще всего этого лазерная резка, печать PolyJet или CNC (вроде Firstcut).

Ещё я использую SolveSpace для решения геометрических задач, не связанных с проектированием деталей в 3D . Например, я в ней быстро считаю площадь, чтобы потом вычислить ёмкостное сопротивление, привязываю размеры из спецификации к координатам точек для ввода в непараметрические САПР,  готовлю человекочитаемые чертежи и т.д.

Что стало причиной публикации исходного кода SolveSpace под GPLv3+?

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

Работа с деталями в 3D
Работа с деталями в 3D

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

В прошлом ты обсуждал возможность лицензирования своей технологии компании McNeel для включения решателя в состав Grasshopper. Как я понимаю, вы не смогли договориться. Эта история как-то повлияла на твоё решение выпустить исходный код?

На самом деле, мы с ними ещё несколько раз возвращались к этому вопросу. Уверен, что смогу выбрать для McNeel лицензию, которая им подойдёт. Но для них это крупный проект. Дело ведь не столько в интеграции библиотеки, сколько в изменении некоторых фундаментальных принципов работы более крупного приложения с ограничителями. Прекрасно понимаю, почему им неохота с разбега нырять в эту работу, хотя был бы рад, если бы они всё-таки решились на интеграцию.

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

Над чем планируешь работать дальше?

Многие просят добавить поддержку Linux. Сейчас программа и так нормально работает в WINE, но настоящий «родной» порт, конечно же, намного лучше. Похоже, что этим в скором времени сможет заняться ещё один разработчик. Не исключено, что он же сделает и версию для Mac OS, использовав какой-нибудь портируемый тулкит.

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

Самым слабым местом SolveSpace сейчас являются булевы операции с NURBS. Они очень медленно выполняются и работают с ограниченным числом исходных поверхностей (например, поверхностями выдавливания и вращения), да и с теми — не шибко надёжно. Мне лично эта тема не так интересна, но доработать там явно есть что.

Как ты считаешь, не стоит ли перенести код решателя в Boost или lib2geom, чтобы упростить его повторное использование?

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

SolveSpace экспортирует в SVG всю треугольную сетку
SolveSpace экспортирует в SVG всю треугольную сетку (на иллюстрации — обычный и каркасный режимы в Inkscape)

Так что я не вижу в этой затее особого смысла. Даже если решатель добавить в какую-то библиотеку, он не будет разделять заметное количество кода. В нынешнем виде он, к тому же, привязан к SolveSpace. Интерфейс можно и формализовать, но ценой увеличения кодовой базы.

Исключением здесь являются разве что операции с кривыми и поверхностями NURBS (строго говоря, кусочно-линейные рациональные многочлены) вроде вычисления пересечений или булевых операций с оболочками. Здесь как раз достаточно простого интерфейса к остальной части программы, а самое сложное можно спрятать «под капот».

Мне пока не попадались хорошие свободные библиотеки такого рода. В некоторых проектах толково реализованы операции с 2D, но оболочки — типичный источник стрёмного кода для обработки частных случаев. Достаточно сказать, что пересечение двух плоскостей NURBS, как правило, не является кривой NURBS; поэтому любая оболочка из плоскостей NURBS, отрезанных кривыми NURBS, обычно будет либо «протекать», либо содержать неровно лежащие поверхности.

Мне было бы интересно поговорить с людьми, которые занимаются или хотят заняться работой такого рода.

Ты планируешь управлять SolveSpace как свободным проектом, со всеми вытекающими отсюда обязанностями вроде рассмотрения патчей? Или освобождение кода — скорее жест доброй воли — «вот вам исходники, делайте с ними всё, что хотите, но в рамках GPL» ?

Сейчас мне кажется правильным предъявлять не слишком суровые требования к патчам, которые я, конечно, буду рассматривать. В прошлом я практиковал как очень жёсткий контроль (в проекте LDmicro), так и полный отказ от поддержки (например, в proxmark3). Думаю, в этот раз стоит попробовать что-то посередине.


Исходный код SolveSpace доступен на условиях GPLv3+ как архив, а также размещён в открытом репозитории Git.

7 Комментарии

  1. Супер, теперь бы все это интегрировать в FreeCAD, эх пора садиться за учебники

  2. Вот спасибо товарищу Прокудину! Это же просто праздник какой-то!
    Успехов проекту! А то что под GPL v.3, добавляет интриги, конечно. Успехов!

  3. Если бы под него была узловая система… Или как вариант пересадить эти нурбсы в блендер. Блин, такая игрушечка, прямо подарок под новый год, и свежевыпеченная к тому же.

    • Подозреваю, что выдёргивать из него нурбсы в Blender будет той ещё головной болью. А что, проекту Nurbana окончательно капец настал?

      • Не то чтобы капец, но он уже не откликается. Можно сказать что трендец (от модного слова тренд).
        Я нуждаюсь в нурбсах в блендере.

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

    • Алексей, такие комментарии неплохо бы сопровождать ссылкой на репозиторий с поправленным кодом :)

1 Trackback / Pingback

  1. Обзорный доклад о состоянии инженерного ПО в Linux(Install Fest 2013) | Crafting.be

Комментарии закрыты.