// hook for the aluminium kitchen bar from IKEA infty=200; eps=0.01; bar_w = 3.5 + 0.7; bar_h = 29.3 + 0.5; bar_to_wall = 27; // incl. the bar itself wall = 3.1; upper_overhang = 10.0 - wall; lower_overhang = 2.0; body_h = 8; clip_front = 5; // stronger than wall for this object // coordinates: front end of the bar is the xz plane, centered by the x axis, // +x is the upper part, -x is lower, +y is front module clip(body_h) { // front part translate([-bar_h/2-wall, 0, 0]) cube([bar_h + 2*wall, clip_front, body_h]); // upper and lower horizontal bars for (x = [-1, 1]) scale([x, 1, 1]) translate([bar_h/2, -bar_w -wall, 0]) cube([wall, bar_w + 2*wall, body_h]); // upper overhang translate([bar_h/2-upper_overhang, -bar_w-wall, 0]) cube([upper_overhang + wall, wall, body_h]); // lower overhang translate([-bar_h/2-wall, -bar_w-wall, 0]) difference() { cube([lower_overhang + wall, wall, body_h]); translate([lower_overhang + wall, 2*wall/3, 0]) rotate([0, 0, -45]) translate([0, -infty/2, -infty/2]) cube(infty); } } // make the top of the clip be at x = 0 translate([-bar_h/2-wall, 0, 0]) clip(body_h); top_len = 55; hook_y = 40; hook_base_w = 12; hook_xoff = 15; // from the top hook_end_l = 2; translate([-eps, -bar_w-wall, 0]) hull() { cube([eps, clip_front + bar_w + wall, body_h]); translate([top_len-eps, 0, 0]) cube([eps, wall, body_h]); } hull() { translate([top_len-wall, hook_y, 0]) cube([wall, eps, body_h]); translate([top_len-hook_xoff-hook_base_w, -bar_w-wall, 0]) cube([hook_base_w, eps, body_h]); } translate([top_len-wall, hook_y-wall, 0]) cube([wall+hook_end_l, wall, body_h]);