Параметрическое моделирование кодом — отдельный мир CAD, в котором деталь описывается не мышкой по чертежу, а программой. У такого подхода своя ниша: повторяющиеся семейства деталей, генеративный дизайн, автоматические сборки от ИИ. Сравнение трёх популярных свободных инструментов — OpenSCAD, CadQuery и FreeCAD — наглядно показывает, чем отличаются их подходы и под какие задачи каждый годится. Параметрический STEP без ручного кода отдаёт, например, НейроИнженер.
Короткий итог
| Свойство | OpenSCAD | CadQuery | FreeCAD |
|---|---|---|---|
| Геометрическое ядро | CGAL, CSG | OCCT, BRep | OCCT, BRep |
| Язык описания | Собственный DSL | Python | Python + GUI |
| Экспорт в STEP | Нет (только STL) | Да | Да |
| GUI | Минимальный | Нет (есть CQ-editor) | Полноценный |
| Кривая обучения | Полчаса | Несколько часов | Дни |
| Подходит для | Прототипы под FFF | Промышленные детали | Сборки, чертежи |
OpenSCAD: самый простой вход
OpenSCAD появился в 2009 году и стал первым массовым инструментом «программного CAD» для домашних 3D-принтеров. Идея проста: деталь — это композиция базовых примитивов (cube, sphere, cylinder) и булевых операций (union, difference, intersection). Внутри — ядро CGAL, которое умеет считать булевы операции над сетками.
// Кронштейн 60×40, толщина 5, отверстие М4
difference() {
cube([60, 40, 5]);
translate([30, 20, -1])
cylinder(h = 7, d = 4.25, $fn = 32);
}
Файл занимает шесть строк, понятен с первого взгляда, превращается в STL за секунду. Это сила OpenSCAD.
Слабость — в той же простоте. CSG-операции — это «вычитание сетки из сетки», а не работа с гранями. Скруглить отверстие radius фаской можно через minkowski sum, но это будет долго (секунды на простую деталь, минуты на сложную) и неточно. Экспорт в STEP отсутствует как класс: OpenSCAD не знает понятий «грань» и «BRep» — то, что у него есть, это всегда сетка.
Когда OpenSCAD — правильный выбор
- Прототипы под FFF, которые проживут на чьём-то столе и в архив.
- Параметрические библиотеки сообщества (Thingiverse, Printables) — .scad файл переменных, и сразу пять вариантов размера.
- Учебные задачи: «объяснить ребёнку, как кодом строится 3D».
Когда он сломается
- Деталь идёт на фрезеровку: ЧПУ-программист ждёт STEP, а STL не возьмёт.
- Нужны фаски сложной формы или органические переходы.
- Деталь нагружена и требует расчёта, для которого нужна параметрическая геометрия.
CadQuery: BRep на Python
CadQuery работает на ядре OpenCascade (OCCT) — том самом, что внутри FreeCAD и большинства коммерческих CAD. Геометрия в OCCT — это BRep: грани, рёбра, вершины, аналитические формы.
Тот же кронштейн на CadQuery выглядит иначе:
import cadquery as cq
bracket = (
cq.Workplane("XY")
.box(60, 40, 5)
.faces(">Z")
.workplane()
.center(0, 0)
.hole(4.25)
.edges("|Z")
.fillet(3)
)
cq.exporters.export(bracket, "bracket.step")
Файл длиннее, но получает на выходе настоящий STEP с гранями и
скруглениями. Метод fillet(3) создаёт настоящую
цилиндрическую фаску, а не аппроксимированную сетку. Метод
faces(">Z") — это селектор: «выбери верхнюю грань».
Селекторы — главное удобство CadQuery; они позволяют ссылаться на
геометрию по смыслу, а не по координатам, что важно при параметризации.
Где CadQuery выигрывает
- Полноценный STEP, годный к импорту в любой CAD.
- Python — без отдельного DSL и сообщества, любые библиотеки подключаются через pip.
- Скрипт легко параметризовать: размеры, материалы, варианты посадок — переменные в начале файла.
- Подходит для автоматизированной генерации: модель из ИИ-генератора, набор деталей по таблице Excel, регрессионные тесты на CAD.
Где он раздражает
- Селекторы хороши, пока геометрия простая. На сложной детали
выбор «именно той грани» становится перебором и хаком вроде
.faces(">Z").faces("<X"). - Нет встроенного GUI — есть CQ-editor (Qt-окно с превью), но это инструмент разработчика, а не дизайнера.
- Отладка ошибок OCCT не самая приятная: сообщения иногда обрезаны и не показывают, на какой именно операции деталь развалилась.
Когда CadQuery — правильный выбор
- Промышленные детали, идущие на ЧПУ или к подрядчику в STEP.
- Конвейерная генерация: ИИ-ассистент, который выдаёт STEP по описанию (это, например, движок НейроИнженер).
- Кодовые библиотеки крепежа, профилей, корпусов — где важно переиспользование и автоматические тесты.
FreeCAD: GUI поверх того же OCCT
FreeCAD — отдельная категория. Это полноценный CAD с GUI, эскизами, деревом построения, чертёжной мастерской, симуляцией FEA и ЧПУ-постпроцессором. Внутри — тот же OCCT, что у CadQuery, но доступ к нему — через стандартный CAD-интерфейс. Параметризация в FreeCAD делается через переменные «Spreadsheet» (встроенная табличка) или через Python-скрипты в режиме console / macros.
# Тот же кронштейн в макро FreeCAD
import Part, FreeCAD as App
doc = App.newDocument()
box = doc.addObject("Part::Box", "Bracket")
box.Length = 60; box.Width = 40; box.Height = 5
hole = doc.addObject("Part::Cylinder", "Hole")
hole.Radius = 2.125; hole.Height = 7
hole.Placement.Base = App.Vector(30, 20, -1)
cut = doc.addObject("Part::Cut", "Result")
cut.Base = box; cut.Tool = hole
doc.recompute()
Part.export([cut], "bracket.step")
Код в макросе FreeCAD ближе по объёму к OpenSCAD, но геометрия — настоящая BRep. Плюс макрос можно открыть в GUI и продолжать редактировать руками.
Где FreeCAD незаменим
- Сборки нескольких деталей с зависимостями (Assembly4 workbench).
- Подготовка чертежа с размерами и допусками: TechDraw workbench.
- Подготовка ЧПУ-программы для фрезеровки: Path workbench.
- Когда нужна и графическая работа в окне, и параметризация кодом.
Где он сложнее, чем хочется
- Историческое наследие: разные «мастерские» сделаны разными командами, UX между ними не однороден.
- Параметризация через таблицу удобна для нескольких размеров; для динамического кода уже выгоднее CadQuery или код-only воркфлоу.
- Сообщество русскоязычной документации меньше, чем у КОМПАС-3D или Fusion 360.
Чем платишь за «код вместо мышки»
Программное CAD-моделирование экономит время на повторе и параметризации. Но за это есть цена:
- Никаких эскизов «на глаз». Все размеры — числами с самого начала. Это плюс для технического конструктора и минус для скульптора.
- Дольше первая деталь. Простой кронштейн в Fusion 360 рисуется за 3 минуты. На CadQuery — за 10, пока вспомнишь селекторы.
- Десятая деталь в семействе — мгновенно. Параметризованный код выдаёт всю серию по таблице. В GUI ту же серию пришлось бы перерисовывать.
Граница рентабельности проходит примерно по пятой детали в семействе. Меньше — быстрее в GUI; больше — выигрывает код. Это та самая зона, где ИИ-генератор имеет смысл: он строит первую модель кодом, дальше её можно либо открыть в FreeCAD и доработать GUI-инструментами, либо продолжать править параметры скрипта. Подробнее о том, что имеет смысл отдавать ИИ, а что лучше делать руками — в отдельной статье.
Что выбрать новичку
Сетка решений простая:
- «Нужен STL под мой принтер, быстрее научиться». OpenSCAD. Полчаса — и первая деталь уже на столе.
- «Хочу делать STEP, чтобы отдавать подрядчикам, плюс генерировать варианты». CadQuery. На Python это занимает час, и дальше серия строится автоматически.
- «Нужна сборка, чертёж и потом ЧПУ». FreeCAD. Один инструмент закрывает все этапы.
Все три можно учить параллельно: они не противоречат друг другу. STL из CadQuery открывается в OpenSCAD как сетка, STEP из FreeCAD читается всеми, скрипты CadQuery запускаются внутри FreeCAD как обычный Python-макрос.
Частые вопросы
Можно ли использовать OpenSCAD-скрипт внутри CadQuery?
Напрямую нет — это разные ядра и разные модели данных. Но можно собрать STL в OpenSCAD и потом импортировать его в CadQuery как «закрытый» объект (без возможности править грани). Обычно выгоднее переписать логику на CadQuery с нуля, тем более что синтаксис проще.
FreeCAD умеет открывать STEP из CadQuery?
Да, без проблем — оба используют OCCT. Стандартный сценарий: CadQuery генерирует параметрическую STEP-модель, FreeCAD открывает её и из неё делается чертёж в TechDraw. Файл при открытии не «теряется в сетку», вся BRep-геометрия остаётся.
Что лучше для генерации моделей ИИ-ассистентом?
CadQuery. Причины две: Python-синтаксис прозрачнее для LLM, и выход — параметрический STEP, который пригоден для любой дальнейшей работы. OpenSCAD проще писать, но без STEP половина промышленных сценариев отваливается.
Сколько занимает обучение, если я уже умею Fusion 360?
OpenSCAD — пара дней с примерами. CadQuery — неделя, чтобы привыкнуть к селекторам и paradigm shift с эскиз-операции на chained-builder. FreeCAD — две-три недели до уверенной работы; UX отличается от Fusion заметно, и многие вещи делаются иначе.