Перейти к содержанию

Руководство пользователя по 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)
значения по умолчанию:  square();   выводит:  square(size = [1, 1], center = false);
примеры:

Квадрат 10x10

равнозначные описания для этого примера
 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] );

Прямоугольник 20x10

равнозначные описания для этого примера
 square([20,10],true);
 a=[20,10];square(a,true);

Круг

[править]

circle() создает круг в начале координат. Все параметры, кроме r, должны быть названы.

circle(r=radius | d=diameter);
параметры
r : радиус круга. имя r является единственным необязательным с кругом.
разрешение круга зависит от размера, использующего $fa или $fs.
Для небольшого круга с высоким разрешением вы можете сделать большой круг, а затем уменьшить его, или вы можете установить $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()). Вторичные очертания могут быть полностью или частично в пределах первичных очертаний.
Замкнутое очертание создается путем возврата от последней указанной точки к первой.
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");