--- /dev/null
+eps = 0.01;
+infty = 100;
+
+// TODO: subtract 2*spring_w - something from these:
+v_thick = 4 + 0.3; // thickness of the vertical glass
+h_thick = 2 + 0.3; // thickness of the horizontal glass
+
+o_wall = 2.5;
+i_wall = 1.5;
+body = 14;
+
+spring_r = 4;
+spring_w = 0.7;
+spring_off = 2.5;
+
+module spring() {
+ intersection() {
+ translate([-eps, -infty/2, -infty/2])
+ cube(infty);
+
+ translate([-spring_r + spring_w, 0, 0])
+ cylinder(r = spring_r, h = body, $fn = 24);
+ }
+}
+
+module body() {
+ difference() {
+ cube([2*o_wall+i_wall+v_thick+h_thick, body, body]);
+ // vertical glass
+ translate([o_wall, body-o_wall-infty, -infty/2])
+ cube([v_thick, infty, infty]);
+ // horizontal glass
+ translate([o_wall+v_thick+i_wall, -infty/2, body-o_wall-infty])
+ cube([h_thick, infty, infty]);
+ }
+ translate([o_wall, spring_off, 0])
+ rotate([0,0,0]) spring();
+ translate([o_wall+v_thick, spring_off, 0])
+ rotate([0,0,180]) spring();
+ translate([o_wall+v_thick+i_wall, 0, spring_off])
+ rotate([-90,0,0]) spring();
+ translate([o_wall+v_thick+i_wall+h_thick, 0, spring_off])
+ rotate([-90,180,0]) spring();
+}
+
+translate([0, 0, body]) scale([-1,1,1]) rotate([180, 0, 0])
+ body();
+