12 rail_depth = rail_thick + wall;
26 cylinder(r = lens_d/2 + 2*cyl_wall, h = body_l);
28 translate([-rail_ex/2-wall, -lens_d/2-rail_depth-2*wall, 0])
29 cube([rail_ex+2*wall, lens_d/2+rail_depth+2*wall, body_l]);
32 translate([0, 0, -eps])
33 cylinder(r = lens_d/2 + wall, h = body_l+2*eps);
34 // cut the top third of the cylinder
35 translate([-infty/2, lens_d/2*sin(30) + wall, -eps])
39 translate([-rail_ex/2, -lens_d/2-2*wall-rail_thick, -eps])
40 cube([rail_ex, rail_thick, body_l+2*eps]);
42 translate([-rail_ex/2-eps, -lens_d/2-2*wall-beam_w, rail_in_l-beam_l])
43 cube([rail_ex+2*eps, beam_w+eps, beam_l]);
46 translate([-rail_ex/2, -lens_d/2-2*wall-rail_depth-eps, rail_in_l])
47 cube([rail_ex, rail_depth, body_l+2*eps]);
49 translate([-rail_in/2, -lens_d/2-2*wall-rail_depth-eps, -eps])
50 cube([rail_in, rail_depth+eps, body_l+2*eps]);
53 for (angle = [-27, 27, 120, 240]) rotate([0, 0, angle])
54 translate([0, -lens_d/2-cyl_wall, -2*eps])
55 cylinder(r = cyl_wall, h = body_l + 4*eps);
57 // slanted cylinder cut
58 translate([-infty/2, cos(60)*lens_d/2, body_l+lens_side_l])
61 cylinder(r = body_l/2, h = infty);