Справочник (шпаргалка) по OpenSCAD
Данный пост поможет вам максимально быстро изучить основы OpenSCAD и разработать свою модель. Используйте содержание, для быстрого перехода к разделу поста.
Для более полной информации обращайтесь в справочник разработчиков OpenSCAD — ссылка
Фигуры
Трансформация
ПЕРЕМЕЩЕНИЕ
ПОВОРОТ
МАСШТАБИРОВАНИЕ
ОБЪЕДИНЕНИЕ
РАЗНОСТЬ ФИГУР
ПЕРЕСЕЧЕНИЕ ФИГУР
ВЫПУКЛАЯ ОБОЛОЧКА
Выдавливание
В OpenSCAD используются следующие фигуры:
КУБ
cube([длина,ширина,высота], центр_куба_в_нуле? (true/false))
Если центр_куба_в_нуле? — false, то одна из вершин куба будет в нуле.
Пример
1 |
cube([15,5,10],false); |
СФЕРА
sphere(радиус,$fn=разрешение);
Чем выше разрешение, тем меньше полигональность (гладкость) сфера.
Пример
1 |
sphere(10,$fn=500); |
ЦИЛИНДР
cylinder(высота,радиус_основания,радиус крышки,$fn=разрешение);
Пример
1 |
cylinder(20,10,10,$fn=300); |
МНОГОУГОЛЬНИК
polyhedron(points=[ [x,y,z],[координаты точки], .. ],faces = [ [ n1,n2,n3], [номера точек],..]);
В параметре points в скобках [] указываются координаты точек, а в faces номера (нумеруются с 0) точек для объединения в плоскость.
Пример
1 2 3 4 5 6 7 8 |
polyhedron( points=[ [10,10,0],[10,-10,0], [-10,-10,0],[10,-10,10]], faces=[ [0,1,2],[0,1,3], [1,2,3],[0,2,3] ] ); |
ТЕКСТ
text(текст,размер,шрифт);
Список доступных шрифтов, можно посмотреть в Справка -> Список шрифтов.
Пример
1 |
text("текст",6,"Arial:style=Black"); |
OpenSCAD позволяет производить следующую трансформацию над фигурами:
ПЕРЕМЕЩЕНИЕ
translate(v = [переместить_x, переместить_y, переместить_z]) { код_фигуры }
Пример, поднимем параллелепипед на 3 единицы, сместим по х на 7, по y на 5.
1 |
translate(v = [7,5,3]) {cube([15,5,10],false);} |
ПОВОРОТ
rotate([градус_вокруг_x, градус_вокруг_y, градус_вокруг_z]) { код_фигуры }
Пример, развернем параллелепипед на 15 градусов вокруг ось x, -20 градусов вокруг ось y, 30 градусов вокруг ось z.
1 |
rotate([0, -20, 30]) {cube([15,5,10],false);} |
МАСШТАБИРОВАНИЕ
scale([длина, ширина, высота]) { фигура )
1 2 3 |
scale([1, 2, 3]) { sphere(10,$fn=300); } |
В скобках указываются параметры масштабирования по длине, ширине и высоте. В данном случае по длине изменений не будет (т.к. 1), глубина измениться в два раза, а высота в три раза.
ОБЪЕДИНЕНИЕ
union() { фигура_1; фигура_2; и т.д.)
1 2 3 4 |
union() { cube([15,5,10],true); sphere(5, $fn=200); } |
РАЗНОСТЬ ФИГУР
difference() { фигура_1; фигура_2; и т.д.)
От фигуры_1 отнимается фигура_2, очередность важна
1 2 3 4 |
difference() { cube([15,5,10],true); sphere(5, $fn=200); } |
ПЕРЕСЕЧЕНИЕ ФИГУР
intersection() { фигура_1; фигура_2;)
Результат — пересечение фигуры_1 и фигуры_2
1 2 3 4 |
intersection() { cube([15,5,10],true); sphere(5, $fn=150); } |
«ВЫПУКЛАЯ ОБОЛОЧКА»
Что это? См. статью в википедии.
hull() { фигура_1; фигура_2; фигура_3; и т.д.}
Результат — будет создана трехмерная фигура в которую помещаются перечисленные фигуры.
1 2 3 4 |
hull() { translate([15,10,0]) cube([15,5,10],false); cube([15,5,10],false); } |
В OpenScad можно создавать 3D фигуры методом выдавливания (extrude).
Перед изучением выдавливания, полезно знать команды для построения простейших 2D фигур.
Окружность — circle(радиус);
Прямоугольник — square([длина, глубина]);
Полигон — polygon( [[x,y,z],[координаты точки], .. ],[[номера точек для соединения]]);
ЛИНЕЙНОЕ ВЫДАВЛИВАНИЕ
Суть линейного выдавливания заключается в том, что 2d фигуру вытягивают по оси z.
linear_extrude(высота, twist = угол_поворота, slices = количетсво_слоев, scale = масштаб) { фигура; }
Параметр twist позволяет закручивать фигуру при вытяжение вокруг оси Z.
Параметр scale увеличивает размер каждого следующего слоя. Коэффициент scale, говорит о том, что первый слой и последний слой будут отличается в scale раз.
За «гладкость» отвечает slices, чем больше слоев, тем более гладкая результирующая фигура.
Если вы используете twist, фигура выполняет разворот вокруг оси z, в координатах x=0 и y=0;
Пример:
1 2 3 |
linear_extrude(100, twist = 180, slices = 100, scale = 1.0) { square(20); } |
Как пример воспользуемся масштабом — scale. Пусть край закрученной фигуры будет больше основания в 2 раза.
Пример:
1 2 3 |
linear_extrude(100, twist = 180, slices = 100, scale = 2) { square(20); } |
Последний пример, уменьшим количество слоев. Пусть на фигура будет состоять из 3-ех слоев.
Пример:
1 2 3 |
linear_extrude(100, twist = 180, slices = 3, scale = 2) { square(20); } |
Для более наглядной формы, пунктирной линей я разметил слои.
ВЫДАВЛИВАНИЕ ВРАЩЕНИЕМ
Суть выдавливания вращением заключается в том, что 2d фигуру растягивают вокруг оси z.
rotate_extrude(angle = градусы) { фигура; }
Параметр angle определяет угол вокруг оси z, на сколько фигура должна растянуться, по умолчанию это значение 360.
Как это работает?
Допустим у нас есть фигура — прямоугольник:
При выдавливание вращением, 2d фигура разворачивается перпендикулярно поверхности XY:
Далее 2d фигура растянется вокруг оси z на 360 градусов, т.е. итог будет выглядеть так:
Пример:
1 2 3 |
rotate_extrude(angle = 360, $fn=200) { translate ([10,0,0]) square(20); } |
ИМПОРТИРОВАНИЕ STL ФАЙЛОВ
В OpenScad можно работать с готовыми 3D моделями, например с stl файлами, т.к. они чаще всего используются для 3d печати.
Иногда stl модель не помешается на стол 3d принтера и её необходимо разрезать на части, для последующей склейки.
Например, мне нужно по частям напечатать защитный кожух для велосипеда, который одевался на переднюю звездочку.
Сначала мы импортируем stl модель в OpenScad, далее выделим из неё отдельные части.
Как импортировать stl модель?
import_stl(«имя_файла.stl«, convexity = 5);
1 |
import_stl("D:/chainprotector.stl", convexity = 5); |
Создадим фигуру — маску, в виде приплюснутого куба, которая будет пересекаться с той частью stl, которую мы хотим напечатать
1 2 3 4 |
rotate([0,0,30]) import_stl("D:/chainprotector.stl", convexity = 5); translate([-100,0,0]) cube([100,100,30]); |
Фигуру stl я развернул на 30 градусов, иначе место сечения находится рядом с монтажными отверстиями, что плохо.
Используем операцию пересечения фигур — intersection.
1 2 3 4 5 6 |
intersection() { rotate([0,0,30]) import_stl("D:/chainprotector.stl", convexity = 5); translate([-100,0,0]) cube([100,100,30]); } |
Печатаем результат, двигаем маску и получаем другие фрагменты данной stl модели.
Вам будет интересно:
Буду признателен если вы поделитесь данным постом