lsystem3.scad
1 /** 2 * lsystem3.scad 3 * 4 * @copyright Justin Lin, 2020 5 * @license https://opensource.org/licenses/lgpl-3.0.html 6 * 7 * @see https://openhome.cc/eGossip/OpenSCAD/lib3x-lsystem3.html 8 * 9 **/ 10 11 use <_impl/_lsystem_comm.scad> 12 use <turtle3d.scad> 13 14 function lsystem3(axiom, rules, n, angle, leng = 1, heading = 0, start = [0, 0, 0], forward_chars = "F", rule_prs, seed) = 15 let( 16 codes = _codes(axiom, rules, n, forward_chars, rule_prs, seed), 17 _next_t2 = function(t, code, angle, leng) 18 is_undef(code) || code == "[" || code == "]" ? t : 19 code == "F" || code == "f" ? turtle3d("forward", t, leng) : 20 code == "+" ? turtle3d("turn", t, angle) : 21 code == "-" ? turtle3d("turn", t, -angle) : 22 code == "|" ? turtle3d("turn", t, 180) : 23 code == "&" ? turtle3d("pitch", t, -angle) : 24 code == "^" ? turtle3d("pitch", t, angle) : 25 code == "\\" ? turtle3d("roll", t, angle) : 26 code == "/" ? turtle3d("roll", t, -angle) : t 27 ) 28 _lines( 29 turtle3d("create", start, [[1, 0, 0], [0, 1, 0], [0, 0, 1]]), 30 codes, 31 angle, 32 leng, 33 _next_t2, 34 function(t) turtle3d("pt", t) 35 );