include ; wall = 1.5; body_l = 50; body_w = 17.8; slot_w = 2.7; slot_depth = 2.5; clip_l = 10; clip_h = 0.7*slot_depth; clip_w1 = 0.5*body_w; clip_w2 = 2; Tx(-wall) hull() { Ty(wall) cube([wall, body_l-2*wall, body_w]); Tx(wall/2) cube([wall/2, body_l, body_w]); } // bottom slot Ty(slot_depth) cube([slot_w + wall, wall, body_w]); Tx(slot_w) Ty(slot_depth+wall/2) Rz(10) Ty(-slot_depth-wall/2) cube([wall, slot_depth + wall/2, body_w]); // top clip Ty(body_l-slot_depth-wall) { intersection() { hull() { Tz(body_w/2-clip_w1/2) cube([eps, slot_depth+wall, clip_w1]); cube([clip_l, slot_depth+wall, clip_w2]); } union() { cube([slot_w + wall, wall, body_w]); Tx(slot_w) hull() { cube([eps, wall+clip_h, body_w]); cube([clip_l-slot_w, wall/2, body_w]); } } } cube([slot_w/2, wall, body_w]); } // center Ty(body_l/2-wall) cube([wall, 2*wall, wall]);