По статистике одной из самых первых поделок для дома, создаваемых на 3D принтере является цветочный горшок. Изготовление цветочных горшков является увлекательным и творческим занятием, которое может приносить много удовольствия. В этой статье мы рассмотрим, как использовать программу OpenSCAD для создания простого цветочного горшка и создадим параметрический модуль цветочного горшка.
OpenSCAD – это мощное программное обеспечение для 3D-моделирования, которое позволяет создавать сложные детали и формы. Мы расскажем о шагах по созданию цветочного горшка в OpenSCAD, а также обсудим его возможности. Давайте начнем этот увлекательный процесс и посмотрим, как можно воплотить свои идеи в реальность с помощью OpenSCAD.
OpenSCAD: создание цветочного горшка
Для начала определимся с дизайном, для простоты решения возьмем горшок, у которого ширина нижней части, совпадает с верхней. Также мы сможем настраивать количество граней горшка от 3 до 360 ( т.е. полноценного круга). А также мы сможем управлять количеством дренажных отверстий в горшке.
Для начала рассмотрим параметры, используемые для настройки горшка. К настраиваемым параметрам мы отнесем: диаметр горшка, высоту, количество граней, ширину стенки горшка, количество дренажных отверстий.
// Модуль горшок GDiamtr = 70; // диаметр горшка, GHeight = 60; // высота, GGranes = 8; // количество граней, GWwidth = 2; // ширина стенки, GHoles = 8; // количество дренажных отверстий по периферии, не считая одного по центру
Следующим шагом напишем модуль для создания горшка.
Кстати, Вы знаете чем отличается модуль от функции в OpenScad? Если нет, то рекомендую ознакомиться с материалом: Разница между модулем и функцией в OpenSCAD
Из базовой формы цилиндра мы вычтем другой цилиндр, получим базовую форму горшка, а затем из нее вычтем “дырки”, описываемые за счет мелких циллиндров.
module Gorshok( Diametr, gHeight, gGranes, gWWidth, gHoles=8){
difference(){
// базовая форма горшка
cylinder(gHeight, d=Diametr, $fn=gGranes);
// вычитаем уменьшенный в размере цилиндр
translate([0,0,gWWidth])
cylinder(gHeight, d=Diametr-2*gWWidth, $fn=gGranes);
// создаем дырки в горшке
$fn=36;
// центральная дырка
cylinder(gWWidth*2 ,d=5, center = true);
// периферические дырки
for (i= [0: 360/gHoles: 360]){
rotate( i, [0,0,1]){
translate([Diametr/4, 0, 0])
cylinder(gWWidth*2, d=3, center = true); //gWWidth
}
}
}
}
Рассмотрим подробнее код модуля.
Шаг 1. Создание базовой формы
Для начала создадим базовую форму:
cylinder(gHeight, d=Diametr, $fn=gGranes);
Функции цилиндр мы передаем параметры высоты, диаметра и количество граней, которое задается через специальную переменную $fn. В данном случае $fn=8, и мы получаем восьмиугольник.

Варианты фигур в зависимости от настройки параметра $fn:
- $fn = 3 – треугольник
- $fn = 4 – квадрат
- $fn = 5 – пятиугольник
- $fn = 6 – шестиугольник
- $fn = 8 – восьмиугольник
- $fn = ….
- $fn = от180 до 360 – круг
Шаг 2. Создание собственно горшка
Для создания горшка, вычтем меньший по размеру цилиндр из базовой формы:
difference(){
// базовая форма горшка
cylinder(gHeight, d=Diametr, $fn=gGranes);
// вычитаем уменьшенный в размере цилиндр
translate([0,0,gWWidth])
cylinder(gHeight, d=Diametr-2*gWWidth, $fn=gGranes);
}
Обратите внимание, что вычитаемый цилиндр, мы смещаем вверх на высоту gWWidth – равную толщине стенки горшка:
translate([0,0,gWWidth])
Диаметр вычитаемого цилиндра у нас равен Diametr-2*gWWidth, т.е. диаметру базового горшка минус две толщины стенки горшка.
Таким образом, мы получаем базовую форму с толщиной стенки равной gWWidth :

Шаг 3. Создание дренажных отверстий
Для создания дренажных отверстий используем форму циллиндра, предварительно задав количество граней, равное 36 ($fn=36;) :
// создаем дырки в горшке
$fn=36;
// центральная дырка
cylinder(gWWidth*2 ,d=5, center = true);
// периферические дырки
for (i= [0: 360/gHoles: 360]){
rotate( i, [0,0,1]){
translate([Diametr/4, 0, 0])
cylinder(gWWidth*2, d=5, center = true); //gWWidth
}
}
Далее вычитаем центральную дырку, где высота gWWidth*2 ( в 2 раза больше толщины стенки горшка, чтобы гарантировано получить сквозное отверстие), диаметр дырки равен 5мм ( на мой взгляд оптимальный параметр для большинства горшков), а сам цилиндр отцентрован по центру:
cylinder(gWWidth*2, d=5, center = true);
Следующий блок, описывает создание аналогичных цилиндров в цикле For:
// Определяем размер шага в градусах: 360 разделить на число дырок,
for (i= [0: 360/gHoles: 360]){
// поворачиваем по оси z [x,y,z] на количество градусов i* шаг
rotate( i, [0,0,1]){
// перемещаем дырку на 1/2 от радиуса горшка
translate([Diametr/4, 0, 0])
cylinder(gWWidth*2, d=5, center = true); //gWWidth
}
}
Здесь в цикле мы определяем величину размера шага в градусах: 360 разделить число дырок, при значении в 6, шаг составит 60 градусов ( 360:6), таким образом i последовательно принимать значения : 0, 0, 60, 120, 180, 240, 300 пока не дойдет до конечных 360 (360=0).
Соответственно, каждый модуль цилиндра, аналогичный центральному подвергается двум модификациям:
- сначала при помощи модификатора translate() смещается по оси Х на расстояние равное половине радиуса горшка ( диаметр равен 2 радиусам, соотвенно половина радиуса – это 1\4 диаметра горшка),
- затем поворачивается по оси z [x,y,z] на количество градусов i* шаг, т.е. первый на 0, второй на 60 градусов и т.д.
Таким образом количество дырок у нас составляет gHoles+1.

Итоговый модуль цветочного горшка
Итоговый модуль цветочного горшка выглядит так:
// Модуль горшок
GDiamtr = 70;
GHeight = 60;
GGranes = 8;
GWwidth = 2;
GHoles = 8;
module Gorshok( Diametr, gHeight, gGranes, gWWidth, gHoles=8){
difference(){
// базовая форма горшка
cylinder(gHeight, d=Diametr, $fn=gGranes);
// вычитаем уменьшенный в размере цилиндр
translate([0,0,gWWidth])
cylinder(gHeight, d=Diametr-2*gWWidth, $fn=gGranes);
// создаем дырки в горшке
$fn=36;
// центральная дырка
cylinder(gWWidth*3,d=5, center = true);
// Определяем размер шага в градусах: 360 разделить на число дырок,
for (i= [0: 360/gHoles: 360]){
// поворачиваем по оси z [x,y,z] на количество градусов i* шаг
rotate( i, [0,0,1]){
// перемещаем дырку на 1/2 от радиуса горшка
translate([Diametr/4, 0, 0])
cylinder(gWWidth*3, d=5, center = true); //gWWidth
}
}
}
}
Gorshok(GDiamtr, GHeight, 4, GWwidth, 4);
translate([- 70,0,0])
Gorshok(GDiamtr, GHeight, 6, GWwidth, 6);
translate([ 70,0,0])
Gorshok(GDiamtr, GHeight, 8, GWwidth, 8);
translate([ 140,0,0])
Gorshok(GDiamtr, GHeight, 360, GWwidth, 8);
translate([ -140,0,0])
Gorshok(GDiamtr, GHeight, 3, GWwidth, 3);

Заключение
В этой статье мы рассмотрели процесс создания цветочного горшка в программе OpenSCAD и обсудили ключевые возможности этого удивительного инструмента для 3D-моделирования. Созданный нами модуль можно дополнительно доработать, добавив параметры по умолчанию для дренажных отверстий, но оставим Вам данную работу для самостоятельного решения.
Благодаря OpenSCAD каждый может стать дизайнером собственного цветочного горшка и воплотить в жизнь свои творческие идеи. Надеемся, что эта статья поможет вам вдохновиться и начать создавать уникальные садовые украшения с помощью OpenSCAD!







