solvespace-interface.png

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

Этот комментарий напишу до погружения: По тому что я наблюдал и тыкал другие CAD, для меня есть FreeCAD и все, OpenSCAD для программистов головного мозга, SolveSpace для минималистов любителей темного интерфейса и тайлинга. Brl-CAD ,хз наверное для вояк-лисповодов

Разбираемся

Установка

Все из README

git clone https://github.com/solvespace/solvespace.git
apt-get install cmake zlib1g-dev libpng-dev libcairo2-dev libfreetype6-dev
apt-get install libjson-c-dev libfontconfig1-dev libgtkmm-3.0-dev libpangomm-1.4-dev \
                libgl-dev libglu-dev libspnav-dev
cd solvespace

Вытягиваем подмодули:

git submodule update --init extlib/libdxfrw

Сборка и установка стандартные(make install заменил на checkinstall)

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo checkinstall

Ветка разработки за авторством EvilSpirit

Вот канала на YouTube где автор показывает превнесенные новшеств. Лично мне хотелось попробовать Ranged Constraints

Говорят что нужна поддержка OpenGL 2.0 чтобы все работало. А так зависимости те же, компиляция такая же отличается только источник кода

git clone -b ranged_constraints https://github.com/Evil-Spirit/solvespace-master.git
cd solvespace-master

Источники информации

Главное это наверное статьи EvilSpirit

Если Вам нужно общение и у Вас есть вопрос на русском то лучше их задавать тут. Также по ссылке вы найдете множество ссылок на примеры и форки.

Заинтересовавшие меня темы:

http://solvespace.com/box.pl — статья про сборку(Assembly) на офф. сайте, видео, с этим уроком. Основной элемент это совпадение базовых систем координат и совпадение точек. Что не факт, что будет в вашей модели, но можно делать параллельными оси.

Пример работающего механизма а это вот реализация китайцами https://vimeo.com/208010526

Интерфейс

Чтобы Вам не говорили про то что внутри, вряд ли люди приходят в SolveSpace увидев текстовый вывод геометрического решателя. добавили 3D.

solvespace-interface.png

Figure 2: Минимализм и Hotline Miami

SolveSpace очень минималистичен как по размерам кода так и по рабочему пространству оно максимально освобождено:. Интерфейс также аскетичный так как ограничения сгруппированы и один и тот же инструмент работает по разному в зависимости от выбранных объектов(например при выборе 3-4 отрезков вместо двух, инструмент равенства будет выдавать равенство углов).

  1. Панель инструментов, эти инструменты обозначены иконками есть почти все. Сгруппировано сверху вниз: Создание примитивов, Ограничение примитивов, Работа с готовым скетчем(вытягивание, создание массивов, импорт деталей).
  2. Все что не влезло или не получило иконок в тулбаре. В основном весь пункт помощи и анализа.
  3. Рабочее пространство. Вращение зажатая СКМ, перетаскивание предмета зажатая ЛКМ, смещение вида зажата ПКМ. Контекстные меню если есть то маленькие.
  4. Окно свойств основной рабочий инструмент о нем поговорим подробнее.

Окно браузера не встроено, его можно и закрыть а потом вызвать клавишей Tab. Верхняя строка это что-то вроде адреса где Home страница, это часть с перечислением всех деталей. Затем идет панель инструментов, указывающая как настроить изображение в текущем виде, сделать детали прозрачными или наоборот состоящими только из каркасной сетки, или mesh. Далее то что в FreeCAD называется Древо документа, т.е все объекты(здесь группы) что представлены в файле.

ВАЖНО здесь нет древовидной структуры, здесь скорее лента документа. Изначально существует базисные плоскости и 0 это группа g001, затем вы в них создаете скетч у меня это g002-sketch-in-plane в скетче вы задаете ограничение уменьшая количество степеней свободы DOF, если кликнуть на каждую групп , можно увидеть сколько в ней степеней свободы. А также какие в ней есть ограничения. Кликнув на ограничение и оно будет подсвечено, также из браузера их можно удалять, как и прочие объекты.

solvespace-browser-group.png

Затем создав скетч вы захотите его допустим выдавить, но тут нет операций с твердыми телами, выдавливание это тоже операция на которую можно задать ограничения, так например задав длину. В примере на скриншоте к созданому скетчу работы механизма(позже) я добавлял детали(Shift+I) и закреплял их ограничениями.

5 — показывает какая группа сейчас активна в неё и идет добавление, при переключении временно уберутся добавленные позднее объекты, это как откат по истории. 6 — Shown показывает объекты(группы) к которым можно привязать ограничение, точки, ребра при снятии галки они пропадут но выдавленное тело не исчезнет.

Также в браузере есть настройка внешнего вида и настройка, вынесенные в текстовые меню, как в emacs и старых рогаликах

И не забываем что почти всем командам соответствуют горячие клавиши.

solvespace-interfacelook.png

Figure 4: Мы настроили внешний вид в окне, но иконки и бар остались прежними, поэтому я за default

В этом окне можно настраивать, пользовательскую палитру да и сетку. Есть ещё окно которое отвечает за стиль и внешний вид 3D области, об этом ниже в заметке о черчении.

Особенности и Концепции

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

Параметрическая модель

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

Сборка

solvespace-baseassembly.png

Figure 5: Сборка, параллельность осей, точка на оси, и расстояние до точки на оси

Берем файл и экспортируем в него детали созданные в solvespace начинаем задавать ограничения, по мимо совпадения точек нам очень помогут вспомогательные вектора точек и плоскостей, чтобы задавая их параллельность как то позиционировать деталь и не бойтесь если SolveSpace выдаст ошибку о том что ограничений избыточное количество, увы идеально подобрать необходимое и достаточное количество ограничений мы не всегда можем, особенно в 4 часа ночи(жмите allow redundant constraints). Есть ещё ограничение совпадения базисных векторов(всех трех) но оно редко нужно.

Пример видео, с сборкой.

Работающие механизмы.

Создаем геометрический каркас по которому работает наш механизм, после чего экспортируем в файл детали и привязываем их к каркасу. Пример диафрагмы ниже.

Также вот пример с офф сайта, выполненный на видео — https://vimeo.com/208010526

Также советую попробовать форк с Ranged Constraint, т.е ограничение минимального и максимального расстояния/угла. Как собрать написано выше.

Импорт/Экспорт

Экспорт для 3D печати прост и требует в основном mesh форматы что есть судя по видео и фото напечатанных деталей.

solvespace-step-export.png

Figure 6: Наблюдаем что экспорт представляет из себя набор поверхностей, а не твердое тело.

Удивительно у SolveSpace есть экспорт 2д вида в STEP, вопрос чем читать? Autodesk может, а в опенсорсе никем не получилось. А экспорт 3D экспортирует только поверхности, не знаю группирует он их к примитивам или нет.(Есть подозрения что там просто созданы объекты типо шейп, а всякие привязки к метаобъектам тел и всяким AP и их свойствам нет). С другой стороны тут и нет концепции твердых тел, только примитивы, поэтому если хотите работать с твердыми телами сами их группируйте — удручает.

Импорт существует из DXF/DWG, также можно импортировать изображение, это плоский примитив у которого связаны размеры между собой.

Трассировка и анализ

Вычисление периметра, площади, центра масс , я пропускаю. Анализ mesh сетки.

Из интересного есть возможность посмотреть не пересекаются ли тела(на самом деле поверхности).

solvespace-intersection.png

Figure 7: В этом положении створки затвора пересекаются

Выглядит интересно особенно если прикрутить API и состыковать с трассировкой и изменяемыми размерами.

solvespace-interror.png

Figure 8: Штырь и отверстие одинаковых диаметров, но программа сообщает ошибку.

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

solvespace-trace.png

Figure 9: Трассируется одна точка но с заданными ограничениями у нас два положения в котором может быть деталь

Вот видео которое показывает как трассировать точку https://vimeo.com/190087085

Выбираем увы только одну точку и начинаем дергать наш объект при перемещении точка оставит след. Когда мы нажимаем Stop Tracing эти координаты скидываются в csv

Также есть Step Dimenshion это когда мы указываем размерную линию/угол указываем минимальное и максимальное значение на которое будет изменятся размер и количество точек для замера, дальше нажимаем произвести изменение размера, все шаги(step) пройдут, можно останавливать трассировку, точки будут записаны в файл почему, то 4 раза подряд. И тут не без ложки дегтя, так как угол в SolveSpace может быть не больше 180, так что полный оборот на ней не изобразить. Говорят это поправят.

Задавать траекторию движения точки тоже нельзя.

Черчение 2D

Если ваше предприятие не сильно требовательно к ГОСТ и Вам для себя, то чертите где хотите. На сайте же есть учебник по черчению.

Что же нам предлагают, а предлагают нам создать новый стиль(ПКМ на выделенном объекте).

solvespace-newstyle.png

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

Причем при экспорте в pdf тут нет волшебной галочки, ЧБ и вам экспортируется фиолетовые размерные линии и ограничения, спасибо, не надо. При малом количестве объектов ещё можно заниматься этим, но при большом понадобятся фишки QCAD(LibreCAD) , т.е. параллельно работающие блоки, нормальное переключение видимости слоев.

solvespace-qcadpost.png

Figure 11: Постобработка в QCAD через dxf выйдет быстрее

CLI и API

В папке с собранной программой есть solvespace-cli, это консольный инструмент для конвертации ваших slvs файлов в другие форматы.

API вроде есть в каком-то форке.

Пример Диафрагма

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

Внешний пятигранник пришлось зафиксировать с помощью угла между вспомогательной линией и вектором.

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

Дальше я создал двойные отрезки. Когда вы чертите отрезки(инструмент S) то нажатие Esc прервет отрисовку на текущем моменте, поэтому для двух соединенных отрезков нужно два клика, а не три точки.

Привязал отрезки к точкам на окружностях, задал равенство плеч и их размеры.

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

solvespace-asm-schema-diafragma.png

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

solvespace-asm-schema-error.png

Рисуем два кольца

solvespace-asm-ring.png

Опять моя неидеальная конструкция, видим пять вспомогательных отрезков одинаковой длинны — 30. На концах отрезков окружности одинакового диаметра 2 мм. А также две окружности не которые задают границы.

Идеально наверное было бы сделать отрезок обозначающий центральную линию с отверстиями(диаметра 30мм), к нему прикрепить вспомогательный отрезок для обозначения толщины кольца, затем воспользоваться ограничением Точка на середине не доступного из панели инструментов(Также как ограничение Зафиксировать). Дальше привязать окружность и вытянуть. На ней уже расположить скетч с окружность отверстия ,сделать круговой массив , Вытянуть и вычесть, да да в процедуре вытягивания можно совершить булевые операции.

solvespace-asm-ring2.png

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

solvespace-asm-planka.png

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

solvespace-asm-zatvor.png

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

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

На случай если хотите проверить или лень все читать)

Итоги

Красивая вещь математика, красивая вещь геометрия. Как красиво например набивать текст в Tex для pdf-ки или заниматься каллиграфией. Так и с геометрическими ограничениями идея простая и в простых моделях она прокатит задать ограничения и постепенно довести количество степеней свободы до нужного минимального количества.

Проблемы возникают когда деталей становится много, а времени на их моделирование ещё меньше и тут принцип «** и в продакшен» начинает превалировать.

В общем SolveSpace сам в себе и экосистема его сама в себе, его даже пока как workbench к freecad не по используешь. Т.е. да им приятно пользоваться, легкий, красивый, простой концепт(если сравнивать с Sketcher FreeCAD), но вот тут начинается, сферу начерти, угол на 360 сделай. Формулу запили… и вот этого куча всего.

По функционалу это неплохой воркбенч для симулирования геометрически ограниченных конструкций и их работы, потом грубые детали отсюда можно использовать для доработки напильником в других cad или же если детали просты и грубы их можно сразу печатать. Собственно много моих знакомых и используют solvespace как простой редактор для создания деталей на печать.

В будущем думаю статью обновить и попробовать форк, для Python например.

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