$fn=64; cube([25,17,17]); module door () { translate([1,-0.5,1]) color("red"){ cube([23,3,15]); } translate([7.5,-1,3.5]) color("blue"){ cube(10); } for(i = [ [8.5, -1.5, 4.5], [8.5, -1.5, 7.5], [8.5, -1.5, 10.5], [11.5, -1.5, 10.5], [11.5, -1.5, 7.5], [11.5, -1.5, 4.5], [14.5, -1.5, 10.5], [14.5, -1.5, 7.5], [14.5, -1.5, 4.5] ]) { translate(i) color("green"){ cube(2); } } module digitsText(){ translate([9.3, -1, 10.9]) rotate([90,0,0]) linear_extrude(height=0.75) text("1", font="polsyh", size=1); translate([12.2, -1, 10.9]) rotate([90,0,0]) linear_extrude(height=0.75) text("2", font="polsyh", size=1); translate([15.2, -1, 10.9]) rotate([90,0,0]) linear_extrude(height=0.75) text("3", font="polsyh", size=1); translate([9.1, -1, 7.9]) rotate([90,0,0]) linear_extrude(height=0.75) text("4", font="polsyh", size=1); translate([12.2, -1, 7.9]) rotate([90,0,0]) linear_extrude(height=0.75) text("5", font="polsyh", size=1); translate([15.1, -1, 7.9]) rotate([90,0,0]) linear_extrude(height=0.75) text("6", font="polsyh", size=1); translate([9.25, -1, 5]) rotate([90,0,0]) linear_extrude(height=0.75) text("7", font="polsyh", size=1); translate([12.1, -1, 5]) rotate([90,0,0]) linear_extrude(height=0.75) text("8", font="polsyh", size=1); translate([15.1, -1, 5]) rotate([90,0,0]) linear_extrude(height=0.75) text("9", font="polsyh", size=1); } digitsText(); module reset(){ translate([2.5,-1,7.5]) color("green"){ cube([3,3,2]); } } module resetText(){ translate([2.85,0,8.1]) rotate([90,0,0]) linear_extrude(height=1) text("Reset", font="polsyh", size=0.75); } difference(){ reset(); resetText(); } module doorOpener (xdim, ydim, zdim, rdim){ translate([20,-1,7.5]) hull(){ translate ([rdim, rdim, 0]) cylinder(r=rdim, h=zdim); translate ([xdim-rdim, rdim, 0]) cylinder(r=rdim, h=zdim); translate ([rdim, rdim, 0]) cylinder(r=rdim, h=zdim); translate ([xdim-rdim, rdim, 0]) cylinder(r=rdim, h=zdim); } } module doorOpenerText(){ color("purple"){ translate([21.25,-0.5,8.5]) rotate([90,-90,0]) linear_extrude(height=0.75) text("Open", font="polsyh", size=0.75, spacing=2); } } union(){ doorOpener (2,2,7,0.3); doorOpenerText(); } } door();