infty = 1000; eps = 0.01; wall = 2; screw_hole = 3.5; screw_l = 3; screw_off = 10; cable_w = 7; cable_h = 3; cable_off = 24; led_w = 10; led_h = 2.5; led_d = (pow(led_w/2, 2) - pow(led_h, 2)) / (2 * led_h); holder_w = 8.5; vert_l = 20; module body() { cube([wall, vert_l + wall, holder_w]); // translate([-10, -wall, 0]) // cube([10+wall, wall+eps, holder_w]); hull() { for (x = [0, cable_w - 2*cable_h]) translate([0, cable_off+x, 0]) cylinder(r = cable_h + wall, h = holder_w, $fn = 64); } translate([-led_w/2, led_d, 0]) cylinder(r = led_d + led_h + wall, h = holder_w); } difference() { body(); translate([-50, 0, -50/2]) cube(50); // screw hole hull() { for (x = [0, screw_l]) translate([-eps, screw_off + x, holder_w/2]) rotate([0, 90, 0]) rotate([0, 0, 90]) cylinder(r = screw_hole/2, h = wall + 2*eps, $fn = 6); } // cable hole hull() { for (x = [0, cable_w - 2*cable_h]) translate([0, cable_off+x, -eps]) cylinder(r = cable_h, h = holder_w + 2*eps, $fn = 64); } // led strip intersection() { translate([-led_w/2, led_d, -eps]) cylinder(r = led_d + led_h, h = holder_w + 2*eps); translate([-50, -50/2, -50/2]) cube(50); } // strip off the vertical part of led strip cylinder translate([wall, -50+screw_off, -50/2]) cube(50); }