// hook designed to hook knots on small diameter cord and be as snagless as possible // closed hole diameter cdLoop = 3.1; // hook slot width cdHook = 2; // slot section od bigD = 20; // closed hole section od smallD = 9; // slot angle degSlot = 40; // thickness thick = 5; // minkowski sphere radius, fillet rad sort of filletRad = 2; // sets side bulge. adds strength and beauty. low value will cause failed print. tested at 0.4 bulbousness = 0.4; // 40+ faces for print but it makes minkowski very slow in editing $fn = 45; // diff for slicing off top bottom and loop hole difference(){ //trace sphere for chamfering around union of two cylinders with slot minkowski(){ //two cylinders with a slot cut at around ? degrees difference(){ union(){ cylinder(d = bigD, thick * bulbousness, center = true); // center starts origin, so translate up sin30 and right cos30 translate([cos(degSlot) * bigD/2, sin(degSlot) * bigD/2, 0]){ cylinder(d = smallD, thick * bulbousness, center = true); } } // slot: translate([50, 0, 0]){ cube([100, cdHook + 2 * filletRad, 2], center = true); } // rounded slot pocket: cylinder(d = cdHook + 2 * filletRad, 2, center = true); } // diff sphere(r = filletRad); } // minus: translate([cos(degSlot) * bigD/2, sin(degSlot) * bigD/2, 0]){ cylinder(d = cdLoop, 55, center = true); } for (dir = [-1, 1]) translate([0, 0, dir * (thick / 2 + 1)]){ cube([99, 99, 2], center = true); } }