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

"Создание монолитного блока по внешним габаритам"

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

В предыдущих уроках мы освоили ключевые инструменты build123d: создание примитивов, их модификацию с помощью булевых операций, точное позиционирование и, наконец, эффективное создание массивов с помощью паттернов. Теперь у нас есть все необходимые базовые навыки, чтобы приступить к нашей главной задаче — проектированию корпуса для электроники.

Как и было анонсировано, сегодня мы начинаем работу над самим корпусом. Цель этого урока — спроектировать монолитный блок, который будет определять внешние габариты нашего будущего устройства. Это первый и очень важный шаг в методологии проектирования "сверху-вниз" (top-down), которую мы будем использовать.

1. Стратегия проектирования "сверху-вниз"

Вместо того чтобы строить корпус "снизу-вверх", создавая отдельные стенки и соединяя их, мы начнем с цельного блока и будем "удалять" из него лишний материал. Представьте, что мы скульптор, который начинает с глыбы мрамора и отсекает все ненужное, чтобы получить желаемую форму.

Этот подход имеет несколько преимуществ, которые особенно ценны в CAD-as-code:

  • Надежность: Все элементы корпуса (основание, крышка, стойки) будут происходить из одного "мастер-тела". Это гарантирует, что они идеально сойдутся при сборке.
  • Простота управления: Легче контролировать общие габариты и форму, изменяя параметры исходного блока, чем редактировать каждую стенку по отдельности.
  • Логичность: Мы сначала определяем внешнее пространство, которое займет наше устройство, а затем прорабатываем внутреннее устройство.

Итак, наша первая задача — создать ту самую "глыбу мрамора".

2. Определение габаритов и создание блока

Любой корпус проектируется для чего-то. В нашем случае — для печатной платы (PCB). Поэтому внешние размеры корпуса напрямую зависят от размеров платы и необходимых зазоров для стенок, компонентов и крепежа.

Давайте создадим новый файл enclosure_v1.py и определим в нем параметры нашего будущего корпуса. На данном этапе мы зададим их как константы, но в будущем сможем сделать их зависимыми от размеров конкретной платы.

# enclosure_v1.py
from build123d import *

# ================== ПАРАМЕТРЫ ==================
# Внешние габариты будущего корпуса в миллиметрах
enclosure_length = 100.0
enclosure_width = 70.0
enclosure_height = 35.0

# ================== ПРОЕКТИРОВАНИЕ ==================
# Создаем монолитный блок.
# Используем align, чтобы отцентровать его относительно начала координат.
# Это стандартная и очень удобная практика.
solid_block = Box(
    length=enclosure_length,
    width=enclosure_width,
    height=enclosure_height,
    align=(Align.CENTER, Align.CENTER, Align.CENTER)
)

# ================== ВИЗУАЛИЗАЦИЯ ==================
# Проверяем, что получилось
if "show_object" in locals():
    show_object(solid_block, name="Monolithic Block")

Запустите этот код. Вы увидите простой прямоугольный параллелепипед. Это и есть наш исходный монолитный блок.

Ключевые моменты в коде:

  1. Параметризация: Все размеры вынесены в переменные в начале файла. Это отличная практика, позволяющая легко изменять дизайн. Если нам понадобится корпус другого размера, мы просто изменим значения enclosure_length, enclosure_width и enclosure_height.
  2. Box: Для создания блока мы используем самый прямой и очевидный инструмент — примитив Box. Хотя того же результата можно было бы добиться, нарисовав Rectangle в BuildSketch и затем применив extrude, для такой простой формы Box является более лаконичным решением.
  3. align=(Align.CENTER, Align.CENTER, Align.CENTER): Этот параметр чрезвычайно важен. Он центрирует наш объект по осям X, Y и Z относительно начала координат. Работа с симметричными, отцентрованными объектами значительно упрощает последующие операции, такие как зеркальное отражение, позиционирование внутренних компонентов и создание симметричных вырезов.

Этот простой блок — фундамент всего нашего проекта. На следующих этапах мы превратим его в полый корпус, разделим на части и добавим все необходимые функциональные элементы.

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

Представьте, что вы проектируете корпус для печатной платы, похожей на ту, что изображена на рисунке.

3D CAD Model of a Circuit Board
Пример печатной платы (PCB), для которой может понадобиться корпус.

Допустим, размеры этой платы — 85 мм в длину и 56 мм в ширину. Самый высокий компонент на плате имеет высоту 12 мм.

Задание:
На основе этих данных, спроектируйте монолитный блок для корпуса. При расчете габаритов блока руководствуйтесь следующими требованиями к зазорам (clearances):

  • 3 мм зазора между платой и каждой из боковых стенок (слева, справа, спереди, сзади).
  • 5 мм зазора между платой и дном корпуса.
  • 8 мм зазора между верхушкой самого высокого компонента и крышкой корпуса.

Напишите код на build123d, который вычисляет итоговые размеры блока и создает его.

Показать решение
# exercise_solution.py
from build123d import *

# ================== ИСХОДНЫЕ ДАННЫЕ ==================
pcb_length = 85.0
pcb_width = 56.0
pcb_max_height = 12.0

# ================== ТРЕБОВАНИЯ К ЗАЗОРАМ ==================
side_clearance = 3.0
bottom_clearance = 5.0
top_clearance = 8.0

# ================== РАСЧЕТ ГАБАРИТОВ КОРПУСА ==================
# Длина корпуса = длина платы + зазор слева + зазор справа
enclosure_length = pcb_length + 2 * side_clearance

# Ширина корпуса = ширина платы + зазор спереди + зазор сзади
enclosure_width = pcb_width + 2 * side_clearance

# Высота корпуса = зазор снизу + высота платы с компонентами + зазор сверху
enclosure_height = bottom_clearance + pcb_max_height + top_clearance

# ================== ПРОЕКТИРОВАНИЕ ==================
# Создаем монолитный блок с рассчитанными размерами
calculated_block = Box(
    length=enclosure_length,
    width=enclosure_width,
    height=enclosure_height,
    align=(Align.CENTER, Align.CENTER, Align.CENTER)
)

# ================== ВИЗУАЛИЗАЦИЯ ==================
print(f"Рассчитанные габариты корпуса: {enclosure_length} x {enclosure_width} x {enclosure_height} мм")

if "show_object" in locals():
    show_object(calculated_block, name="Calculated Monolithic Block")

# Ожидаемый результат:
# Рассчитанные габариты корпуса: 91.0 x 62.0 x 25.0 мм

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

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

  • Мы начали проектирование корпуса, используя методологию "сверху-вниз", которая повышает надежность и упрощает управление дизайном.
  • Первым шагом этой методологии является создание монолитного блока, определяющего внешние габариты.
  • Использование параметров (переменных) для всех размеров — критически важная практика для создания гибких и легко изменяемых моделей.
  • Центрирование основного тела относительно начала координат является хорошим тоном и упрощает дальнейшую работу.

Что дальше?

Наш проект пока представляет собой просто кирпич. В следующем уроке мы сделаем самый важный шаг — превратим этот сплошной блок в тонкостенную полую коробку. Для этого мы изучим операцию thicken, которая является одним из самых мощных инструментов для создания корпусов.

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

Sign up