Параметрическое моделирование кодом — отдельный мир 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 — правильный выбор

Когда он сломается

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 выигрывает

Где он раздражает

Когда CadQuery — правильный выбор

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 незаменим

Где он сложнее, чем хочется

Чем платишь за «код вместо мышки»

Программное CAD-моделирование экономит время на повторе и параметризации. Но за это есть цена:

Граница рентабельности проходит примерно по пятой детали в семействе. Меньше — быстрее в GUI; больше — выигрывает код. Это та самая зона, где ИИ-генератор имеет смысл: он строит первую модель кодом, дальше её можно либо открыть в FreeCAD и доработать GUI-инструментами, либо продолжать править параметры скрипта. Подробнее о том, что имеет смысл отдавать ИИ, а что лучше делать руками — в отдельной статье.

Что выбрать новичку

Сетка решений простая:

Все три можно учить параллельно: они не противоречат друг другу. 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 заметно, и многие вещи делаются иначе.