Руководство пользователя по OpenSCAD/Двухмерные примитивы
Ко всем двухмерным примитивам могут быть применены трехмерные преобразований(translate, rotate, scale). Двухмерные примитивы могут быть преобразованы в трехмерные с помощью экструзии. Хотя двухмерные примитивы в теории бесконечно тонкие, в OpenSCAD они отображаются с толщиной 1 для удобства работы с ними.
Квадрат
правитьsquare()
создает квадрат или прямоугольник в первом квадранте. Когда значение center равно true, квадрат центрируется в начале координат. Имена аргументов являются необязательными, если они заданы в указанном здесь порядке.
square(size = [x, y], center = true/false); square(size = x , center = true/false);
- параметры:
- size
- одно значение, квадрат с всеми сторонами этой длины
- два значения массивом [x,y], прямоугольник с размерами x и y
- center
- false (по умолчанию), 1й (положительный) квадрант, один угол на (0,0)
- true, квадрат находится в центре (0,0)
- size
значения по умолчанию: square(); выводит: square(size = [1, 1], center = false);
- примеры:
равнозначные описания для этого примера square(size = 10); square(10); square([10,10]); . square(10,false); square([10,10],false); square([10,10],center=false); square(size = [10, 10], center = false); square(center = false,size = [10, 10] );
равнозначные описания для этого примера square([20,10],true); a=[20,10];square(a,true);
Круг
правитьcircle()
создает круг в начале координат. Все параметры, кроме r, должны быть названы.
circle(r=radius | d=diameter);
- параметры
- r : радиус круга. имя r является единственным необязательным с кругом.
- разрешение круга зависит от размера, использующего $fa или $fs.
- r : радиус круга. имя r является единственным необязательным с кругом.
- Для небольшого круга с высоким разрешением вы можете сделать большой круг, а затем уменьшить его, или вы можете установить $fn или другие специальные переменные. Примечание: Эти примеры превышают разрешение 3d-принтера, а также экрана дисплея.
scale([1/100, 1/100, 1/100]) circle(200); // создать круг с высоким разрешением радиусом 2. circle(2, $fn=50); // другой способ.
- d : диаметр круга (доступен только в версиях более поздних, чем 2014.03).
- $fa : минимальный угол (в градусах) каждого фрагмента.
- $fs : минимальная длина окружности каждого фрагмента.
- $fn : фиксированное количество фрагментов в 360 градусах. Значения 3 или более переопределяют значения $fa и $fs.
- $fa, $fs и $fn должны быть проименованы. нажмите здесь для больших подробностей.
значения по умолчанию: circle(); выводит: circle($fn = 0, $fa = 12, $fs = 2, r = 1);
равнозначные описания для этого примера circle(10); circle(r=10); circle(d=20); circle(d=2+9*2);
Эллипс
правитьЭллипс может быть создан из круга с использованием вместе с scale()
или resize()
чтобы сделать размеры x и y неравными.
Смотри OpenSCAD User Manual/Transformations
равнозначные описания для этого примера resize([30,10])circle(d=20); scale([1.5,.5])circle(d=20);
Правильный многоугольник
правитьПравильный многоугольник с 3 или более сторонами может быть создан с помощью circle()
с $fn, установленной на количество сторон. Следующие два отрывка кода равнозначны.
circle(r=1, $fn=4);
module regular_polygon(order = 4, r=1){ angles=[ for (i = [0:order-1]) i*(360/order) ]; coords=[ for (th=angles) [r*cos(th), r*sin(th)] ]; polygon(coords); } regular_polygon();
В результате получаются следующие фигуры, в которых многоугольник вписан в окружность со всеми равными сторонами (и углами). Один угол направлен в положительном направлении оси x. Для получения неправильных форм смотрите ниже примитив полигона.
описание для этих примеров translate([-42, 0]){circle(20,$fn=3);%circle(20,$fn=90);} translate([ 0, 0]) circle(20,$fn=4); translate([ 42, 0]) circle(20,$fn=5); translate([-42,-42]) circle(20,$fn=6); translate([ 0,-42]) circle(20,$fn=8); translate([ 42,-42]) circle(20,$fn=12); color("black"){ translate([-42, 0,1])text("3",7,,center); translate([ 0, 0,1])text("4",7,,center); translate([ 42, 0,1])text("5",7,,center); translate([-42,-42,1])text("6",7,,center); translate([ 0,-42,1])text("8",7,,center); translate([ 42,-42,1])text("12",7,,center); }
Многоугольник
правитьpolygon()
создает многогранную фигуру из списка координат x, y. Полигон - это самый мощный 2D-объект. Он может создать все, что могут круг и квадрат, а также многое другое. Это включает в себя неправильные формы как с вогнутыми, так и с выпуклыми краями. Кроме того, он может размещать отверстия в этой форме.
polygon(points = [ [x, y], ... ], paths = [ [p1, p2, p3..], ...], convexity = N);
- Пааметры
- points
- Лист x,y точек многоугольника. : Вектор из 2 простых векторов.
- Примечание: точки пронумерованы от 0 до n-1.
- paths
- default
- Если путь не указан, все точки используются в указанном порядке.
- single vector
- Порядок прохождения точек. Использует указатели от 0 до n-1. Может быть в другом порядке и использовать все или часть перечисленных пунктов.
- multiple vectors
- Создает первичные и вторичные очертания. Вторичные очертания вычитаются из первичного очертания (как
difference()
). Вторичные очертания могут быть полностью или частично в пределах первичных очертаний.
- Создает первичные и вторичные очертания. Вторичные очертания вычитаются из первичного очертания (как
- default
- Замкнутое очертание создается путем возврата от последней указанной точки к первой.
- convexity
- Целое число "внутренних" кривых, т. е. ожидаемых пересечений пути произвольной линии через многоугольник. Смотрите ниже.
значения по умолчанию: polygon(); выводит: polygon(points = undef, paths = undef, convexity = 1);
- Пример без отверстий
равнозначные описания для этого примера polygon(points=[[0,0],[100,0],[130,50],[30,50]]); polygon([[0,0],[100,0],[130,50],[30,50]], paths=[[0,1,2,3]]); polygon([[0,0],[100,0],[130,50],[30,50]],[[3,2,1,0]]); polygon([[0,0],[100,0],[130,50],[30,50]],[[1,0,3,2]]); a=[[0,0],[100,0],[130,50],[30,50]]; b=[[3,0,1,2]]; polygon(a); polygon(a,b); polygon(a,[[2,3,0,1,2]]);
- Пример с одним отверстием
равнозначные описания для этого примера polygon(points=[[0,0],[100,0],[0,100],[10,10],[80,10],[10,80]], paths=[[0,1,2],[3,4,5]],convexity=10); triangle_points =[[0,0],[100,0],[0,100],[10,10],[80,10],[10,80]]; triangle_paths =[[0,1,2],[3,4,5]]; polygon(triangle_points,triangle_paths,10);
1-й вектор пути [0,1,2], выбирает точки [0,0],[100,0],[0,100], для первичного очертания.
2-й вектор пути [3,4,5], выбирает точки [10,10],[80,10],[10,80], для вторичного очертания.
Вторичные очертания вычитаются из первичных ( словно difference()
).
Поскольку вторичные полностью находятся внутри первичных, они оставляют форму с отверстием.
- Пример с несколькими отверстиями
Шаблон:Requires (for use of concat()
)
//пример многоугольника с несколькими отверстиями a0 = [[0,0],[100,0],[130,50],[30,50]]; // основа b0 = [1,0,3,2]; a1 = [[20,20],[40,20],[30,30]]; // отверстие 1 b1 = [4,5,6]; a2 = [[50,20],[60,20],[40,30]]; // отверстие 2 b2 = [7,8,9]; a3 = [[65,10],[80,10],[80,40],[65,40]]; // отверстие 3 b3 = [10,11,12,13]; a4 = [[98,10],[115,40],[85,40],[85,10]]; // отверстие 4 b4 = [14,15,16,17]; a = concat (a0,a1,a2,a3,a4); b = [b0,b1,b2,b3,b4]; polygon(a,b); //подобно polygon(a,[b0,b1,b2,b3,b4]);
- convexity
Параметр convexity
(рус.:выпуклости) указывает максимальное количество лицевых сторон (задних сторон), через которые может проникнуть луч, пересекающий объект.
Этот параметр необходим только для корректного отображения объекта в режиме предварительного просмотра OpenCSG и не влияет на рендеринг многогранника.
На этом изображении показана двумерная фигура с convexity = 4
, так как луч, обозначенный красным, пересекает двумерную фигуру максимум 4 раза. Выпуклость трехмерной фигуры будет определяться аналогичным образом. Установка значения convexity = 10
должна работать нормально в большинстве случаев.
import_dxf
правитьШаблон:OpenSCAD User Manual/Deprecated
import_dxf()
считывает файл DXF и создаёт двумерное очертание.
Пример
linear_extrude(height = 5, center = true, convexity = 10) import_dxf(file = "example009.dxf", layer = "plate");