Что такое build123d и зачем это нужно
build123d — это фреймворк для параметрического моделирования (BREP) на Python, построенный на базе геометрического ядра Open Cascade. Главная цель проекта — предоставить чистый, «питонический» интерфейс для создания точных CAD-моделей, пригодных для 3D-печати, лазерной резки и ЧПУ-обработки. В отличие от традиционных CAD-систем, здесь дизайн описывается кодом, что обеспечивает версионность и воспроизводимость проектов.
Два режима работы: Алгебраический и Builder
Ключевая особенность библиотеки — наличие двух парадигм моделирования, что позволяет выбирать подход под задачу:
- Algebra Mode (Алгебраический режим): Безсостоянийный (stateless) подход. Каждая операция возвращает новый объект, а изменения вносятся через алгебраические операторы (например,
obj += sub_obj). Это обеспечивает читаемость и композируемость логики дизайна. - Builder Mode (Режим построителя): Подход, напоминающий историю построения в классических CAD. Состояние отслеживается внутри контекстов (
with BuildPart():). Операции aware (осведомлены) о pending-фигурах, а трансформации применяются ко всем дочерним объектам. Введен модификаторmodeдля управления тем, как новые фигуры объединяются с контекстом (ADD, SUBTRACT, REPLACE).
Технические детали и возможности
Библиотека строго типизирована (PEP 8, mypy, pylint) и использует rich type hints для pylance. Она поддерживает работу с 1D (Edges, Wires), 2D (Faces, Sketches) и 3D (Solids, Parts) геометрией. Важной функцией является экспорт в форматы, совместимые с FreeCAD и SolidWorks, а также импорт/экспорт STL, STEP и SVG для взаимодействия со слайсерами и CAM-системами.
Примеры кода
Ниже приведена сравнительная таблица синтаксиса для создания базовой геометрии в разных режимах:
| Характеристика | Algebra Mode | Builder Mode |
|---|---|---|
| Создание линии | line = Line((0,0), (10,0)) |
with BuildLine(): line = Line((0,0), (10,0)) |
| Создание эллипса/дуги | line += JernArc(line, radius=5, arc_size=180) |
line += JernArc(line, radius=5, arc_size=180) |
| Создание 2D-эскиза | sketch = make_hull(line.edges()) |
with BuildSketch(): make_face() |
| Экструзия в 3D | part = sketch.extrude(amount=5) |
extrude(amount=5) (в контексте BuildPart) |
| Управление состоянием | Нет внутреннего состояния | Отслеживание через контексты with |
Установка и экосистема
Проект лицензирован под Apache License 2.0 и является форком/рефакторингом частей библиотеки CadQuery. Для установки рекомендуется использовать pip:
pip install build123d
Для визуализации моделей разработчики рекомендуют использовать ocp_vscode — расширение для VS Code и standalone-вьювер. Активная разработка ведется в ветке development, где доступны самые свежие функции.
Источник: Github ↗
