+infty = 100;
+eps = 0.01;
+
+lens_size = 9;
+lens_depth = 2;
+wall = 1.5;
+
+difference() {
+ translate([-lens_size/2-wall, 0, 0])
+ cube([lens_size+2*wall, 2*wall+lens_depth, wall+lens_size]);
+ // lens body
+ translate([-lens_size/2, wall, wall])
+ cube([lens_size, lens_depth, lens_size + eps]);
+ // lens front
+ translate([-lens_size/2+wall, wall, -eps])
+ cube([lens_size-2*wall, lens_depth+wall+eps, lens_size + wall + 2*eps]);
+}
+
+base_d = 5;
+rear_l = 20;
+
+// rear base
+translate([-base_d/2, -rear_l, 0])
+ cube([base_d, base_d, wall]);
+
+// rear stem
+hull() {
+ translate([-wall/2, -rear_l+base_d/2, 0])
+ cube([wall, base_d/2, wall]);
+ translate([-wall/2, 0, 0])
+ cube([wall, eps, 3*wall]);
+}
+
+side_l = 20;
+for (i=[-1, 1]) scale([i, 1, 1]) {
+ // side squares
+ translate([side_l-base_d, -base_d, 0])
+ cube([base_d, base_d, wall]);
+
+ // side stem
+ hull() {
+ translate([side_l-base_d/2, -base_d/2, 0])
+ cylinder(r = wall, h = wall, $fn = 32);
+ translate([lens_size/2+wall-eps, 0, 0])
+ cube([eps, wall, 3*wall]);
+ }
+
+ // side to rear beam
+ hull() {
+ translate([side_l-base_d/2, -base_d/2, 0])
+ cylinder(r = wall/2, h = wall, $fn = 32);
+ translate([0, -rear_l+base_d/2, 0])
+ cylinder(r = wall, h = wall, $fn = 32);
+ }
+}