// -*- C -*-
+include <utils.scad>
+
rod_dia = 8+2;
thick = 8;
screw_dia = 3.5 + 0.75;
screw_head_dia = 8.2 + 1.0;
rod_offset = 14 + 2;
+mainheight = 25;
width = 40;
+rearthick = 4;
+screw_head_depth = 2;
+
+// calculated
+
+d = rod_dia/2 + thick/2;
+yminc = -d;
+ymin = yminc-thick/2;
+ymaxc = mainheight;
+ymax = mainheight+thick/2;
+
+cutdepth = rod_offset - rod_dia/2 - rearthick;
+
+cut_z0 = screw_head_dia/2;
+cut_z1 = width/2 - rearthick;
+
+cutslopez = cutdepth * 0.5;
module C() {
- circle(r = rod_dia/2, $fn=20);
+ circle(r = thick/2, $fn=30);
}
module Profile() {
- d = rod_dia/2 + thick/2;
+ e = rod_offset;
hull(){
translate([-d, 0]) C();
translate([-d,-d]) C();
}
+ 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();
+ }
+ }
}
-Profile();
+//ProfileDemo();
+Hook();