Recommended resources
The freely available resources this lesson will direct you to.
Здравствуйте!
В предыдущих уроках мы научились готовить "чертежи" — двумерные эскизы, комбинируя фигуры вроде Rectangle и Circle. Вы создали параметрический эскиз печатной платы, который является идеальной отправной точкой для сегодняшней темы.
Цель этого урока — сделать решающий шаг от плоского чертежа к объемному объекту. Мы научимся выдавливать (extrude) 2D-эскизы, чтобы создавать из них трехмерные тела. Это фундаментальная операция в CAD, которая превращает ваш код в нечто, что можно напечатать на 3D-принтере. К концу этого урока вы сможете создать свою первую полноценную 3D-модель в build123d.
Что такое выдавливание (Extrusion)?
Выдавливание — это процесс, при котором 2D-профиль "вытягивается" вдоль определенного направления, образуя 3D-тело. Представьте, что ваш 2D-эскиз — это формочка для печенья. Выдавливание — это процесс вдавливания этой формочки в тесто на определенную глубину.

В build123d этот процесс реализуется с помощью функции extrude.
Базовое использование extrude
Рабочий процесс остается последовательным и логичным, что соответствует вашему опыту в разработке ПО:
- Создать и полностью определить 2D-эскиз в контексте
Sketch. - Передать готовый объект эскиза в функцию
extrude, указав толщину.
Функция extrude принимает как минимум два аргумента:
target: Объект, который нужно выдавить (в нашем случае, это будет результат работыSketch).amount: Величина выдавливания в миллиметрах.
Давайте создадим новый файл lesson7_extrude.py и начнем с простого примера:
# lesson7_extrude.py
from build123d import Sketch, Rectangle, extrude, show_object
# 1. Создаем 2D-эскиз
with Sketch() as box_sketch:
Rectangle(30, 40)
# 2. Выдавливаем эскиз на 10 мм
my_box = extrude(box_sketch, amount=10)
# Теперь мы отображаем 3D-объект, а не эскиз
show_object(my_box, name="My First 3D Box")
Сохраните файл. watchexec перестроит модель, и вместо плоского прямоугольника вы увидите в OCP CAD Viewer полноценный параллелепипед. Обратите внимание, что show_object теперь работает с трехмерным Solid, который вернула функция extrude.
Практическое применение: создаем 3D-модель печатной платы
Теперь применим этот навык к более полезной задаче. Возьмем код для эскиза печатной платы из предыдущего урока и придадим ему толщину. Стандартная толщина текстолита для плат часто составляет 1.6 мм.
Дополним наш файл:
# lesson7_extrude.py
from build123d import Sketch, Plane, Rectangle, Circle, Locations, Align, extrude, show_object
# --- Код эскиза платы из предыдущего урока ---
plate_width = 100
plate_height = 50
hole_radius = 2.5
hole_margin = 5
with Sketch(Plane.XY) as pcb_sketch:
Rectangle(plate_width, plate_height) # Выравнивание по центру по умолчанию
h_pos = plate_width / 2 - hole_margin
v_pos = plate_height / 2 - hole_margin
hole_positions = [
(h_pos, v_pos), (-h_pos, v_pos),
(-h_pos, -v_pos), (h_pos, -v_pos)
]
# В эскизе мы использовали вычитание (mode=Mode.SUBTRACT в прошлом уроке)
# или просто добавляли окружности. При выдавливании "дыры" в эскизе
# автоматически становятся сквозными отверстиями в 3D-модели.
with Locations(*hole_positions):
Circle(hole_radius)
# --- Конец кода эскиза ---
# 3. Выдавливаем эскиз платы на стандартную толщину
pcb_thickness = 1.6
my_pcb = extrude(pcb_sketch, amount=pcb_thickness)
# Отображаем только 3D-модель платы
# Если вы хотите сравнить, можете показать и эскиз: show_object(pcb_sketch)
show_object(my_pcb, name="3D PCB Model")
Сохранив этот код, вы получите параметрическую 3D-модель печатной платы. Отверстия, которые были просто окружностями в 2D-эскизе, теперь стали сквозными отверстиями в 3D-теле. Это одна из самых мощных концепций CAD: сложность определяется на уровне 2D-эскиза, а затем легко переносится в 3D.

Управление направлением выдавливания
По умолчанию extrude создает геометрию в положительном направлении оси, перпендикулярной плоскости эскиза (для Plane.XY это ось Z). Но этим можно управлять:
- Положительное значение
amount: выдавливание "вверх" по оси Z. - Отрицательное значение
amount: выдавливание "вниз" по оси Z.extrude(my_sketch, amount=-10) - Симметричное выдавливание:
both=True. Этот параметр делитamountпополам и выдавливает в обе стороны от плоскости эскиза. Это крайне удобно, когда плоскость эскиза должна оставаться в центре симметрии детали.
Пример симметричного выдавливания:
# ... ваш код эскиза ...
symmetric_part = extrude(pcb_sketch, amount=10, both=True)
# В результате получится деталь толщиной 10 мм,
# где 5 мм выше плоскости XY и 5 мм ниже.
# show_object(symmetric_part, name="Symmetric Part")
Чтобы лучше понять синтаксис и увидеть extrude в действии в официальной документации, изучите следующий фрагмент.
gumyr/build123d: A python CAD programming library
Официальный README build123d на GitHub содержит краткий, но емкий пример, который демонстрирует весь цикл: создание 1D-линий, преобразование их в 2D-эскиз и, наконец, выдавливание в 3D-тело. Это поможет закрепить пройденный материал.
Найдите раздел 'Usage', затем подраздел 'Upgrading to 2D and 3D'. Обратите внимание на последнюю строку кода в этом блоке: part = extrude(sketch, amount=2). Она наглядно показывает, как 2D-объект sketch преобразуется в 3D-объект part.
Проверьте себя!
Задание:
Возьмите код решения из практического задания предыдущего урока (эскиз "лицевой панели" face_plate) и превратите его в 3D-модель.
- Скопируйте код, создающий эскиз
face_plate. - Выдавите этот эскиз на толщину
3мм. - Отобразите получившуюся 3D-модель с помощью
show_object.
Показать решение
Вот возможное решение. Оно демонстрирует, как эскиз со сложными вырезами превращается в цельную 3D-деталь.
# lesson7_exercise_solution.py
from build123d import *
# Параметры из предыдущего задания
panel_width = 120
panel_height = 40
center_hole_radius = 10
cutout_width = 10
cutout_height = 20
cutout_offset = 40
panel_thickness = 3 # Новая переменная для толщины
# 1. Создаем эскиз точно так же, как и в прошлый раз
with Sketch() as face_plate_sketch:
Rectangle(panel_width, panel_height)
Circle(center_hole_radius, mode=Mode.SUBTRACT)
with Locations((-cutout_offset, 0), (cutout_offset, 0)):
Rectangle(cutout_width, cutout_height, mode=Mode.SUBTRACT)
# 2. Выдавливаем готовый эскиз
face_plate_part = extrude(face_plate_sketch, amount=panel_thickness)
# 3. Отображаем 3D-модель
show_object(face_plate_part, name="3D Face Plate")
Ключевые выводы
- Функция
extrude— основной инструмент для перехода от 2D к 3D, создающий объем из плоского эскиза. - "Отверстия" в 2D-эскизе (созданные через
mode=Mode.SUBTRACTили просто как внутренние замкнутые контуры) автоматически становятся сквозными отверстиями в 3D-модели при выдавливании. - Направлением и симметрией выдавливания можно управлять с помощью знака
amountи параметраboth=True. - Основной рабочий процесс в параметрическом моделировании:
Sketch→extrude.
Что дальше?
Мы научились создавать одиночные твердые тела. Но реальные объекты, особенно корпуса, часто состоят из нескольких частей, которые нужно соединить, или имеют сложные вырезы, которые проще сделать уже на 3D-модели. В следующем уроке мы изучим булевы операции (add, subtract, intersect), которые позволят нам комбинировать и модифицировать 3D-тела для создания более сложных конструкций.