infty = 200; eps = 0.05; tube_d = 31.8; tube_d1 = 28; body_w = 10; body_h = 30; wall = 2; led_d = 3 + 0.5; zip_w = 3.5; zip_h = 2.5; top_w = 6+2*wall; top_led_h = body_h-9; cable_w = 6; cable_h = 3; module body() { hull() { cylinder(r = tube_d/2 + wall, h = body_w); translate([body_h + tube_d/2, 0, 0]) scale([0.75, 1, 1]) cylinder(r = top_w/2, h = body_w); } } module chamber() { /* intersection() { hull() { translate([0, -tube_d/2, wall]) cube([eps, infty, infty]); translate([tube_d/2+body_h-eps, -top_w/2+wall, wall]) cube([eps, infty, infty]); } translate([tube_d/2 + 2*wall, -tube_d/2, 0]) cube([body_h-3*wall-5, tube_d+2*wall, body_w+eps]); } */ difference() { hull() { translate([0, 0, wall]) cylinder(r = tube_d/2, h = body_w); translate([tube_d/2+body_h-eps, 0, wall]) scale([0.75, 1, 1]) cylinder(r = top_w/2-wall, h = body_w); } // bottom part translate([0, -tube_d/2-wall-eps, 0]) cube([tube_d/2+wall+zip_h/2, tube_d+2*wall, body_w+2*wall]); // top covered part translate([top_led_h + tube_d/2, -tube_d/2, body_w-wall]) cube([infty, tube_d, 2*wall]); // wall with hole for LED translate([top_led_h + tube_d/2, 1, wall]) cube([wall, infty, infty]); } } module holder() { difference() { body(); // cut off the bottom part translate([-infty+tube_d/4, -infty/2, -infty/2]) cube(infty); // main tube translate([0, 0, -eps]) cylinder(r1 = tube_d1/2, r2 = tube_d/2, h = body_w + 2*eps); // zip tie hole scale([1, 1.05, 1]) translate([0, 0, body_w/2 - zip_w/2]) rotate_extrude(convexity = 10) { translate([tube_d/2 + wall, 0, 0]) square(size = [zip_h, zip_w]); } chamber(); // front hole translate([tube_d/2 + wall + zip_h/2, 0, wall]) cube([top_led_h - wall - zip_h/2, tube_d, body_h]); // LED hole translate([tube_d/2+top_led_h+2*wall,1.5*wall, body_w/2-0.5]) rotate([-15, -65, 0]) cylinder(r = led_d/2, h = 10); // cable hole hull() { translate([tube_d/2 + wall + zip_h/2, -10, body_w/2-zip_w/2]) cube([cable_h, cable_w, eps]); translate([tube_d/2, -10, -eps]) cube([cable_h, cable_w, eps]); } } } holder();