/ src / turtle / lsystem2.scad
lsystem2.scad
 1  /**
 2  * lsystem2.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-lsystem2.html
 8  *
 9  **/ 
10  
11  use <_impl/_lsystem_comm.scad>
12  use <turtle2d.scad>
13  
14  function lsystem2(axiom, rules, n, angle, leng = 1, heading = 0, start = [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" ? turtle2d("forward", t, leng) :
20              code == "+" ? turtle2d("turn", t, angle) :
21              code == "-" ? turtle2d("turn", t, -angle) : 
22              code == "|" ? turtle2d("turn", t, 180) : t    
23      )
24      _lines(
25          turtle2d("create", start.x, start.y, heading), 
26          codes,
27          angle,
28          leng,
29          next_t2, 
30          function(t) turtle2d("pt", t)
31      );