--- /dev/null
+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]);
+ }
+}