raild = 64.9; railh = 18.5; clipt = 7; clipt = 3; module rail_latch(x, y, z, m) { rotate([0,m*5,0]) 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 back_latch(x, y, z, m) { union() { translate([0,0,2.99]) translate([1.35,0,-8]) cube([x-0.1,y,z+15], center=true); translate([-3,0,-23]) cube([x-0.5,y,3], center=true); translate([-1.15,0,-19.9]) rotate([0,30,0]) cube([x+0.5,y,7], 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]) back_latch(5,clipt,24,1); translate([-raild/2-2,0,-5]) 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([-37.5,1,10]) rotate([0,-90,0]) hook(); translate([0,1,0]) rail_clip(); } } rotate([90,0,0]) hooked_rail_clip();