+eps = 0.01;
+infty = 200;
+
+tube_d = 8.0 + 0.5;
+tube_slot = 6;
+wall = 1.2;
+
+fuse_w = 45;
+fuse_h = 40;
+
+body_h = 15;
+side_w = 8;
+corner_d = 10;
+
+thin_wall = 0.6;
+supp_xoff = 0.75 * side_w;
+supp_zoff = 0.75 * body_h;
+
+module body() {
+ // 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
+ 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]);
+ }
+}
+
+difference() {
+ body();
+ // 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]);
+}
+