eps = 0.01; infty = 100; wall = 1; ziptie_w = 2.5 + 0.5; ziptie_h = 2.0 + 0.5; fork_diam = 30; ring_h = 2*wall + ziptie_h; base_d = 10; base_h = 4.5; hole_d = 3.5 + 0.5; // cuircular base with screw hole difference() { hull() { cylinder(r = base_d/2, h = base_h); translate([-base_d/2-wall, -base_d/2, 0]) cube([wall, base_d, base_h]); } translate([0, 0, -infty/2]) cylinder(r = hole_d/2, h = infty); for (angle = [0:30:360]) rotate([0, 0, angle]) translate([0, 0, base_h]) rotate([0, 90, 0]) cylinder(r1 = 0, r2 = 1, h = base_d/2+eps, $fn=4); } // ziptie holding part translate([-base_d/2-fork_diam/2 - ring_h, 0, 0]) intersection() { translate([0, -base_d/2-eps, 0]) cube([infty, base_d+2*eps, 15]); translate([0, -base_d/2, base_h]) rotate([-90, 0, 0]) difference() { scale([1, 0.8, 1]) cylinder(r = fork_diam/2 + ring_h, h = base_d); // fork itself translate([0, 0, -eps]) cylinder(r = fork_diam/2, h = base_d + 2*eps); // two ziptie holes for (z = [wall, base_d - wall - ziptie_w]) translate([0, 0, z]) difference() { cylinder(r = fork_diam/2 + wall + ziptie_h, h = ziptie_w); translate([0, 0, -eps]) cylinder(r = fork_diam/2 + wall, h = ziptie_w+2*eps); } }}