-module fraen_lens_pin() {
- cylinder(r=4/2, h=23, $fn=32);
- translate([epsilon, 0, -5])
- cylinder(r=3.4/2, h=5+epsilon);
-};
-
-module fraen_lens() {
- cylinder(r1=6, r2=30.9/2, h=23);
- assign(off=10.35) {
- translate([off, off, 0]) fraen_lens_pin();
- translate([off, -off, 0]) fraen_lens_pin();
- translate([-off, off, 0]) fraen_lens_pin();
- translate([-off, -off, 0]) fraen_lens_pin();
- };
-};
-
-module heatsink() {
- translate([-heatsink_length+ 5 +heatsink_width/2, -heatsink_width/2, 0])
- cube([heatsink_length, heatsink_width, heatsink_thickness]);
-}
-
-module seat_holder() {
- translate([-41, 8, 29])
- cube([3, 30, 60], center=true);
-};
-
-module stem_ellipse(h, w, x, y) {
- translate([x, y, 0])
- difference() {
- translate([0, 0, 6])
- scale([1, w/2, h-6])
- rotate([0, 90, 0])
- cylinder(r=1, h=epsilon);
- translate([0, 0, -100]) cube([200, 200, 200], center=true);
- };
-}
-
-module main() {
- difference() {
- union() {
- hull() {
- cylinder(r=34/2, h=33);
- stem_ellipse(h = 15, w = 10, x = -21, y=-5);
- };
- hull() {
- stem_ellipse(h = 15, w = 10, x = -21-epsilon, y=-5);
- stem_ellipse(h = 15, w = 10, x = -33, y=-5);
- };
- hull() {
- stem_ellipse(h = 15, w = 10, x = -33-epsilon, y=-5);
- stem_ellipse(h = 25, w = 15, x = -40+epsilon, y=-2.5);
- };
- translate([-41, 5, 52/2])
- cube([7, 30, 52], center=true);
- // bolt hole ring
- translate([-44+epsilon, 10, 40]) rotate([0, -90, 0]) difference() {
- cylinder(r1=9, r2=6, h=3);
- translate([0, 0, -epsilon])
- cylinder(r=5, h=3+2*epsilon, $fn=6);
- }
- // screw hole ring
- translate([-38-epsilon, 10, 40]) rotate([0, 90, 0]) difference() {
- cylinder(r1=9, r2=6, h=3);
- translate([0, 0, -epsilon])
- cylinder(r=5, h=3+2*epsilon);
- }
- };
- translate([-47, 10, 40]) rotate([0, 90, 0])
- cylinder(r=2.5, h=12);
- translate([0, 0, 6-heatsink_thickness])
- cylinder(r=31/2, h=32);
- translate([0, 0, 6])
- fraen_lens();
- heatsink();
- seat_holder();
- }
- if (debug == 1) {
- translate([0, 0, 6]) color("gray") fraen_lens();
- color("lightblue") heatsink();
- color("lightgreen") seat_holder();
- }
-}
-