diff --git a/examples/turtle/fern_leaf_stencil.scad b/examples/turtle/fern_leaf_stencil.scad new file mode 100644 index 00000000..ccbaa6a3 --- /dev/null +++ b/examples/turtle/fern_leaf_stencil.scad @@ -0,0 +1,64 @@ +include ; +include ; +include ; + +radius = 40; +height = 3; +thickness = 1; +width = 1; + +min_leng = 0.1; +k1 = 0.9; +k2 = 0.3; + +module fern_leaf(t, leng, min_leng, k1, k2, width) { + t1 = t2d(t, "forward", leng = leng); + + hull_polyline2d([t2d(t, "point"), t2d(t1, "point")], width); + if(leng > min_leng) { + fern_leaf( + t2d(t1, "turn", angle = 70), + k2 * leng, min_leng, k1, k2, width + ); + + t2 = t2d(t1, "forward", leng = k1 * leng); + hull_polyline2d([t2d(t1, "point"), t2d(t2, "point")], width); + + t3 = t2d(t2, "turn", angle = -69.0); + fern_leaf( + t3, + k1 * k2 * leng, min_leng, k1, k2, width + ); + fern_leaf( + t2d(t3, "turn", angle = 68.0), + k1 * k1 * leng, min_leng, k1, k2, width + ); + } +} + +module fern_leaf_stencil(radius, height, thickness, width, min_leng, k1, k2) { + $fn = 48; + + linear_extrude(thickness) + difference() { + union() { + translate([radius, 0]) + scale([1, 0.5, 1]) + hollow_out(radius / 3) + circle(radius / 1.5); + + circle(radius); + } + translate([-radius, 0]) + fern_leaf( + t2d(point = [0, 0], angle = 0), + radius / 5, min_leng, k1, k2, width + ); + } + + linear_extrude(height) + hollow_out(thickness) + circle(radius + thickness); +} + +fern_leaf_stencil(radius, height, thickness, width, min_leng, k1, k2);