Параллелепипед с длинами сторон по X, Y, Z соответственно 10, 20, 30 в мм:
cube( size=[10,20,30], center=true );true/false - располагать по центру или в положительных полуосях. Короткие варианты написания кода:
cube( [10, 20, 30], true );cube( [10, 20, 30] );если последний параметр не указан принимает значение false
a = [10, 15, 20]; cube(a);здесь a - параметр (матрица) содержит в себе значение сторон
cube( 5 );куб стороной 5мм в положительных полуосях;
Сфера радиусом 8 мм, с разным разрешением $fn.
sphere(r=8, $fn=100); // Полное написаниеsphere(8, $fn=20); // Короткое написаниеsphere(8, $fn=4);sphere(8, $fn=5);Центр сферы всегда в начале координат.
Вместо $fn можно задать параметр $fa - угловое разрешение и $fs - размер грани в мм.
sphere(d=16, $fn=100); // Задать сферу через диаметрЧерез цилиндр можно задать конус, усечённый конус, пирамиду, усечённую пирамиду. Первый параметр высота цилиндра, следующие это нижний радиус, верхний радиус, центровка и число граней $fn.
cylinder(h=10, r1=8, r2=5, center=true, $fn=100); // полное написаниеcylinder(10, 8, 0, true, $fn=100); // краткое написаниеcylinder(10, 8, 8, true, $fn=100);cylinder(10, 8, 5, true, $fn=4);Варианты написания:
cylinder(h=10, d1=16, d2=10, true, $fn=100);// через диаметры основанийcylinder(h=10, r1=8, d2=10, true, $fn=100);// через радиус и диаметр онованийcylinder(h=10, r=8, true, $fn=100);// если нужен просто цилиндрМногогранник.
Через эту функцию можно задать любую поверхность. На практике используется редко. Почему? Думаю поймёте сами.
Постройка пирамиды.
Что требуется? Задать все вершины фигуры (points) в координатах [x, y, z]. Затем объединить в группу по 3 - получить треугольники, играющие роль граней (faces) многогранника.
polyhedron( points=[ [10,10,0], [10,-10,0], [-10,-10,0], [-10,10,0], [0,0,10] ], faces=[ [0,1,4], [1,2,4], [2,3,4], [3,0,4], [1,0,3], [2,1,3] ] );Точки (points) с координатой z=0 - это вершины основания пирамиды, a последняя с x=0, y=0, z=10 - это пик пирамиды.
Грани (faces) [0,1,4], [1,2,4], [2,3,4], [3,0,4] - это боковые треугольные грани, а последние две [1,0,3], [2,1,3] задают квадрат основания. Цифры в квадратных скобках, говорят какие точки объединить. Соответственно точки по порядку их следования 0 -> [10,10,0] , 1 -> [10,-10,0] и т.д.
Перемещение объекта на x=10, y=10, z=0 относительно центра координат:
translate([10,10,0]) cube(10, true);Если нужно переместить группу объектов заключаем их в фигурные скобки:
translate([10,10,0]) {/*Здесь код группы*/};Применение нескольких вложенных переносов:
translate([10,10,0]) { cube(10, true); translate([0,0,5]) sphere(5, $fn=50);};Эквивалент примера выше:
translate([10,10,0]) cube(10, true);translate([10,10,5]) sphere(5, $fn=50);Вращение.
На 75 градусов вокруг оси X:
rotate([75,0,0]) cube(10, true);Вращение группы объектов:
rotate([75,0,0]){/*Здесь код группы*/};Вращение + перемещение.
Две нижние строчки:
color([0,1,1]) translate([0,0,15]) rotate([75,0,0]) cube(10, true);color([1,0,1]) rotate([75,0,0]) translate([0,0,15]) cube(10, true);Дают разные результаты. Имеет значение последовательность действий. Бирюзовый куб сначала повёрнут на 75 градусов вокруг оси X, а потом смещён на 15 мм по оси z. Сиреневый куб сначала смещён на 15 мм, а потом повёрнут.
Сложение (объединение).
union(){ cylinder(30, 5, 5, true, $fn=50); rotate([60,0,0]) cylinder(30, 5, 5, true, $fn=50);};Любое количество простых или сложных объектов в фигурных скобках будут объединены.
Вычитание (разность).
Из простого объекта указанного первым будут вычитаться все что указано ниже него.
difference(){ cylinder(30, 5, 5, true, $fn=50); rotate([60,0,0]) cylinder(30, 5, 5, true, $fn=50);};Из составного объекта указанного первым будут вычитаться все что указано ниже него.
difference(){ union(){cylinder(30, 5, 5, true, $fn=50); cube(10, true);}; rotate([60,0,0]) cylinder(30, 5, 5, true, $fn=50);};Произведение (пересечение). У объектов внутри фигурных скобок находится общая часть - она и остаётся.
intersection(){ cylinder(30, 5, 5, true, $fn=50); rotate([60,0,0]) cylinder(30, 5, 5, true, $fn=50);};Чтобы сделать объект видимым или прозрачным при вычитании или пересечении, достаточно поставить решётку перед фигурой, объединением и т.п. Модификатор очень удобен при отладке модели, когда не видно вычитаемых, пересекаемых фигур или если нужно заглянуть внутрь создаваемой модели.
translate([10,0,0]) difference(){ cylinder(30, 5, 5, true, $fn=50); rotate([60,0,0]) #cylinder(30, 5, 5, true, $fn=50);};или
translate([-10,0,0]) intersection(){ #cylinder(30, 5, 5, true, $fn=50); rotate([60,0,0]) cylinder(30, 5, 5, true, $fn=50);};Сжатие. Растяжение.
scale([2,2,0.5]) sphere(8, $fn=30);Соответственно по оси X и Y сферу растянули в 2 раза, а по оси Z сжали в 2 раза.
Исходный цилиндр.
cylinder(10, 25, 25, true, $fn=200);Срезаем острую грани цилиндра - найдя общую часть цилиндра и сплюснутой сферы.
intersection(){ cylinder(10, 25, 25, true, $fn=200); scale([2.5,2.5,1])sphere(10.5, $fn=200);}; Имитируем диск колеса. С боковой поверхности вычитаем сжатую сферу.
difference(){ intersection(){ cylinder(10, 25, 25, true, $fn=200); scale([2.5,2.5,1])sphere(10.5, $fn=200); }; translate([0, 0, 12]) scale([2.5,2.5,1])sphere(10.5, $fn=200);};Вырезаем ось колеса.
difference(){ intersection(){ cylinder(10, 25, 25, true, $fn=200); scale([2.5,2.5,1])sphere(10.5, $fn=200); }; // боковая сферическая выемка translate([0, 0, 12]) scale([2.5,2.5,1])sphere(10.5, $fn=200); // ось колеса cylinder(11, 2.5, 2.5, true, $fn=20);}; Так как спиц будет 12, чтобы не переписывать один и тот же код 12 раз применим - цикл.
Цикл for(i=[1:12]){...};. Внутри фигурных скобок - код который будет повторяться. Переменная i принимает значения от 1 до 12.
difference(){ intersection(){ cylinder(10, 25, 25, true, $fn=200); scale([2.5,2.5,1])sphere(10.5, $fn=200); }; // боковая сферическая выемка translate([0, 0, 12]) scale([2.5,2.5,1])sphere(10.5, $fn=200); // ось колеса cylinder(11, 2.5, 2.5, true, $fn=20); // спицы for(i=[1:12]){ rotate([0,0,i*30]) translate([13,0,0]) scale([3,1,1]) cylinder(11, 2, 2, true, $fn=50); };};Аналогично с помощью цикла, добавляем рисунок протектора.
difference(){ intersection(){ cylinder(10, 25, 25, true, $fn=200); scale([2.5,2.5,1])sphere(10.5, $fn=200); }; // боковая сферическая выемка translate([0, 0, 12]) scale([2.5,2.5,1])sphere(10.5, $fn=200); // ось колеса cylinder(11, 2.5, 2.5, true, $fn=20); // спицы for(i=[1:12]){ rotate([0,0,i*30]) translate([13,0,0]) scale([3,1,1]) cylinder(11, 2, 2, true, $fn=50); }; // протектор for(i=[1:36]){ rotate([0,0,i*10]) translate([30,0,0]) scale([3,1,1]) cylinder(11, 2, 2, true, $fn=50); };};