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

support init_cells param

This commit is contained in:
Justin Lin
2022-03-17 16:21:31 +08:00
parent 22fdb8c2e5
commit 06a785bfb1

View File

@@ -10,14 +10,19 @@
use <_impl/_mz_hamiltonian_impl.scad>; use <_impl/_mz_hamiltonian_impl.scad>;
use <mz_square_cells.scad>; use <mz_square_cells.scad>;
use <mz_square_initialize.scad>;
use <mz_square_get.scad>; use <mz_square_get.scad>;
use <../util/sort.scad>; use <../util/sort.scad>;
use <../util/dedup.scad>; use <../util/dedup.scad>;
function mz_hamiltonian(rows, columns, start = [0, 0], seed) = function mz_hamiltonian(rows, columns, start = [0, 0], init_cells, seed) =
let( let(
r = is_undef(init_cells) ? rows : len(init_cells),
c = is_undef(init_cells) ? columns : len(init_cells[0]),
cells = mz_square_cells( cells = mz_square_cells(
rows, columns, r, c,
init_cells = init_cells,
start = start,
seed = seed seed = seed
), ),
all = concat( all = concat(
@@ -30,11 +35,13 @@ function mz_hamiltonian(rows, columns, start = [0, 0], seed) =
) )
each if(type == "TOP_WALL") _mz_hamiltonian_top(x, y) else each if(type == "TOP_WALL") _mz_hamiltonian_top(x, y) else
if(type == "RIGHT_WALL") _mz_hamiltonian_right(x, y) else if(type == "RIGHT_WALL") _mz_hamiltonian_right(x, y) else
if(type == "TOP_RIGHT_WALL") _mz_hamiltonian_top_right(x, y) if(type == "TOP_RIGHT_WALL") _mz_hamiltonian_top_right(x, y) else
if(type == "MASK") _mz_hamiltonian_mask(x, y)
], ],
[for(x = [0:columns * 2 - 1]) [x, 0]], [for(x = [0:c * 2 - 1]) [x, 0]],
[for(y = [0:rows * 2 - 1]) [0, y]] [for(y = [0:r * 2 - 1]) [0, y]]
), ),
dot_pts = dedup(sort(all, by = "vt")) dot_pts = dedup(sort(all, by = "vt"))
) )
_mz_hamiltonian_travel(dot_pts, start, rows * columns * 4); _mz_hamiltonian_travel(dot_pts, start * 3, r * c * 4);