--- /dev/null
+eps = 0.01;
+infty = 100;
+
+wall = 1.5;
+
+led_d = 10 + 0.5;
+led_angle = 10;
+led_depth = 4;
+led_x = led_d/2+0.75;
+
+body_x = led_d + 2*led_x + 15;
+body_d = 14;
+top_off = body_d*tan(led_angle);
+body_y = led_d + 2*top_off + 5*wall;
+base_w = led_d + 4*wall;
+
+screw_d = 3.8;
+screw_head = 8;
+// screw_y = led_d/2+screw_head/2+wall;
+screw_x = body_x/2 +wall + screw_head/2;
+screw_wall = 2.5;
+
+cable_w = 7;
+cable_h = screw_wall;
+
+module body() {
+ hull() {
+ for (i = [-1, 1]) translate([i*led_x, 0, 0])
+ cylinder(r = base_w/2, h = eps);
+ // translate([-led_x-led_d/2-wall, -led_d/2-wall, 0])
+ // cube([2*led_x + led_d + 2*wall, led_d+2*wall, eps]);
+ translate([-body_x/2, -body_y/2, body_d-screw_wall])
+ cube([body_x, body_y, screw_wall]);
+ for (i = [-1, 1]) scale([i, 1, 1]) {
+ translate([screw_x-screw_head/2, -screw_head/2-wall, body_d-screw_wall])
+ cube([screw_head, screw_head+2*wall, screw_wall]);
+ translate([screw_x-screw_head/2, -screw_head/2-wall, 0])
+ cube([screw_head/2, screw_head+2*wall, eps]);
+ }
+ }
+};
+
+
+module main_hole() {
+ hull() {
+ for (i = [-1, 1])
+ rotate([led_angle, 0, 0]) {
+ translate([i*led_x, 0, led_depth])
+ cylinder(r = led_d/2+wall/2, h = eps);
+ }
+ translate([-body_x/2+wall, -body_y/2+wall, body_d-screw_wall])
+ cube([body_x-2*wall, body_y-2*wall, screw_wall+eps]);
+ }
+ for (i = [-1, 1])
+ rotate([led_angle, 0, 0])
+ translate([i*led_x, 0, led_depth])
+ cylinder(r = led_d/2+wall/2, h = infty);
+}
+
+difference() {
+ body();
+ // LED holes
+ for (i = [-1, 1])
+ rotate([led_angle, 0, 0])
+ translate([i*led_x, 0, -infty/2])
+ cylinder(r = led_d/2, h = infty);
+ // main hole
+ difference() {
+ main_hole();
+// translate([-screw_head/2-wall, screw_y-screw_head/2-wall, 0])
+// cube([screw_head+2*wall, screw_head+2*wall, infty]);
+ };
+ for (i = [-1, 1]) scale([i, 1, 1]) {
+ // screw head hole
+ translate([screw_x-screw_head/2, -screw_head/2, -eps])
+ cube([screw_head+wall, screw_head, body_d-screw_wall]);
+ // screw hole
+ translate([screw_x-screw_d/2, -screw_head/2, -eps])
+ cube([screw_d, screw_head, infty]);
+ }
+ // cable hole
+ translate([-led_x, 0, 0])
+ rotate([0, 0, 30])
+ translate([-infty, -cable_w/2, body_d-cable_h])
+ cube([infty, cable_w, cable_h+eps]);
+}