1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-13 02:04:16 +02:00

avoid recursion limit

This commit is contained in:
Justin Lin
2022-03-18 18:22:31 +08:00
parent f97366ccdf
commit 39c1c1a9db

View File

@@ -56,10 +56,19 @@ _mz_hamiltonian_nxt_offset = [
[-1, 0], // LEFT
[1, 0] // RIGHT
];
function nxtp(dotM, p) = p + _mz_hamiltonian_nxt_offset[_mz_hamiltonian_dir(_mz_hamiltonian_corner_value(dotM, p.x, p.y))];
function _mz_hamiltonian_travel(dotM, p, leng, i = 0) =
i == leng ? [] :
let(
dir_i = _mz_hamiltonian_dir(_mz_hamiltonian_corner_value(dotM, p.x, p.y)),
nxt_p = p + _mz_hamiltonian_nxt_offset[dir_i]
pts = [
for(i = 0, nxt_p = nxtp(dotM, p), is_continue = i < leng;
is_continue;
i = i + 1,
is_continue = i < leng,
nxt_p = is_continue ? nxtp(dotM, nxt_p) : undef
)
nxt_p
]
)
[p, each _mz_hamiltonian_travel(dotM, nxt_p, leng, i + 1)];
[each pts, nxtp(dotM, pts[len(pts) - 1])];