diff --git a/examples/maze/maze3d.scad b/examples/maze/maze3d.scad index 8ca236f9..d3aee8d4 100644 --- a/examples/maze/maze3d.scad +++ b/examples/maze/maze3d.scad @@ -14,29 +14,38 @@ maze3d(); module maze3d() { cells = mz_cube(layers, rows, columns); + draw_3dmaze(cells, cell_width, road_width); +} + +module draw_3dmaze(cells, cell_width, road_width) { + layers = len(cells); + rows = len(cells[0]); + columns = len(cells[0][0]); for(z = [0:layers - 1], y = [0:rows - 1], x = [0:columns - 1]) { cell = cells[z][y][x]; type = mz_cube_get(cell, "t"); - channels = [ - z_road(type), - z != 0 && z_road(mz_cube_get(cells[z - 1][y][x], "t")), - y_road(type), - x_road(type), - y != 0 && y_road(mz_cube_get(cells[z][y - 1][x], "t")), - x != 0 && x_road(mz_cube_get(cells[z][y][x - 1], "t")) - ]; - - translate([x, y, z] * cell_width) - drawCell(cell_width, road_width, channels); + if(type != "MASK") { + channels = [ + z_road(type) , + z != 0 && z_road(mz_cube_get(cells[z - 1][y][x], "t")), + y_road(type), + x_road(type), + y != 0 && y_road(mz_cube_get(cells[z][y - 1][x], "t")), + x != 0 && x_road(mz_cube_get(cells[z][y][x - 1], "t")) + ]; + + translate([x, y, z] * cell_width) + drawCell(cell_width, road_width, channels); + } } - function z_road(type) = !has(["Z_WALL", "Z_Y_WALL", "Z_X_WALL", "Z_Y_X_WALL"], type); + function z_road(type) = !has(["Z_WALL", "Z_Y_WALL", "Z_X_WALL", "Z_Y_X_WALL", "MASK"], type); - function y_road(type) = !has(["Y_WALL", "Y_X_WALL", "Z_Y_WALL", "Z_Y_X_WALL"], type); + function y_road(type) = !has(["Y_WALL", "Y_X_WALL", "Z_Y_WALL", "Z_Y_X_WALL", "MASK"], type); - function x_road(type) = !has(["X_WALL", "Y_X_WALL", "Z_X_WALL", "Z_Y_X_WALL"], type); + function x_road(type) = !has(["X_WALL", "Y_X_WALL", "Z_X_WALL", "Z_Y_X_WALL", "MASK"], type); module drawCell(cell_width, road_width, channels) { half_cw = cell_width / 2; diff --git a/examples/maze/maze3d_sphere.scad b/examples/maze/maze3d_sphere.scad index bb17d8a3..0e5a601c 100644 --- a/examples/maze/maze3d_sphere.scad +++ b/examples/maze/maze3d_sphere.scad @@ -1,8 +1,6 @@ use ; use ; -use ; -use ; -use ; +use ; radius = 6; cell_width = 15; @@ -30,57 +28,5 @@ module maze3d_sphere() { mz = mz_cube_initialize(mask = mask_sphere(radius)); cells = mz_cube(start = [radius, radius, radius] / 2, init_cells = mz); - - layers = len(cells); - rows = len(cells[0]); - columns = len(cells[0][0]); - - for(z = [0:layers - 1], y = [0:rows - 1], x = [0:columns - 1]) { - cell = cells[z][y][x]; - type = mz_cube_get(cell, "t"); - - if(type != "MASK") { - channels = [ - z_road(type) , - z != 0 && z_road(mz_cube_get(cells[z - 1][y][x], "t")), - y_road(type), - x_road(type), - y != 0 && y_road(mz_cube_get(cells[z][y - 1][x], "t")), - x != 0 && x_road(mz_cube_get(cells[z][y][x - 1], "t")) - ]; - - translate([x, y, z] * cell_width) - drawCell(cell_width, road_width, channels); - } - } - - function z_road(type) = !has(["Z_WALL", "Z_Y_WALL", "Z_X_WALL", "Z_Y_X_WALL", "MASK"], type); - - function y_road(type) = !has(["Y_WALL", "Y_X_WALL", "Z_Y_WALL", "Z_Y_X_WALL", "MASK"], type); - - function x_road(type) = !has(["X_WALL", "Y_X_WALL", "Z_X_WALL", "Z_Y_X_WALL", "MASK"], type); - - module drawCell(cell_width, road_width, channels) { - half_cw = cell_width / 2; - half_rw = road_width / 2; - - crystal_ball(half_rw); - - rots = [ - [0, 0, 0], - [180, 0, 0], - [-90, 0, 0], - [0, 90, 0], - [90, 0, 0], - [0, -90, 0] - ]; - - for(i = [0:5]) { - if(channels[i]) { - rotate(rots[i]) - linear_extrude(half_cw) - circle(half_rw); - } - } - } + draw_3dmaze(cells, cell_width, road_width); } \ No newline at end of file