Recommended resources
The freely available resources this lesson will direct you to.
Здравствуйте!
В предыдущем уроке мы подготовили наш виртуальный "холст": научились определять рабочую плоскость (Plane) и создавать на ней контекст для эскиза (Sketch). Мы выяснили, что можно использовать как стандартные плоскости, так и любую плоскую грань существующего объекта.
Теперь, когда холст готов, пора научиться на нем рисовать.
Цель этого урока — освоить создание базовых 2D-фигур, а именно прямоугольников (Rectangle) и окружностей (Circle), и научиться точно располагать их на плоскости эскиза. Это второй и важнейший шаг в рабочем процессе "создать эскиз → выдавить", который является основой параметрического CAD-моделирования.
Рисование внутри Sketch
Мы продолжим работать внутри уже знакомого вам блока with Sketch(...). Напомню, что все координаты, которые мы указываем внутри этого блока, являются двумерными и относятся к локальной системе координат выбранной плоскости эскиза.
1. Прямоугольники (Rectangle)
Прямоугольник — это, пожалуй, самый частый "строительный блок" для корпусов и конструктивных элементов.
Синтаксис его создания прост: Rectangle(width, height).
Ключевой аспект, который дает вам полный контроль над геометрией — это выравнивание (align). По умолчанию, build123d размещает центр прямоугольника в начале координат эскиза (0, 0). Однако это не всегда то, что нужно.
Параметр align принимает кортеж из двух значений для осей X и Y соответственно: (x_align, y_align). Каждое значение может быть:
Align.MIN: выровнять по минимальной координате (левый край для X, нижний для Y).Align.CENTER: выровнять по центру.Align.MAX: выровнять по максимальной координате (правый край для X, верхний для Y).
Давайте посмотрим на практике. Создайте файл lesson6_shapes.py:
# lesson6_shapes.py
from build123d import Sketch, Plane, Rectangle, Align, show_object
# Создадим эскиз на плоскости XY
with Sketch(Plane.XY) as my_sketch:
# Прямоугольник 80x60, нижний левый угол в (0,0) эскиза
Rectangle(80, 60, align=(Align.MIN, Align.MIN))
# Прямоугольник 30x20, выровненный по центру (поведение по умолчанию)
# Заметьте, его центр будет в (0,0), и он наложится на первый
Rectangle(30, 20)
show_object(my_sketch, name="Два прямоугольника")
Когда watchexec обновит вьювер, вы увидите маленький прямоугольник, "вписанный" в угол большого. Это происходит потому, что их локальные начала координат (0,0) совмещены, но align определяет, какая точка прямоугольника попадает в это начало координат.
2. Окружности (Circle)
Окружности не менее важны: это будущие крепежные отверстия, вырезы под кнопки, ножки и т.д.
Синтаксис еще проще: Circle(radius).
По умолчанию, центр окружности также создается в точке (0, 0) эскиза. Чтобы разместить окружность (или любую другую фигуру) в другом месте, мы используем специальный контекст Locations.
3. Комбинирование фигур и позиционирование с Locations
Реальные детали редко состоят из одной фигуры. Нам нужно их комбинировать. Locations — это мощный инструмент в build123d для размещения одного и того же объекта в нескольких точках.
Давайте создадим эскиз простой пластины с четырьмя крепежными отверстиями по углам. Здесь ваш опыт в Python позволит написать очень чистый и параметрический код.
Дополним наш файл lesson6_shapes.py:
# lesson6_shapes.py
from build123d import Sketch, Plane, Rectangle, Circle, Locations, Align, show_object
# Параметры нашей будущей платы
plate_width = 100
plate_height = 50
hole_radius = 2.5
hole_margin = 5 # Отступ центров отверстий от края
# Создаем эскиз на плоскости XY
with Sketch(Plane.XY) as pcb_sketch:
# 1. Основа - прямоугольник, выровненный по центру.
# Это часто удобнее для симметричных деталей.
Rectangle(plate_width, plate_height)
# 2. Определяем положения центров отверстий.
# Используем параметризацию, чтобы положения зависели от размеров.
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)
]
# 3. Размещаем окружности в этих позициях.
# Контекст Locations применяет операцию Circle ко всем точкам из списка.
with Locations(*hole_positions):
Circle(hole_radius)
# Отображаем только этот эскиз для ясности
show_object(pcb_sketch, name="Эскиз платы с отверстиями")
Сохраните файл. Теперь во вьювере вы увидите аккуратный эскиз, полностью определенный параметрами. Измените plate_width или hole_margin, и вся геометрия автоматически перестроится. Этот подход — разделение определения геометрии (Circle) и ее размещения (Locations) — является ключом к созданию легко модифицируемых моделей.
Применяя эти простые принципы, можно создавать очень сложные 2D-контуры.

4. Краткий обзор других 2D-фигур
Помимо Rectangle и Circle, build123d предлагает и другие примитивы для более сложных контуров:
RectangleRounded: Прямоугольник со скругленными углами.Polygon: Многоугольник по набору вершин.Line,Polyline,Spline,Arc: Для создания произвольных кривых.
Для проектирования корпусов чаще всего достаточно Rectangle, Circle и RectangleRounded. Мы вернемся к другим по мере необходимости. Если вам интересно взглянуть на более сложные примеры, документация build123d — хороший источник.
gumyr/build123d: A python CAD programming library
Чтобы получить представление о том, какие еще фигуры существуют, вы можете взглянуть на примеры в официальном репозитории build123d. Не нужно углубляться, просто обратите внимание на разнообразие 1D-объектов, из которых строятся сложные 2D-фигуры.
Найдите раздел 'Usage', а затем подраздел 'Constructing a 1D Shape'. Просмотрите примеры кода с Line, JernArc и PolarLine, чтобы увидеть, как создаются более сложные криволинейные контуры.
Проверьте себя!
Задание:
Напишите скрипт, который создает эскиз "лицевой панели" размером 120x40 мм.
- Панель (прямоугольник) должна быть выровнена по центру эскиза.
- В центре панели должно быть круглое отверстие радиусом 10 мм.
- По бокам от центрального отверстия, на расстоянии 40 мм влево и вправо от центра, должны располагаться два прямоугольных выреза размером 10x20 мм.
Подсказка: Используйте Locations для размещения боковых вырезов.
Показать решение
Вот один из возможных вариантов решения. Обратите внимание, что мы создаем фигуры, а затем вычитаем их из основной.
# lesson6_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
with Sketch() as face_plate:
# 1. Основная панель
Rectangle(panel_width, panel_height)
# 2. Центральное отверстие.
# Для вычитания используется параметр mode=Mode.SUBTRACT
Circle(center_hole_radius, mode=Mode.SUBTRACT)
# 3. Боковые вырезы.
# Locations работает и для вычитания.
with Locations((-cutout_offset, 0), (cutout_offset, 0)):
Rectangle(cutout_width, cutout_height, mode=Mode.SUBTRACT)
show_object(face_plate, name="Эскиз лицевой панели")
Важное замечание: mode=Mode.SUBTRACT — это мощный инструмент внутри Sketch для создания вырезов. Мы подробнее поговорим о булевых операциях в следующих уроках, но это хороший пример того, как можно комбинировать фигуры не только сложением, но и вычитанием.
Ключевые выводы
- Внутри контекста
with Sketch(...)мы создаем 2D-геометрию, такую какRectangleиCircle. - Параметр
alignуRectangleпозволяет точно контролировать его положение относительно начала координат эскиза. - Контекст
Locations— это эффективный и "чистый" способ размещения одной и той же геометрии в нескольких точках. - Комбинируя эти простые инструменты, можно создавать сложные параметрические 2D-контуры, которые служат основой для 3D-моделей.
Что дальше?
Мы научились создавать плоские эскизы. Но для 3D-печати нам нужен объем. В следующем уроке мы сделаем решающий шаг: научимся выдавливать (extrude) наши 2D-эскизы, превращая их в полноценные трехмерные тела. Это завершит наш базовый цикл проектирования и позволит создавать первые кастомные 3D-объекты.