1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-21 05:52:16 +02:00
This commit is contained in:
Justin Lin
2022-04-03 13:08:42 +08:00
parent 336648434c
commit fb4a626707
2 changed files with 48 additions and 57 deletions

View File

@@ -34,12 +34,11 @@ module maze_masking(start, mask, cell_width, wall_thickness, wall_height, base_h
mz_square_initialize(mask = mask) mz_square_initialize(mask = mask)
); );
pts = contour ? vx_contour([ pts = contour ?
for(y = [0:rows - 1]) vx_contour([
for(x = [0:columns - 1]) for(y = [0:rows - 1], x = [0:columns - 1]) if(mask[rows - y - 1][x] == 1) [x, y]
if(mask[rows - y - 1][x] == 1) ], sorted = true) :
[x, y] [];
], sorted = true) : [];
walls = mz_squarewalls(cells, cell_width); walls = mz_squarewalls(cells, cell_width);
@@ -47,8 +46,7 @@ module maze_masking(start, mask, cell_width, wall_thickness, wall_height, base_h
linear_extrude(wall_height) linear_extrude(wall_height)
intersection() { intersection() {
union() { union() {
for(wall = walls) { for(wall = walls, i = [0:len(wall) - 2]) {
for(i = [0:len(wall) - 2]) {
if(wall[i][0] != 0 && wall[i][1] != 0) { if(wall[i][0] != 0 && wall[i][1] != 0) {
hull() { hull() {
translate(wall[i]) translate(wall[i])
@@ -58,16 +56,13 @@ module maze_masking(start, mask, cell_width, wall_thickness, wall_height, base_h
} }
} }
} }
} for(y = [0:rows - 1], x = [0:columns - 1]) {
for(y = [0:rows - 1]) {
for(x = [0:columns - 1]) {
if(mask[rows - y - 1][x] == 0) { if(mask[rows - y - 1][x] == 0) {
translate([x * cell_width + wall_thickness, y * cell_width + wall_thickness]) translate([x * cell_width + wall_thickness, y * cell_width + wall_thickness])
square(cell_width); square(cell_width);
} }
} }
} }
}
if(contour) { if(contour) {
translate([wall_thickness * 2, wall_thickness * 2]) translate([wall_thickness * 2, wall_thickness * 2])

View File

@@ -5,7 +5,7 @@ use <polyline2d.scad>;
$fn = 48; $fn = 48;
rings = 6; rings = 5;
beginning_number = 5; beginning_number = 5;
cell_width = 2; cell_width = 2;
@@ -29,8 +29,7 @@ module maze_tower() {
r = cell_width * (rings + 1); r = cell_width * (rings + 1);
module maze() { module maze() {
for(rings = mz) { for(rings = mz, cell = rings) {
for(cell = rings) {
ri = cell[0]; ri = cell[0];
ci = cell[1]; ci = cell[1];
type = cell[2]; type = cell[2];
@@ -59,7 +58,6 @@ module maze_tower() {
} }
} }
} }
}
arc(r, 360, wall_thickness); arc(r, 360, wall_thickness);
} }
@@ -77,7 +75,7 @@ module maze_tower() {
circle(r + wall_thickness * 0.4999); circle(r + wall_thickness * 0.4999);
} }
translate([0, 0, -0.1]) translate([0, 0, -0.1])
linear_extrude(wall_height * (mz_leng + 2)) linear_extrude(wall_height * (mz_leng + 2), convexity = 10)
maze(); maze();
} }
last_rings = mz[mz_leng - 1]; last_rings = mz[mz_leng - 1];
@@ -91,15 +89,13 @@ module maze_tower() {
num_stairs = 4; num_stairs = 4;
stair_thickness = wall_thickness / 3; stair_thickness = wall_thickness / 3;
or = r + half_wall_thickness; or = r + half_wall_thickness;
for(ri = [0:2:rings * 2]) { for(ri = [0:2:rings * 2], si = [0:2]) {
for(si = [0:2]) {
r = or - stair_thickness * si - wall_thickness * ri; r = or - stair_thickness * si - wall_thickness * ri;
translate([0, 0, wall_height * ri / 2 + wall_height / num_stairs * (si + 1)]) translate([0, 0, wall_height * ri / 2 + wall_height / num_stairs * (si + 1)])
linear_extrude(wall_height / num_stairs * (3 - si)) linear_extrude(wall_height / num_stairs * (3 - si))
arc(r, 360, stair_thickness, width_mode = "LINE_INWARD"); arc(r, 360, stair_thickness, width_mode = "LINE_INWARD");
} }
} }
}
difference() { difference() {
maze_floors(); maze_floors();