eps = 0.01; infty = 100; module chamber() { hull() { for (i = [-1, 1]) { translate([-3, 0, 0.5]) scale([1.25, 1, 1]) cylinder(r1 = 8, r2 = 9, h = 4, $fn = 3); rotate([0, 35*i, 0]) { translate([0, 0, 7]) rotate([0, 0, 45]) cylinder(r = 10/2, h = 4, $fn = 4); } } } for (i = [-1, 1]) { rotate([0, 35*i, 0]) translate([0, 0, 10]) cylinder(r = 6.0/2, h = 5, $fn = 6); intersection() { rotate([0, 35*i, 0]) translate([0, 0, 15-eps]) cylinder(r = 8/2, h = 10, $fn = 6); translate([-30/2, -15/2, eps]) cube([30, 15, 15]); } difference() { translate([-32/2, -16/2, 15]) cube([32, 16, 20]); translate([screw_x-12/2, screw_y-12/2,0]) cube([12, 12, infty]); } } } screw_x = 5; screw_y = 11; module body() { hull() { // top cube translate([-36/2, -20/2, 15]) cube([36, 20, 5]); // bottom triangle translate([-3, 0, 0]) scale([1.5, 1, 1]) cylinder(r = 11, h = eps, $fn = 3); // screw base translate([screw_x-12/2, screw_y-12/2,17]) cube([12, 12, 3]); } } module light() { difference() { body(); chamber(); // screw head hole translate([-4+screw_x, screw_y-8/2, 17-infty]) cube([8, infty, infty]); // screw hole translate([screw_x-4, screw_y-4/2, -eps]) cube([8, 4, infty]); // cable hole translate([-9-eps, 0, 17]) cube([8, infty, infty]); // debug // translate([-infty/2, -infty, -infty/2]) cube(infty); } } light();