eps = 0.01; infty = 200; tube_d = 8.0 + 0.5; tube_slot = 6.5; wall = 1.2; side_w = 7; corner_d = 10; thin_wall = 0.6; supp_xoff = 0.85 * side_w; module body(fuse_w, fuse_h, body_h) { // base_plate translate([-fuse_w/2, -fuse_h/2, 0]) cube([fuse_w, fuse_h, thin_wall]); // fuse tube translate([0, fuse_h/2-tube_d/2-wall, 0]) cylinder(r = tube_d/2+wall, h = body_h); // side walls for (x = [-1, 1]) scale([x, 1, 1]) translate([fuse_w/2-thin_wall, -fuse_h/2, 0]) cube([thin_wall, fuse_h, body_h]); for (y = [-1, 1]) scale([1, y, 1]) translate([-fuse_w/2, fuse_h/2-thin_wall, 0]) cube([fuse_w, thin_wall, body_h]); // side wall supports supp_zoff = body_h-thin_wall; for (x = [-1, 1]) scale([x, 1, 1]) hull() { translate([fuse_w/2-supp_xoff, -fuse_h/2, 0]) cube([thin_wall, fuse_h, thin_wall]); translate([fuse_w/2-thin_wall, -fuse_h/2, supp_zoff]) cube([thin_wall, fuse_h, thin_wall]); } for (y = [-1, 1]) scale([1, y, 1]) hull() { translate([-fuse_w/2, fuse_h/2-supp_xoff, 0]) cube([fuse_w, thin_wall, thin_wall]); translate([-fuse_w/2, fuse_h/2-thin_wall, supp_zoff]) cube([fuse_w, thin_wall, thin_wall]); } } module main(fuse_w, fuse_h, body_h) { difference() { body(fuse_w, fuse_h, body_h); // hole in base plate hull() { for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1]) translate([-fuse_w/2+side_w+corner_d/2, -fuse_h/2+side_w+corner_d/2, -eps]) cylinder(r = corner_d/2, h = thin_wall + 2*eps); } // fuse tube translate([0, fuse_h/2-tube_d/2-wall, -eps]) cylinder(r = tube_d/2, h = body_h + 2*eps); // fuse tube slot translate([-tube_slot/2, 0, -eps]) cube([tube_slot, fuse_h/2-tube_d/2-wall, body_h +2*eps]); } } main(42, 37, 12); translate([45, 0, 0]) main(30, 25, 8);