11 rail_depth = rail_thick + wall;
25 cylinder(r = lens_d/2 + 2*wall, h = body_l);
27 translate([-rail_ex/2-wall, -lens_d/2-rail_depth-2*wall, 0])
28 cube([rail_ex+2*wall, lens_d/2+rail_depth+2*wall, body_l]);
31 translate([0, 0, -eps])
32 cylinder(r = lens_d/2 + wall, h = body_l+2*eps);
33 // cut the top third of the cylinder
34 translate([-infty/2, lens_d/2*sin(30) + wall, -eps])
38 translate([-rail_ex/2, -lens_d/2-2*wall-rail_thick, -eps])
39 cube([rail_ex, rail_thick, body_l+2*eps]);
41 translate([-rail_ex/2-eps, -lens_d/2-2*wall-beam_w, rail_in_l-beam_l])
42 cube([rail_ex+2*eps, beam_w+eps, beam_l]);
45 translate([-rail_ex/2, -lens_d/2-2*wall-rail_depth-eps, rail_in_l])
46 cube([rail_ex, rail_depth, body_l+2*eps]);
48 translate([-rail_in/2, -lens_d/2-2*wall-rail_depth-eps, -eps])
49 cube([rail_in, rail_depth+eps, body_l+2*eps]);
52 for (angle = [-27, 27, 120, 240]) rotate([0, 0, angle])
53 translate([0, -lens_d/2-wall, -2*eps])
54 cylinder(r = wall, h = body_l + 4*eps);
56 // slanted cylinder cut
57 translate([-infty/2, cos(60)*lens_d/2, body_l+lens_side_l])
60 cylinder(r = body_l/2, h = infty);