eps = 0.01; infty = 200; wall = 1.5; body_h = 87 + 2 + 2*wall; body_w = 93 + 2 + 2*wall; screen_w = 75.5; screen_h = 51; screw_hd = 88; screw_vd = 65; screw_off = 3.5 + wall; screw_d = 3; screw_support_d = 9; screw_to_disp_x = 5; screw_to_disp_y = 6.5; screen_to_screw_z = 8; screw_to_reset_y = 12.5+screw_vd; reset_button_d = 10; reset_lever_w = 30; reset_lever_h = reset_button_d/2; screw_to_dial_x = 75; screw_to_dial_y = 10+screw_vd; dial_hole_d = 7; body_z = 20 + wall; difference() { cube([body_w, body_h, body_z]); difference() { // inner space w/o screw supports translate([wall, wall, wall]) cube([body_w-2*wall, body_h-2*wall, body_z]); for (x = [0, 1]) for (y = [0, 1]) translate([screw_off + x*screw_hd, screw_off + y*screw_vd, -eps]) cylinder (r = screw_support_d/2, h = screen_to_screw_z + 2*eps); } // screen hole hull() { translate([screw_off + screw_to_disp_x, screw_off + screw_to_disp_y, wall]) cube([screen_w, screen_h, eps]); translate([screw_off + screw_to_disp_x - wall/2, screw_off + screw_to_disp_y - wall/2, -eps]) cube([screen_w+wall, screen_h+wall, eps]); } // screw holes for (x = [0, 1]) for (y = [0, 1]) translate([screw_off + x*screw_hd, screw_off + y*screw_vd, -eps]) cylinder (r = screw_d/2, h = body_z + 2*eps); // dial hole translate([screw_off + screw_to_dial_x, screw_off + screw_to_dial_y, -eps]) cylinder(r = dial_hole_d/2, h = wall + 2*eps); // reset_button translate([screw_off + screw_hd/2, screw_off + screw_to_reset_y, -eps]) difference() { union() { cylinder(r = reset_button_d/2+wall, h = wall + 2*eps); translate([-reset_lever_w, -reset_lever_h/2-wall, 0]) cube([reset_lever_w, reset_lever_h + 2*wall, wall + 2*eps]); } translate([0, 0, -eps]) cylinder(r = reset_button_d/2, h = wall + 4*eps); translate([-reset_lever_w-eps, -reset_lever_h/2, -eps]) cube([reset_lever_w, reset_lever_h, wall + 4*eps]); } }