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

Создание параметрического Box с переменными размерами

Recommended resources

The freely available resources this lesson will direct you to.

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

В предыдущем уроке мы настроили полноценный рабочий процесс: создали 3D-объект в коде и наладили его мгновенную визуализацию в OCP CAD Viewer с автоматическим обновлением. Теперь у нас есть быстрый и удобный цикл "код -> модель", который идеально вписывается в вашу привычную среду tmux и Helix.

Однако наш куб пока что "статичен" — его размеры жестко прописаны в коде (Box(40, 20, 10)). Это неудобно, если нам понадобится изменить модель.

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

Что такое параметрическое моделирование?

В контексте CAD параметрический дизайн — это подход, при котором геометрия модели определяется набором параметров (переменных) и отношений между ними. Вместо того чтобы задавать длину объекта числом 100, вы задаете ее через переменную length = 100.

Преимущества такого подхода вам, как опытному разработчику, должны быть очевидны:

  • Гибкость: Чтобы изменить размер корпуса под новую печатную плату, достаточно поменять значения нескольких переменных в одном месте, а не искать "магические числа" по всему коду.
  • Читаемость: Код Box(length, width, height) гораздо понятнее, чем Box(68, 52, 25).
  • Масштабируемость: На основе базовых параметров можно вычислять размеры зависимых элементов, создавая сложные и логически связанные сборки.
3D-Printed Parametric Enclosure
Пример параметрического корпуса, напечатанного на 3D-принтере. Его размеры можно легко изменить, поменяв всего несколько переменных в коде.

От жестких размеров к переменным

Давайте модифицируем код из предыдущего урока. Создайте новый файл lesson3_parametric_box.py и скопируйте в него содержимое из lesson1_box.py (или lesson2_box.py, если вы его так назвали). Изначально он выглядит примерно так:

# lesson3_parametric_box.py
from build123d import Box, show_object

my_box = Box(40, 20, 10)

show_object(my_box, name="Мой бокс")

Шаг 1: Введение простых переменных

Первый и самый очевидный шаг — вынести размеры в переменные. Это стандартная практика для любого чистого кода.

# lesson3_parametric_box.py
from build123d import Box, show_object

# --- Параметры модели ---
length = 40.0
width = 20.0
height = 10.0

# --- Создание геометрии ---
my_box = Box(length, width, height)

show_object(my_box, name="Параметрический бокс")

Примечание: в CAD-моделировании принято использовать числа с плавающей точкой (float) для размеров, чтобы избежать неожиданного целочисленного деления при расчетах.

Теперь, если вы измените значение, например, length = 60.0 и сохраните файл, watchexec перезапустит скрипт, и вы увидите в браузере обновленную, вытянутую модель. Это уже параметрический дизайн в его простейшей форме.

Практическое применение: проектируем блок под плату

Давайте сразу применим этот подход к вашей основной задаче — созданию корпуса. Представим, что у вас есть печатная плата (PCB) размером 65x50 мм. Корпус должен быть больше, чтобы вместить плату, и иметь стенки определенной толщины.

Мы можем определить итоговые размеры корпуса, основываясь на размерах платы и конструктивных параметрах.

Измените ваш скрипт lesson3_parametric_box.py следующим образом:

# lesson3_parametric_box.py
from build123d import Box, show_object

# --- Ключевые параметры ---
# Размеры печатной платы (PCB)
pcb_length = 65.0
pcb_width = 50.0

# Конструктивные параметры корпуса
wall_thickness = 1.6  # Толщина стенки (типичное значение для 2-4 периметров при сопле 0.4 мм)
clearance = 1.0       # Зазор между платой и внутренней стенкой корпуса

# --- Расчетные размеры ---
# Внутренние размеры полости корпуса
inner_length = pcb_length + 2 * clearance
inner_width = pcb_width + 2 * clearance

# Внешние габариты всего корпуса
enclosure_length = inner_length + 2 * wall_thickness
enclosure_width = inner_width + 2 * wall_thickness
enclosure_height = 20.0 # Пока зададим произвольную высоту

# --- Моделирование ---
# Сейчас мы создаем только монолитный блок с внешними габаритами.
# В будущих уроках мы сделаем его полым.
enclosure_block = Box(
    length=enclosure_length, 
    width=enclosure_width, 
    height=enclosure_height
)

show_object(enclosure_block, name="Заготовка корпуса")

Что мы здесь сделали:

  1. Определили исходные данные: размеры платы (pcb_length, pcb_width).
  2. Ввели конструктивные параметры: толщину стенок (wall_thickness) и зазоры (clearance).
  3. Вычислили производные размеры: габариты корпуса (enclosure_length, enclosure_width) были вычислены на основе исходных данных и параметров.
  4. Создали Box с использованием именованных аргументов для лучшей читаемости.

Теперь у вас есть параметрическая заготовка корпуса. Если вы получите новую версию платы с размерами 70x45 мм, вам нужно будет изменить только две строки в секции Ключевые параметры, и вся модель автоматически пересчитается.

Организация параметров

Для более сложных проектов с десятками параметров простые переменные могут загромождать код. Как и в любом Python-проекте, их можно сгруппировать. Например, с помощью словаря:

# Альтернативный способ организации параметров
params = {
    "pcb_length": 65.0,
    "pcb_width": 50.0,
    "wall_thickness": 1.6,
    "clearance": 1.0,
    "height": 20.0
}

# Расчеты с использованием словаря
inner_l = params["pcb_length"] + 2 * params["clearance"]
# ... и так далее

Для еще более структурированного подхода в сложных проектах используют классы (например, dataclasses из стандартной библиотеки Python) или специализированные решения. Чтобы увидеть пример такого подхода, вы можете взглянуть на документацию библиотеки build123things, которая является надстройкой над build123d.

comrob/build123things

Взгляните на небольшой фрагмент из документации к библиотеке build123things. Он демонстрирует, как параметры (param_1) могут передаваться в __init__ класса для создания параметрической модели Box. Это хороший пример структурированного подхода, который может быть полезен в будущем.

Найдите раздел 'Getting Started'. Обратите внимание на пример кода с class MyDesign(Thing). Вам не нужно вникать в детали Thing или build123things, просто посмотрите, как параметр param_1 передается в конструктор и затем используется для создания build123d.Box.

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

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

Задание:
Модифицируйте текущий скрипт lesson3_parametric_box.py. Добавьте в секцию Ключевые параметры еще два:

  1. pcb_components_height = 12.0 (максимальная высота компонентов на плате).
  2. top_clearance = 3.0 (зазор над компонентами до крышки корпуса).

Затем измените строку, где определяется enclosure_height, так, чтобы она вычислялась на основе этих новых параметров, а также толщины дна и крышки (для простоты предположим, что они равны wall_thickness).

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

Нужно учесть высоту компонентов, зазор над ними, а также толщину материала корпуса снизу и сверху.

Новые параметры:

# --- Ключевые параметры ---
# ... (существующие параметры) ...
pcb_components_height = 12.0 # Высота компонентов на плате
top_clearance = 3.0          # Зазор над компонентами

Измененный расчет высоты:

# ... (существующие расчеты) ...

# Внутренняя высота полости = высота компонентов + зазор сверху
inner_height = pcb_components_height + top_clearance

# Внешняя высота корпуса = внутренняя высота + толщина дна + толщина крышки
enclosure_height = inner_height + 2 * wall_thickness 

Теперь высота корпуса также полностью параметрическая и зависит от высоты вашей электроники.

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

Сегодня мы сделали важнейший шаг от простого рисования к инженерному проектированию:

  • Мы освоили параметрический подход, используя переменные для управления размерами Box.
  • Поняли, как выносить ключевые параметры (размеры платы, толщина стенок) в отдельный блок для легкого доступа и модификации.
  • Создали первую версию параметрической заготовки для корпуса, размеры которой вычисляются на основе размеров внутреннего компонента (платы).

Этот подход — фундамент для создания сложных, но легко настраиваемых моделей.

Что дальше?

У нас есть параметрическая 3D-модель, но она пока существует только в памяти компьютера и в окне вьювера. Чтобы ее можно было напечатать, модель нужно сохранить в формате, понятном для 3D-принтеров. В следующем уроке мы научимся экспортировать нашу модель в формат STL, завершая тем самым базовый цикл "идея -> код -> модель -> файл для печати".

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

Sign up