raild = 64.9; railh = 18.5; clipt = 7; clipt = 3; module rail_latch(x, y, z, m) { difference() { cube([x,y,z], center=true); translate([0*-m,0,10-z]) rotate([0,25*-m,0]) cube([x+1,y+1,z], center=true); //translate([5*-m,0,30.8-z]) rotate([0,5*-m,0]) cube([x+1,y+1,10], center=true); //translate([5*-m,0,30.8-z]) rotate([0,25*-m,0]) cube([x+1,y+1,10], center=true); } } module rail_clip() { //cube([raild, clipt, railh], center=true); union() { translate([raild/2+2,0,-5]) rotate([0,5,0]) rail_latch(5,clipt,30,1); translate([-raild/2-2,0,-5]) rotate([0,-5,0]) rail_latch(5,clipt,30,-1); translate([0,0,railh/2+3.5]) cube([76.5,clipt,7], center=true); } }; module hook() { union() { translate([0,0,3.251]) cube([3,3,6.502], center=true); //translate([0,0,6.5+1.5]) cube([3,3,3], center=true); //translate([5,0,6.5+1.5]) rotate([0,90,0]) rotate([0,0,45]) cylinder(h=7,d1=4.2, d2=1, center=true, $fn=4); translate([2.5,0,6.5+1.5]) cube([8,3,3], center=true); } } module hooked_rail_clip() { union() { translate([-38,1,10]) rotate([0,-90,0]) hook(); translate([0,1,0]) rail_clip(); } } hooked_rail_clip();