diff --git a/examples/turtle/sierpinski_triangle.scad b/examples/turtle/sierpinski_triangle.scad index 82e25df2..2d5c13cf 100644 --- a/examples/turtle/sierpinski_triangle.scad +++ b/examples/turtle/sierpinski_triangle.scad @@ -1,6 +1,5 @@ include ; include ; -include ; include ; side_leng = 100; @@ -14,7 +13,7 @@ sierpinski_triangle( module triangle(t, side_leng, thickness) { t2 = t2d(t, "forward", leng = side_leng); - t3 = t2d(t2, cmds = [ + t3 = t2d(t2, [ ["turn", 120], ["forward", side_leng] ]); @@ -33,7 +32,7 @@ module sierpinski_triangle(t, side_leng, min_leng, thickness) { if(side_leng >= min_leng) { half_leng = side_leng / 2; t2 = t2d(t, "forward", leng = half_leng); - t3 = t2d(t, cmds = [ + t3 = t2d(t, [ ["turn", 60], ["forward", half_leng], ["turn", -60] diff --git a/src/turtle/t2d.scad b/src/turtle/t2d.scad index 3d0b1b93..9992f5db 100644 --- a/src/turtle/t2d.scad +++ b/src/turtle/t2d.scad @@ -57,6 +57,15 @@ function _t2d_set(t, point, angle, x, y) = !is_undef(y) ? _t2d_set_y(t, y) : assert(false, "no target to set"); +function _t2d_cmd(t, cmd, point, angle, x, y, leng) = + cmd == "set" ? _t2d_set(t, point, angle, x, y) : + cmd == "forward" ? _t2d_forward(t, leng) : + cmd == "turn" ? _t2d_turn(t, angle) : + cmd == "point" ? _t2d_get_pt(t) : + cmd == "angle" ? _t2d_get_angle(t) : + cmd == "x" ? _t2d_get_x(t) : + cmd == "y" ? _t2d_get_y(t) : assert(false, "unknown command"); + function _t2d_cmds(t, cmds, i = 0) = i == len(cmds) ? t : let( @@ -65,14 +74,7 @@ function _t2d_cmds(t, cmds, i = 0) = ) _t2d_cmds(_t2d_cmdline(cmd, t, arg), cmds, i + 1); -function t2d(t, cmd, cmds, point, angle, x, y, leng) = +function t2d(t, cmd, point, angle, x, y, leng) = is_undef(t) ? _t2d_turtle(point, angle) : - cmd == "set" ? _t2d_set(t, point, angle, x, y) : - cmd == "forward" ? _t2d_forward(t, leng) : - cmd == "turn" ? _t2d_turn(t, angle) : - cmd == "point" ? _t2d_get_pt(t) : - cmd == "angle" ? _t2d_get_angle(t) : - cmd == "x" ? _t2d_get_x(t) : - cmd == "y" ? _t2d_get_y(t) : - !is_undef(cmds) ? _t2d_cmds(t, cmds) : - assert(false, "unknown command"); \ No newline at end of file + is_string(cmd) ? _t2d_cmd(t, cmd, point, angle, x, y, leng) : + _t2d_cmds(t, cmd) ; \ No newline at end of file