mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-07 23:37:13 +02:00
refactor
This commit is contained in:
@@ -1,37 +1,5 @@
|
||||
use <experimental/assoc_lookup.scad>;
|
||||
use <experimental/_impl/_lsystem_comm.scad>;
|
||||
use <turtle/turtle2d.scad>;
|
||||
use <util/rand.scad>;
|
||||
|
||||
// It doesn't use recursion to avoid recursion error.
|
||||
function _join(str_lt) =
|
||||
let(leng = len(str_lt))
|
||||
[for(i = 0, s = str_lt[0]; i < leng; i = i + 1, s = str(s, str_lt[i])) s][leng - 1];
|
||||
|
||||
function c_or_v(c, v, rules, rules_pr, leng, i = 0) =
|
||||
i == leng ? c : (
|
||||
let(idx = search([v[i]], rules, num_returns_per_match=0, index_col_num = 1)[0][0])
|
||||
rand(0, 1) <= rules_pr[idx] ? v[i] : c_or_v(c, v, rules, rules_pr, leng, i + 1)
|
||||
);
|
||||
|
||||
function _derive1_p(base, rules, rules_pr) =
|
||||
_join([
|
||||
for(c = base)
|
||||
let(v = [for(r = rules) if(r[0] == c) r[1]])
|
||||
v == [] ? c :
|
||||
c_or_v(c, v, rules, rules_pr, len(v))
|
||||
]);
|
||||
|
||||
function _derive_p(base, rules, rules_pr, n, i = 0) =
|
||||
i == n ? base : _derive_p(_derive1_p(base, rules, rules_pr), rules, rules_pr, n, i + 1);
|
||||
|
||||
function _derive1(base, rules) = _join([
|
||||
for(c = base)
|
||||
let(v = assoc_lookup(rules, c))
|
||||
is_undef(v) ? c : v
|
||||
]);
|
||||
|
||||
function _derive(base, rules, n, i = 0) =
|
||||
i == n ? base : _derive(_derive1(base, rules), rules, n, i + 1);
|
||||
|
||||
function _lsystem2_derive(axiom, rules, n, rules_pr) =
|
||||
is_undef(rules_pr) ? _derive(axiom, rules, n) :
|
||||
|
@@ -1,37 +1,5 @@
|
||||
use <experimental/assoc_lookup.scad>;
|
||||
use <experimental/_impl/_lsystem_comm.scad>;
|
||||
use <turtle/turtle3d.scad>;
|
||||
use <util/rand.scad>;
|
||||
|
||||
// It doesn't use recursion to avoid recursion error.
|
||||
function _join(str_lt) =
|
||||
let(leng = len(str_lt))
|
||||
[for(i = 0, s = str_lt[0]; i < leng; i = i + 1, s = str(s, str_lt[i])) s][leng - 1];
|
||||
|
||||
function c_or_v(c, v, rules, rules_pr, leng, i = 0) =
|
||||
i == leng ? c : (
|
||||
let(idx = search([v[i]], rules, num_returns_per_match=0, index_col_num = 1)[0][0])
|
||||
rand(0, 1) <= rules_pr[idx] ? v[i] : c_or_v(c, v, rules, rules_pr, leng, i + 1)
|
||||
);
|
||||
|
||||
function _derive1_p(base, rules, rules_pr) =
|
||||
_join([
|
||||
for(c = base)
|
||||
let(v = [for(r = rules) if(r[0] == c) r[1]])
|
||||
v == [] ? c :
|
||||
c_or_v(c, v, rules, rules_pr, len(v))
|
||||
]);
|
||||
|
||||
function _derive_p(base, rules, rules_pr, n, i = 0) =
|
||||
i == n ? base : _derive_p(_derive1_p(base, rules, rules_pr), rules, rules_pr, n, i + 1);
|
||||
|
||||
function _derive1(base, rules) = _join([
|
||||
for(c = base)
|
||||
let(v = assoc_lookup(rules, c))
|
||||
is_undef(v) ? c : v
|
||||
]);
|
||||
|
||||
function _derive(base, rules, n, i = 0) =
|
||||
i == n ? base : _derive(_derive1(base, rules), rules, n, i + 1);
|
||||
|
||||
function _lsystem3_derive(axiom, rules, n, rules_pr) =
|
||||
is_undef(rules_pr) ? _derive(axiom, rules, n) :
|
||||
|
33
src/experimental/_impl/_lsystem_comm.scad
Normal file
33
src/experimental/_impl/_lsystem_comm.scad
Normal file
@@ -0,0 +1,33 @@
|
||||
use <experimental/assoc_lookup.scad>;
|
||||
use <util/rand.scad>;
|
||||
|
||||
// It doesn't use recursion to avoid recursion error.
|
||||
function _join(str_lt) =
|
||||
let(leng = len(str_lt))
|
||||
[for(i = 0, s = str_lt[0]; i < leng; i = i + 1, s = str(s, str_lt[i])) s][leng - 1];
|
||||
|
||||
function c_or_v(c, v, rules, rules_pr, leng, i = 0) =
|
||||
i == leng ? c : (
|
||||
let(idx = search([v[i]], rules, num_returns_per_match=0, index_col_num = 1)[0][0])
|
||||
rand(0, 1) <= rules_pr[idx] ? v[i] : c_or_v(c, v, rules, rules_pr, leng, i + 1)
|
||||
);
|
||||
|
||||
function _derive1_p(base, rules, rules_pr) =
|
||||
_join([
|
||||
for(c = base)
|
||||
let(v = [for(r = rules) if(r[0] == c) r[1]])
|
||||
v == [] ? c :
|
||||
c_or_v(c, v, rules, rules_pr, len(v))
|
||||
]);
|
||||
|
||||
function _derive_p(base, rules, rules_pr, n, i = 0) =
|
||||
i == n ? base : _derive_p(_derive1_p(base, rules, rules_pr), rules, rules_pr, n, i + 1);
|
||||
|
||||
function _derive1(base, rules) = _join([
|
||||
for(c = base)
|
||||
let(v = assoc_lookup(rules, c))
|
||||
is_undef(v) ? c : v
|
||||
]);
|
||||
|
||||
function _derive(base, rules, n, i = 0) =
|
||||
i == n ? base : _derive(_derive1(base, rules), rules, n, i + 1);
|
Reference in New Issue
Block a user