Параметрическое моделирование кодом — отдельный мир CAD, в котором деталь описывается не мышкой по чертежу, а программой. У такого подхода своя ниша: повторяющиеся семейства деталей, генеративный дизайн, автоматические сборки от ИИ. Сравнение трёх популярных свободных инструментов — OpenSCAD, CadQuery и FreeCAD — наглядно показывает, чем отличаются их подходы и под какие задачи каждый годится. Параметрический STEP без ручного кода отдаёт, например, НейроИнженер.

Короткий итог

СвойствоOpenSCADCadQueryFreeCAD
Геометрическое ядроCGAL, CSGOCCT, BRepOCCT, BRep
Язык описанияСобственный DSLPythonPython + 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 заметно, и многие вещи делаются иначе.