eps = 0.01; infty = 200; wall = 1.5; thin_wall = 0.6; stab_tube_d = 2.0 + 0.8; stab_tube_l = 15; stab_tube_off = 4; stab_tube_wall = 1.0; pulley_d = 8; fuse_tube_d = 8.0 + 0.2; fuse_tube_l = 25; slot_w = 4; base_d = 15; base_h = 0.6; module body() { // fuse tube cylinder(r = fuse_tube_d/2 + wall, h = fuse_tube_l); // stab tube hull() { translate([fuse_tube_d/2 + wall + stab_tube_off, 0, stab_tube_d/2+stab_tube_wall]) rotate([0, 90, 0]) cylinder(r = stab_tube_d/2+stab_tube_wall, h = stab_tube_l); translate([fuse_tube_d/2 + wall + stab_tube_off, -stab_tube_d/2, 0]) cube([stab_tube_l, stab_tube_d, eps]); } // joiner hull() { // stab tube tip translate([fuse_tube_d/2 + wall + stab_tube_off + stab_tube_l - eps, -thin_wall/2, stab_tube_d + 1.5*stab_tube_wall]) cube([eps, thin_wall, eps]); // fuse tube tip translate([fuse_tube_d/2 + wall/2, -thin_wall/2, fuse_tube_l - eps]) cube([eps, thin_wall, eps]); translate([fuse_tube_d/2 + wall/2, -3*stab_tube_wall/2, stab_tube_d+1.5*stab_tube_wall]) cube([slot_w+wall, 3*stab_tube_wall, stab_tube_off]); } } difference() { body(); // fuse tube translate([0, 0, -eps]) cylinder(r = fuse_tube_d/2, h = fuse_tube_l + 2*eps); // fuse slot translate([-fuse_tube_d, -slot_w/2, -eps]) cube([fuse_tube_d, slot_w, fuse_tube_l + 2*eps]); // stab tube translate([0, 0, stab_tube_d/2+stab_tube_wall]) rotate([0, 90, 0]) cylinder(r = stab_tube_d/2, h = stab_tube_l + stab_tube_off + fuse_tube_d/2 + wall + eps, $fn = 6); // pulley translate([fuse_tube_d/2+wall, 0, stab_tube_d/2+stab_tube_wall]) rotate([0, 90, 0]) rotate([0, 0, 90]) cylinder(r = pulley_d/2, h = stab_tube_off, $fn = 6); // bottom side translate([-fuse_tube_d/2-wall, 0, pulley_d/2 + stab_tube_d + 1.5*stab_tube_wall]) rotate ([0, 30, 0]) translate([-infty, -infty/2, -infty/2]) cube(infty); }