Руководство пользователя по OpenSCAD/Двухмерное в трехмерное
Экструзия (от лат.: extrusio «выталкивание») — это способ создания предмета с фиксированным профилем поперечного сечения. OpenSCAD предоставляет две команды для создания 3D-тел из 2D-формы: 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 (проворот) — это количество градусов, через которые протягивается очертание. Установка параметра twist = 360
вытягивает за один оборот. Направление поворота соответствует правилу левой руки.
0° проворота
linear_extrude(height = 10, center = true, convexity = 10, twist = 0) translate([2, 0, 0]) circle(r = 1);
-100° проворота
linear_extrude(height = 10, center = true, convexity = 10, twist = -100) translate([2, 0, 0]) circle(r = 1);
100° проворота
linear_extrude(height = 10, center = true, convexity = 10, twist = 100) translate([2, 0, 0]) circle(r = 1);
-500° проворота
linear_extrude(height = 10, center = true, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
Center
[править]Это похже на параметр center
в cylinder(). Если center
это false линейный размер экструзии Z находится в диапазоне от 0 до height
; if it is true, the range is from -height
/2 to height
/2.
center = true
linear_extrude(height = 10, center = true, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
center = false
linear_extrude(height = 10, center = false, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
Уточнение cетки
[править]Параметр slices
определяет количество промежуточных точек вдоль оси Z выдавливания. Его значение по умолчанию увеличивается со значением twist
. Явная настройка срезов может улучшить уточнение выходных данных.
linear_extrude(height = 10, center = false, convexity = 10, twist = 360, slices = 100) translate([2, 0, 0]) circle(r = 1);
Специальные переменные $fn, $fs и $fa также может быть использованы для улучшения производительности. Если параметр slices
не определен, его значение берется из определенного значения $fn.
linear_extrude(height = 10, center = false, convexity = 10, twist = 360, $fn = 100) translate([2, 0, 0]) circle(r = 1);
Scale
[править]scale
масштабирует двумерное очертание на это значение на высоте выдавливания. scale
может быть скалярным или векторным:
linear_extrude(height = 10, center = true, convexity = 10, scale=3) translate([2, 0, 0]) circle(r = 1);
linear_extrude(height = 10, center = true, convexity = 10, scale=[1,5], $fn=100) translate([2, 0, 0]) circle(r = 1);
Обратите внимание, что если 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), можно смоделировать крюк.
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 | Масштабирует двумерный чертеж на это значение на высоте выдавливания. |