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

Руководство пользователя по OpenSCAD/Двухмерное в трехмерное

Материал из Викиучебника — открытых книг для открытого мира

Экструзия (от лат.: extrusio «выталкивание») — это способ создания предмета с фиксированным профилем поперечного сечения. OpenSCAD предоставляет две команды для создания 3D-тел из 2D-формы: linear_extrude() и rotate_extrude(). Линейная экструзия похожа на проталкивание пластилина через пресс со стороной определенной формы.

linear_extrude() работает как экструзионный пресс для пластилина

Вращательная экструзия подобна токарной обработке или пластической формовке чаши на гончарном круге.

функцияrotate_extrude() похожа на пластическую формовку сосуда

Оба метода экструзии работают с (возможно, разъединённой) двумерной формой, которая существует на плоскости X-Y. В то время как преобразования, которые работают как с 2D-формами, так и с 3D-твердыми телами, могут перемещать фигуру с плоскости X-Y, то при выполнении экструзии конечный результат, может показаться, не очень понятным. Что на самом деле происходит, так это то, что любая информация в третьей координате (координата Z) игнорируется для любой 2D-формы, этот процесс сводится к неявной projection() выполняемой для любой 2D-формы до выполнения экструзии. Рекомендуется выполнять экструзию на формах, которые остаются строго в плоскости X-Y.

Линейная экструзия

[править]

Линейная экструзия — это операция, которая принимает двумерный объект в качестве входных данных и в результате создает трехмерный объект.

В OpenSCAD выдавливание всегда выполняется на проекции (тени) плоскости X-Y двумерного объекта и вдоль оси «Z»; поэтому, если вы поворачиваете или применяете другие преобразования к двумерному объекту перед экструзией, его форма тени — это то, что выталкивается.

Хотя экструзия является линейной вдоль оси «Z», доступен параметр поворота, который заставляет объект вращаться вокруг оси «Z» по мере выталкивания вверх. Это может быть использовано для поворота объекта в его центре, как если бы это был спиральный столб, или для создания спирального выталкивания вокруг оси «Z», как поросячий хвостик.

Параметр scale также включен, чтобы объект можно было расширять или сжимать по мере выдавливания, позволяя выдавливаниям расширяться внутрь или наружу.

Использование

[править]
linear_extrude(height = 5, center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0, $fn = 16) {...}

Вы должны использовать имена параметров из-за проблемы обратной совместимости.

height должно быть положительным.

$fn является необязательным и определяет разрешение linear_extrude (большее число обеспечивает большую «плавность», но требуется больше времени для вычислений).

Если выдавливание не удается для необычной 2D-формы, попробуйте установить параметр convexity выпуклости (по умолчанию не 10, но 10 — «хорошее» значение для попытки). Смотрите объяснение ниже.

Twist (проворот) — это количество градусов, через которые протягивается очертание. Установка параметра twist = 360 вытягивает за один оборот. Направление поворота соответствует правилу левой руки.

twist = 0

0° проворота

linear_extrude(height = 10, center = true, convexity = 10, twist = 0)
translate([2, 0, 0])
circle(r = 1);

twist = −100

-100° проворота

linear_extrude(height = 10, center = true, convexity = 10, twist = -100)
translate([2, 0, 0])
circle(r = 1);

twist = 100

100° проворота

linear_extrude(height = 10, center = true, convexity = 10, twist = 100)
translate([2, 0, 0])
circle(r = 1);

twist = −500

-500° проворота

linear_extrude(height = 10, center = true, convexity = 10, twist = -500)
translate([2, 0, 0])
circle(r = 1);

Это похже на параметр center в cylinder(). Если center это false линейный размер экструзии Z находится в диапазоне от 0 до height; if it is true, the range is from -height/2 to height/2.


center = true

center = true

linear_extrude(height = 10, center = true, convexity = 10, twist = -500)
translate([2, 0, 0])
circle(r = 1);


center = false

center = false

linear_extrude(height = 10, center = false, convexity = 10, twist = -500)
translate([2, 0, 0])
circle(r = 1);

Уточнение cетки

[править]

Параметр slices определяет количество промежуточных точек вдоль оси Z выдавливания. Его значение по умолчанию увеличивается со значением twist. Явная настройка срезов может улучшить уточнение выходных данных. slices = 100

linear_extrude(height = 10, center = false, convexity = 10, twist = 360, slices = 100)
translate([2, 0, 0])
circle(r = 1);

Специальные переменные $fn, $fs и $fa также может быть использованы для улучшения производительности. Если параметр slices не определен, его значение берется из определенного значения $fn.

$fn = 100

linear_extrude(height = 10, center = false, convexity = 10, twist = 360, $fn = 100)
translate([2, 0, 0])
circle(r = 1);

scale масштабирует двумерное очертание на это значение на высоте выдавливания. scale может быть скалярным или векторным:

 linear_extrude(height = 10, center = true, convexity = 10, scale=3)
 translate([2, 0, 0])
 circle(r = 1);

OpenScad linear_extrude scale пример

 linear_extrude(height = 10, center = true, convexity = 10, scale=[1,5], $fn=100)
 translate([2, 0, 0])
 circle(r = 1);

OpenScad linear_extrude scale пример 2

Обратите внимание, что если scale является вектором, Обратите внимание, что если масштаб является вектором, то результирующие боковые стенки могут быть неплоскими. Воспользуйся twist=0 и slices параметр, позволяющий избежать асимметрии.

 linear_extrude(height=10, scale=[1,0.1], slices=20, twist=0)
 polygon(points=[[0,0],[20,10],[20,-10]]);

Вращательная экструзия

[править]

Вращательная экструзия, rotate_extrude() — вращает двумерное очертание вокруг оси Z, образуя твердое тело, обладающее вращательной симметрией. Один из способов представить эту операцию — представить гончарный круг, расположенный в плоскости X-Y, ось вращения которого направлена вверх в направлении +Z. Затем поместите объект, который нужно изготовить, на этот виртуальный гончарный круг (возможно, проходящий ниже плоскости X-Y в направлении -Z). Создаваемый объект — это поперечное сечение объекта на плоскости X-Y (сохраняя только правую половину, X>=0). Эта двумерная фигура, которая будет передана в rotate_extrude() в качестве потомка, чтобы сгенерировать это твердое тело. Обратите внимание, что объект начался на плоскости X-Y, но наклонен вверх (повернут на +90 градусов вокруг оси X) для экструдирования.

Поскольку двумерная фигура визуализируется OpenSCAD на плоскости X-Y, альтернативный способ представить эту операцию следующим образом: вращает двумерную фигуру вокруг оси Y, образуя твердое тело.. Полученное твердое тело размещают так, чтобы его ось вращения лежала вдоль оси Z.

Так же, как и linear_extrude, экструзия всегда выполняется на проекции двумерного многоугольника на плоскость XY. Преобразования, такие как поворот, перевод и т. д., Применяемые к двумерному полигону перед экструзией, изменяют проекцию двумерного полигона на плоскость XY и, следовательно, также изменяют вид итогового двумерного предмета.

  • Перемещение по Z двумерного многоугольника не влияет на результат (как и на проекцию).
  • Перемещение по X увеличивает диаметр конечного предмета.
  • Перемещение по Y приводит к смещению конечного объекта в направлении Z.
  • Вращение вокруг оси X или Y искажает поперечное сечение конечного предмета, а также искажается проекция на плоскость XY.

Не запутывайтесь, так как OpenSCAD отображает двумерные многоугольники с определенной высотой в направлении Z, поэтому двумерный объект (с его высотой), по-видимому, имеет большую проекцию на плоскость XY.. Но для проекции на плоскость XY, а также для последующего выдавливания используется только базовый многоугольник без высоты.

Это не может быть использовано для изготовления спирали или винтовой резьбы.

Двумерная фигура должна полностью находиться либо справа (рекомендуется), либо слева от оси Y. Точнее говоря, каждая вершина фигуры должна иметь либо x>=0, либо x <=0. Если фигура перекрывает ось X, в окне консоли появляется предупреждение, и функция rotate_extrude() игнорируется. Если двухмерное очертание касается оси Y, то есть при x=0, она должна быть линией, которая касается, а не точкой, поскольку точка приводит к трёхмерному предмету нулевой толщины, что недопустимо и приводит к ошибке CGAL. Для версий OpenSCAD до 2016.xxxx, если форма находится на отрицательной оси, результирующие грани ориентированы наизнанку, что может вызвать нежелательные эффекты.

Использование

[править]
rotate_extrude(angle = 360, convexity = 2) {...}
Правило хвата правой рукой

Вы должны использовать имена параметров из-за проблемы обратной совместимости.

convexity : Если выдавливание не удается для необычной двумерной формы, попробуйте установить параметр выпуклости convexity (по умолчанию не 10, но 10 — «хорошее» значение для попытки). Смотрите объяснение ниже.
angle Шаблон:Requires : По умолчанию используется значение 360. Указывает количество градусов для развертки, начиная с положительной оси X. Направление развертки следует правилу правой руки, следовательно, отрицательный угол развертки по часовой стрелке.
$fa : минимальный угол (в градусах) каждого фрагмента.
$fs : наименьшая длина окружности каждого фрагмента.
$fn : фиксированный количество фрагментов в 360 градусах. Значения 3 или более переопределяют значения $fa и $fs
$fa, $fs и $fn должны быть проименоваными параметрами. нажмите здесь для получения более полных сведений.

Примеры

[править]

Простой тор может быть построен с помощью вращательного выдавливания (экструзии).

rotate_extrude(convexity = 10)
translate([2, 0, 0])
circle(r = 1);

Уточнение Сетки

[править]

Увеличение количества частей, составляющих двумерное очертание, улучшает подробность сетки, но требует больше времени для отрисовки.

rotate_extrude(convexity = 10)
translate([2, 0, 0])
circle(r = 1, $fn = 100);

Количество частей, используемых при экструзии, также может быть увеличено.

rotate_extrude(convexity = 10, $fn = 100)
translate([2, 0, 0])
circle(r = 1, $fn = 100);

Используя параметр angle (в версиях OpenSCAD 2016.xx), можно смоделировать крюк.

OpenSCAD — крючок
eps = 0.01;
translate([eps, 60, 0])
   rotate_extrude(angle=270, convexity=10)
       translate([40, 0]) circle(10);
rotate_extrude(angle=90, convexity=10)
   translate([20, 0]) circle(10);
translate([20, eps, 0])
   rotate([90, 0, 0]) cylinder(r=10, h=80+eps);

Экструзия многоугольника

[править]

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

Вот простой многоугольник и его 200-ступенчатая вращательная экструзия. (Обратите внимание, что он повернут на 90 градусов, чтобы показать, как отображается вращение; rotate_extrude() нужна эта плоскость).

rotate([90,0,0])        polygon( points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]] );
rotate_extrude($fn=200) polygon( points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]] );

Для получения дополнительных сведений о многоугольниках, пожалуйста, смотрите: 2D Primitives: Polygon.

Описание параметров экструзии

[править]

Параметры экструдирования для всех способов экструзии

[править]
convexity Целое число. Параметр convexity(рус.:выпуклости) указывает максимальное количество лицевых сторон (задних сторон), через которые может проникнуть луч, пересекающий объект.

Этот параметр необходим только для корректного отображения объекта в режиме предварительного просмотра OpenCSG и не влияет на рендеринг многогранника.


На этом изображении показана двумерная фигура с convexity = 4, так как луч, обозначенный красным, пересекает двумерную фигуру максимум 4 раза. Выпуклость трехмерной фигуры будет определяться аналогичным образом. Установка значения convexity = 10 должна работать нормально в большинстве случаев.

Параметры экструдирования только для линейной экструзии

[править]
height Высота экструзии
center Если значение true, твердое тело центрируется после выдавливания
twist Экструзионный проворот в градусах
slices Аналогично специальной переменной $fn без будущей передачи вниз к потомку двумерного чертежа.
scale Масштабирует двумерный чертеж на это значение на высоте выдавливания.