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-эскизов

Здравствуйте!

В предыдущем модуле мы освоили полный базовый цикл работы: от параметрического описания простой 3D-модели в коде до экспорта в STL-файл, готовый для вашего 3D-принтера. Мы создали заготовку для будущего корпуса в виде параметрического блока (Box).

Однако, используя только примитивы вроде Box, Cylinder или Sphere, создавать сложные и функциональные объекты, такие как корпуса для электроники, крайне затруднительно. Нам нужен более мощный и гибкий подход.

Цель этого урока — освоить первый шаг этого подхода: научиться определять рабочую плоскость (Plane) для создания двумерных эскизов. Это фундаментальная концепция в любом CAD-моделировании. Рабочая плоскость — это, по сути, наш виртуальный "холст", на котором мы будем рисовать контуры будущих деталей.

От примитивов к эскизам

Профессиональное проектирование деталей редко начинается с комбинирования готовых 3D-блоков. Гораздо чаще используется двухэтапный процесс:

  1. Создание 2D-эскиза (Sketch): На некоторой плоскости в 3D-пространстве рисуется плоский контур будущей детали. Это может быть форма основания корпуса, профиль вентиляционной решетки или сечение крепежного элемента.
  2. Применение 3D-операции: К эскизу применяется операция, придающая ему объем. Самая распространенная из них — выдавливание (extrude), которое "вытягивает" 2D-контур в третье измерение, создавая твердое тело.

Чтобы начать рисовать эскиз, нам сперва нужно определить, где в 3D-пространстве мы будем это делать. Для этого и служат рабочие плоскости.

Что такое рабочая плоскость (Plane)?

Рабочая плоскость — это бесконечная двумерная поверхность, расположенная в трехмерном пространстве. У нее есть свое начало координат и ориентация. Ваша подготовка в области физики и математики подскажет вам прямую аналогию: определение Plane — это, по сути, задание локальной 2D-системы координат (базиса) в рамках глобальной 3D-системы.

2D Sketches on Different Working Planes
Иллюстрация из документации build123d, показывающая два разных 2D-эскиза, каждый на своей уникальной рабочей плоскости в 3D-пространстве.

build123d предоставляет несколько способов определить такую плоскость.

Стандартные плоскости

Для удобства уже предопределены три основные плоскости, соответствующие глобальной системе координат:

  • Plane.XY (плоскость "пола")
  • Plane.XZ (вертикальная "боковая" стенка)
  • Plane.YZ (вертикальная "передняя" стенка)

Чаще всего моделирование начинается с эскиза на плоскости Plane.XY.

Контекст Sketch

Чтобы сообщить build123d, что мы собираемся рисовать 2D-эскиз на определенной плоскости, используется контекстный менеджер Python — конструкция with.

from build123d import *

with Sketch(Plane.XY) as my_sketch:
    # Код, написанный здесь, будет создавать 2D-геометрию
    # на плоскости XY.
    pass 

Все, что находится внутри этого блока with, выполняется в "режиме эскиза". Координаты, которые вы будете использовать здесь, будут двумерными (x, y) относительно системы координат выбранной плоскости.

Давайте создадим новый файл lesson5_plane.py и посмотрим, как это работает на практике. Пока мы не будем рисовать сложные фигуры (это тема следующего урока), а просто создадим прямоугольник, чтобы увидеть, как эскиз располагается в пространстве.

# lesson5_plane.py
from build123d import Sketch, Plane, Rectangle, show_object

# Создаем эскиз на стандартной плоскости XY
with Sketch(Plane.XY) as xy_plane_sketch:
    Rectangle(40, 30)  # Рисуем прямоугольник 40x30 мм

# Отображаем результат
show_object(xy_plane_sketch, name="Эскиз на плоскости XY")

Когда watchexec выполнит этот скрипт, вы увидите в OCP CAD Viewer плоский прямоугольник, лежащий на "полу" (в плоскости XY).

Вертикальный 2D-эскиз на плоскости
Пример эскиза, расположенного на вертикальной плоскости.

Теперь измените Plane.XY на Plane.YZ и посмотрите, как изменится ориентация прямоугольника во вьювере. Он станет вертикальным, как на изображении выше.

Рабочие плоскости на гранях объектов

Стандартные плоскости полезны для начала, но что, если нам нужно добавить элемент на уже существующую поверхность 3D-объекта? Например, сделать вырез на верхней крышке корпуса.

build123d делает это очень просто: любую плоскую грань (Face) существующего объекта можно использовать как рабочую плоскость.

Это ключевой прием, которым вы будете пользоваться постоянно.

Давайте построим блок и создадим эскиз на его верхней грани.

# lesson5_plane_on_face.py
from build123d import Axis, Box, Sketch, Circle, show_object

# 1. Создаем базовый 3D-объект
base_block = Box(100, 80, 20)

# 2. Находим нужную нам грань.
#    Мы можем отсортировать все грани объекта по оси Z и взять последнюю (верхнюю).
top_face = base_block.faces().sort_by(Axis.Z)[-1]

# 3. Используем эту грань как плоскость для нового эскиза.
#    Конструктор Sketch() принимает объект Face напрямую.
with Sketch(top_face) as top_sketch:
    # Чтобы что-то увидеть, нарисуем окружность в центре эскиза.
    # Координаты (0, 0) теперь относятся к центру грани top_face.
    Circle(15) 

# Отображаем и базовый блок, и эскиз на нем
show_object(base_block, name="Базовый блок")
show_object(top_sketch, name="Эскиз на верхней грани")

Запустив этот скрипт, вы увидите куб, а на его верхней грани — нарисованную окружность. Обратите внимание, как build123d автоматически сориентировал систему координат эскиза так, чтобы ее начало (0,0) находилось в центре грани.

Этот подход — создать тело -> выбрать грань -> создать эскиз на грани — является основой для последовательного добавления деталей и усложнения вашей модели.

Проверьте себя!

Задание:
Модифицируйте скрипт lesson5_plane_on_face.py. Вместо того чтобы создавать эскиз на верхней грани (top_face), создайте его на передней грани блока.

Подсказка: Передняя грань — это та, что смотрит на вас вдоль оси Y. Вы можете найти ее, отсортировав грани по Axis.Y.

Показать решение

Вам нужно изменить строку, где выбирается грань. Вместо сортировки по Axis.Z, используйте Axis.Y.

# lesson5_plane_on_face_solution.py
from build123d import Axis, Box, Sketch, Circle, show_object

# 1. Создаем базовый 3D-объект
base_block = Box(100, 80, 20)

# 2. Находим переднюю грань
#    Сортируем по оси Y и берем последнюю грань (с наибольшей координатой Y)
front_face = base_block.faces().sort_by(Axis.Y)[-1]

# 3. Используем эту грань как плоскость для нового эскиза.
with Sketch(front_face) as front_sketch:
    # Рисуем ту же окружность для наглядности
    Circle(15) 

# Отображаем результат
show_object(base_block, name="Базовый блок")
show_object(front_sketch, name="Эскиз на передней грани")

Во вьювере вы увидите, что окружность теперь нарисована на грани, обращенной к вам.

Ключевые выводы

  • Сложные 3D-модели создаются путем рисования 2D-эскизов и последующего придания им объема.
  • Эскиз всегда рисуется на рабочей плоскости (Plane) — нашем "холсте" в 3D-пространстве.
  • build123d использует контекстный менеджер with Sketch(...) для определения, на какой плоскости мы рисуем.
  • Мы можем использовать как стандартные плоскости (Plane.XY, Plane.XZ, Plane.YZ), так и, что более важно, любую плоскую грань (Face) существующего объекта в качестве рабочей плоскости.

Что дальше?

Мы научились готовить "холст". Теперь пора научиться на нем рисовать. В следующем уроке мы подробно рассмотрим, как создавать различные 2D-фигуры (прямоугольники, окружности, линии, дуги) внутри контекста Sketch, чтобы формировать сложные и точные контуры для наших будущих деталей.

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

Sign up