maindia = 29.2; poleholeh = 5.0; polecovth = 0.4; poleholerad = 6; mainoverlap = 1.5; hookbasew = 3.5; hookfullw = 6; hookheight = 4.5; hookwidth = 5; hookbevelw = 0.75; hookbevelh = 1.5; fingernaildepth = 5; fingernailheight = 2.5; fingernailbased = 0.5; fingernailwidth = 8; bigrad = maindia/2 + mainoverlap; mainth = poleholeh + polecovth; hooklessdepth = hookfullw - hookbasew; module base() { rotate_extrude(convexity=10) mirror([1,0,0]) polygon(points=[[-bigrad, 0], [-bigrad + mainth, -mainth], [0, -mainth], [0, -poleholeh], [-poleholerad, -poleholeh], [-poleholerad, 0]]); } module fingernails() { for (ang=[60,180,300]) rotate([0,0,ang]) translate([bigrad - fingernaildepth, -fingernailwidth/2, -fingernailheight-fingernailbased]) cube([fingernaildepth + 1, fingernailwidth, fingernailheight]); } module hookrim() { rotate_extrude(convexity=10) mirror([1,0,0]) translate([-maindia/2, 0, 0]) polygon(points=[[hooklessdepth, 0], [hookfullw, 0], [hookfullw*0.33, hookheight], [hookbevelw, hookheight], [0, hookheight-hookbevelh], [0, hooklessdepth]]); } module hooktriangles() { for (ang=[0,120,240]) { rotate([0,0,ang]) { translate([0,0,-1]) { linear_extrude(height=hookheight+2) { polygon(points=[[0, 0], [maindia/2 + 1, -hookwidth], [maindia/2 + 1, +hookwidth]]); } } } } } difference(){ base(); fingernails(); } intersection(){ hookrim(); hooktriangles(); }