OpenSCAD для начинающих: помощь в создании криволинейного объекта

Я учу себя, как использовать openSCAD, и я знаю основы. Я решил сделать пальму, чтобы попрактиковаться в использовании программы. Я использовал следующий код для создания ствола:

linear_extrude(height = 50, center = true, convexity = 10, twist = 200)
circle(r = 1);

В результате получился следующий объект: введите здесь описание изображенияДалее для верхушки пальмы я хотел создать 2D-многоугольник, затем поверните его на 360 градусов. Многоугольник будет выглядеть примерно так: введите здесь описание изображения

Многоугольник требует серии точек, и это было бы очень сложно, так как края изогнуты. Есть ли более простой способ сделать листья пальмы?


person VictoriaJay    schedule 11.09.2014    source источник
comment
Вы можете найти силуэт пальмы в Интернете, обвести его, чтобы создать вектор (в Inkscape), отредактировать его, чтобы удалить ствол дерева и одну сторону вектора, сохранить его как SVG, затем импортировать SVG в OpenSCAD и повернуть выдавить его.   -  person Scott Leslie    schedule 30.11.2014


Ответы (2)


Будьте проще: используйте трехмерные фигуры, такие как кубы. Приведенный ниже код может быть явно сгенерирован из цикла for.

translate([0, 0, 25]){
    linear_extrude(height = 50, center = true, convexity = 10, twist = 200)
        circle(r = 1);
}

translate([0, 0, 40]){cylinder(10, 1, 2);}


translate([0, 0, 50]){rotate([0, 20, 0]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 20]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 40]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 60]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 80]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 100]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 120]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 140]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 160]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 180]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 200]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 220]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 240]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 260]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 280]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 300]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 320]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 20, 340]){cube([10, 5, 1]);}}

translate([0, 0, 50]){rotate([0, 2, 0]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 20]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 2, 40]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 60]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 80]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 2, 100]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 120]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 2, 140]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 2, 160]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 2, 180]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 200]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 2, 220]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 240]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 2, 260]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 2, 280]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 300]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 320]){cube([10, 5, 1]);}}
translate([0, 0, 50]){rotate([0, 0, 340]){cube([10, 5, 1]);}}
person dccsillag    schedule 05.05.2015

//вот один из способов сделать это, но я чувствую, что он не очень хорошо представляет пальму.

translate([0,0,20])
rotate_extrude()
rotate([0,0,90])
difference(){
union(){
difference(){
circle(r = 15,$fn = 100);
translate([-20,0])
circle(r = 30, $fn = 100);
}

translate([.2,0])
scale([.7,.8])
difference(){
circle(r = 15,$fn = 100);
translate([-20,0])
circle(r = 30, $fn = 100);
}

translate([.2,0])
scale([.5,.6])
difference(){
circle(r = 15,$fn = 100);
translate([-20,0])
circle(r = 30, $fn = 100);
}
translate([5,0])
rotate([0,0,45])
square(center = true,[1.5,1.5]);
 }

translate([15,-15])
square([30,30], center = true);
}




linear_extrude(height = 50, center = true, convexity = 10, twist = 200)
circle(r = 1);
person user4955389    schedule 30.05.2015