+ difference(){
+ rectfromto([-d,ymin], [e,0]);
+ circle(r= rod_dia/2, $fn=50);
+ }
+ hull(){
+ for (y= [-d, +mainheight]) {
+ translate([d, y]) C();
+ rectfromto([d, y-thick/2], [e, y+thick/2]);
+ }
+ }
+}
+
+module CutProfile(){
+ hull(){
+ for (x = [rod_dia/2 + thick/2, 30]) {
+ for (y= [yminc,ymaxc] ) {
+ translate([x,y]) circle(r = (thick-rearthick)/2, $fn=20);
+ }
+ }
+ }
+}
+
+module ProfileDemo(){
+ Profile();
+ color("red") translate([0,0,1]) CutProfile();
+}
+
+module Cut(less){
+ translate([0,0, cut_z0 + less])
+ linear_extrude(height = cut_z1 - cut_z0 - less*2)
+ CutProfile();
+}
+
+module ScrewHole(){
+ xd = (screw_head_dia-screw_dia)/2;
+ translate([0,0,-50])
+ cylinder(h=100, r= screw_dia/2, $fn=20);
+ hull(){
+ translate([0,0,-xd])
+ cylinder(h=1, r= screw_dia/2, $fn=50);
+ cylinder(h=20, r= screw_head_dia/2, $fn=50);
+ }
+}
+
+module Hook(){
+ difference(){
+ translate([0,0, -width/2])
+ linear_extrude(height=width) Profile();
+
+ for (m=[0,1]) {
+ mirror([0,0,m]) {
+ hull(){
+ Cut(cutslopez);
+ translate([cutdepth,0,0]) Cut(0);
+ }
+ }
+ }
+
+ translate([rod_dia/2 + screw_head_depth,
+ ymaxc - screw_head_dia,
+ 0]) {
+ rotate([0,-90,0])
+ ScrewHole();
+ }
+ }