mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-16 03:34:42 +02:00
support forward_chars
This commit is contained in:
@@ -6,17 +6,17 @@ function _join(strs) =
|
||||
let(leng = len(strs))
|
||||
[for(i = 0, s = strs[0]; i < leng; i = i + 1, s = str(s, strs[i])) s][leng - 1];
|
||||
|
||||
function _produce1(base, rule) = _join([
|
||||
function _derive1(base, rule) = _join([
|
||||
for(c = base)
|
||||
let(v = assoc_lookup(rule, c))
|
||||
is_undef(v) ? c : v
|
||||
]);
|
||||
|
||||
function _produce(base, rule, n, i = 0) =
|
||||
i == n ? base : _produce(_produce1(base, rule), rule, n, i + 1);
|
||||
function _derive(base, rule, n, i = 0) =
|
||||
i == n ? base : _derive(_derive1(base, rule), rule, n, i + 1);
|
||||
|
||||
function produce(rule, n) =
|
||||
_produce(assoc_lookup(rule, "S"), rule, n);
|
||||
function derive(rule, n) =
|
||||
_derive(assoc_lookup(rule, "S"), rule, n);
|
||||
|
||||
function cmd(symbol, args) =
|
||||
symbol == "F" ? ["forward", args[0]] :
|
||||
|
@@ -1,16 +1,21 @@
|
||||
use <experimental/_impl/_lsystem2_impl.scad>;
|
||||
use <turtle/turtle2d.scad>;
|
||||
|
||||
function lsystem2(rule, n, angle, leng = 1, heading = 0, start_pt = [0, 0]) =
|
||||
function lsystem2(rule, n, angle, leng = 1, heading = 0, start = [0, 0], forward_chars = "F") =
|
||||
let(
|
||||
produced = produce(rule, n),
|
||||
derived = derive(rule, n),
|
||||
replaced = _join([
|
||||
for(c = derived)
|
||||
let(idx = search(c, forward_chars))
|
||||
idx == [] ? c : "F"
|
||||
]),
|
||||
cmds = [
|
||||
for(s = produced)
|
||||
for(s = replaced)
|
||||
let(c = cmd(s, [leng, angle]))
|
||||
if(c != []) c
|
||||
]
|
||||
)
|
||||
_lines(
|
||||
turtle2d("create", start_pt[0], start_pt[0], heading),
|
||||
turtle2d("create", start[0], start[0], heading),
|
||||
cmds
|
||||
);
|
Reference in New Issue
Block a user