/ src / turtle / lsystem3.scad
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      );