Skip to main content

Someone wanted to learn this too, so Grasp built them a personal learning path.

You can keep exploring this one or create your own

Построение 2D-геометрии на плоскости

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-контуры.

2D-эскиз, напоминающий печатную плату
Пример сложного 2D-эскиза, созданного в `build123d` путем комбинирования простых фигур: прямоугольников и окружностей. Это основа для создания 3D-модели печатной платы.

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 мм.

  1. Панель (прямоугольник) должна быть выровнена по центру эскиза.
  2. В центре панели должно быть круглое отверстие радиусом 10 мм.
  3. По бокам от центрального отверстия, на расстоянии 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-объекты.

Can't find a good explanation? Sign up and we'll make it for you

Sign up