eps = 0.01; infty = 200; wall = 1.5; thin_wall = 0.6; tube_d = 10; tube_zoff = thin_wall + 3; base_w = 60; base_l = 45; /* module body() { hull() { // translate([-fuse_tube_d/2-wall, -fuse_tube_l/2, 0]) // cube([fuse_tube_d + 2*wall, fuse_tube_l, fuse_tube_d + 2*wall]); translate([0, fuse_tube_l/2, fuse_tube_d/2+wall]) rotate([90, 0, 0]) cylinder(r = fuse_tube_d/2+wall, h = fuse_tube_l); translate([-fuse_tube_d/2-wall, -base_l/2+wall/2, 0]) cube([fuse_tube_d + 2*wall, base_l-wall, thin_wall]); } } module holder() { difference() { body(); translate([0, infty/2, fuse_tube_d/2+wall]) rotate([90, 0, 0]) cylinder(r = fuse_tube_d/2, h = infty + 2*eps); translate([-slot_w/2, -infty/2, fuse_tube_d/2+wall]) cube([slot_w, infty, fuse_tube_d/2+wall+eps]); } } */ module body() { // base // scale([1, base_l/base_w, 1]) // cylinder(r = base_w/2, h = thin_wall); translate([-base_w/2, -base_l/2, 0]) cube([base_w, base_l, thin_wall]); // side supports for (y = [-1,1]) for (x = [-1,1]) scale([x, y, 1]) hull() { translate([base_w/2-thin_wall, -base_l/2, 0]) cube([thin_wall, thin_wall, thin_wall]); translate([-thin_wall/2, -base_l/2, 0]) cube([thin_wall, thin_wall, tube_zoff + tube_d-thin_wall]); } // diagonal supports for (y = [-1,1]) for (x = [-1,1]) scale([x, y, 1]) hull() { translate([base_w/2-thin_wall, base_l/3, 0]) cube([thin_wall, thin_wall, thin_wall]); translate([-thin_wall/2, -base_l/2, 0]) cube([thin_wall, thin_wall, tube_zoff + tube_d-thin_wall]); } // under the tube supports for (y = [-1,1]) scale([1, y, 1]) hull() { translate([thin_wall/2, -base_l/4, 0]) cube([thin_wall, thin_wall, thin_wall]); translate([-thin_wall/2, -base_l/2, 0]) cube([thin_wall, thin_wall, tube_zoff + 2*tube_d/3]); } // side bottom tube supports for (y = [-1,1]) for (x = [-1,1]) scale([x, y, 1]) hull() { translate([tube_d/2, base_l/3, 0]) cube([thin_wall, base_l/6, tube_zoff + tube_d/2]); } // upper cylinder clip for (y = [-1,1]) scale([1, y, 1]) translate([0, base_l/3, tube_d/2 + tube_zoff]) intersection() { rotate([-90, 0, 0]) cylinder(r = tube_d/2 + thin_wall, h = base_l/6); translate([-tube_d/2-thin_wall, 0, 0]) cube([tube_d + 2*thin_wall, base_l/6, tube_d/3]); } } difference() { body(); // main tube translate([0, -base_l/2-eps, tube_d/2+tube_zoff]) rotate([-90, 0, 0]) cylinder(r = tube_d/2, h = base_l + 2*eps); }