module board(x, y, z, length, width, height) { difference() { translate([x, y, z]) color("#472d02ad") cube([length, width, height]); translate([x+1, y+1, z+1]) color("#f7b03ead") cube([length-2, width-2, height]); }; } module wall(x, y, z, l, w, h) { translate([x, y, z]) color("red") cube([l, w, h]); } // --- COLLECT WALL DATA --- wall_data = [ [10, 10, 1, 2, 20, 5], [10, 30, 1, 10, 2, 5], [20, 30, 1, 2, 5, 5], [20, 35, 1, 10, 2, 5], [30, 45, 1, 20, 2, 5], [30, 45, 1, 2, 15, 5], [20, 60, 1, 12, 2, 5], [20, 60, 1, 2, 10, 5], [20, 70, 1, 5, 2, 5], [15, 80, 1, 15, 2, 5], [15, 80, 1, 2, 20, 5], [15, 100, 1, 15, 2, 5], [30, 100, 1, 2, 5, 5], [50, 90, 1, 20, 2, 5], [70, 82, 1, 2, 10, 5], [70, 80, 1, 10, 2, 5], [80, 60, 1, 2, 22, 5], [80, 60, 1, 10, 2, 5], [90, 50, 1, 2, 12, 5], [90, 50, 1, 5, 2, 5], [95, 50, 1, 2, 35, 5], [50, 70, 1, 2, 20, 5], [50, 70, 1, 12, 2, 5], [60, 45, 1, 2, 25, 5], [60, 45, 1, 20, 2, 5], [80, 20, 1, 2, 27, 5], [80, 20, 1, 20, 2, 5], [100, 20, 1, 2, 20, 5], [100, 40, 1, 5, 2, 5], [35, 6, 1, 2, 20, 5], [35, 20, 1, 20, 2, 5], [55, 20, 1, 2, 10, 5], [55, 30, 1, 10, 2, 5], [65, 15, 1, 2, 20, 5] ]; projection(cut = true) { translate([0, 0, -2]) { board(5, 5, 0, 100, 100, 8); for (w = wall_data) { wall(w[0], w[1], w[2], w[3], w[4], w[5]); } } }