--- /dev/null
+eps = 0.01;
+infty = 200;
+
+wall = 1.5;
+thin_wall = 0.6;
+
+stab_tube_d = 3.0 + 0.5;
+stab_tube_d2 = stab_tube_d;
+stab_tube_l = 20;
+
+fuse_tube_d = 8.0;
+fuse_tube_l = 12;
+
+slot_w = 3;
+
+base_d = 15;
+base_h = 0.6;
+
+module body() {
+ // fuse tube
+ hull() {
+ translate([-fuse_tube_d/2-wall, -fuse_tube_l/2, 0])
+ cube([fuse_tube_d + wall, fuse_tube_l, eps]);
+ 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);
+ }
+ // stab tube
+ hull() {
+ translate([-fuse_tube_d/2-wall, fuse_tube_l/2-eps, 0])
+ cube([stab_tube_l, stab_tube_d2+2*eps, eps]);
+ translate([-fuse_tube_d/2-wall, fuse_tube_l/2+stab_tube_d2/2, stab_tube_d2/2+wall])
+ rotate([0, 90, 0])
+ cylinder(r = stab_tube_d2/2+wall+eps, h = stab_tube_l);
+ }
+}
+
+difference() {
+ body();
+ // fuse tube hole
+ translate([0, fuse_tube_l/2+eps, fuse_tube_d/2+wall])
+ rotate([90, 0, 0])
+ cylinder(r = fuse_tube_d/2, h = fuse_tube_l + 2*eps);
+ // fuse tube slot
+ translate([-slot_w/2, -fuse_tube_l/2-eps, fuse_tube_d/2+wall])
+ cube([slot_w, fuse_tube_l + 2*eps, fuse_tube_d/2+wall+eps]);
+
+ // stab tube
+ translate([-fuse_tube_d/2-wall-eps, fuse_tube_l/2 + stab_tube_d2/2, stab_tube_d2/2 +wall])
+ rotate([0, 90, 0])
+ cylinder(r = stab_tube_d2/2, h = stab_tube_l + 2*eps);
+}
+
+// endpoint stopper
+
+translate([0, 2*fuse_tube_l, 0])
+difference() {
+ union() {
+ cylinder(r = stab_tube_d/2 + wall, h = wall);
+ translate([0, 0, wall-eps])
+ cylinder(r1 = stab_tube_d/2 + wall, r2 = stab_tube_d/2+thin_wall, h = wall);
+ }
+ translate([0, 0, -eps])
+ cylinder(r = stab_tube_d/2, h = 2*wall + 2*eps);
+}
+