| @ -0,0 +1,73 @@ | |||||
| max_x = 18.95; | |||||
| max_y = 10.9; | |||||
| max_z = 3.6; | |||||
| btm_x = 12.3; | |||||
| btm_z = 1.6; | |||||
| rbt_x = 1; | |||||
| rbt_h = 1.75; | |||||
| mid_x = 7; | |||||
| mid_y = 7.2; | |||||
| grp_x = 4.5; | |||||
| grp_y = 11.75; | |||||
| grp_z = 1.5; | |||||
| tri_y = 2.56; | |||||
| tri_z = 1; | |||||
| tri_d = 5; | |||||
| tri_a = 30; | |||||
| union() { | |||||
| // main part | |||||
| difference() { | |||||
| // overall shape | |||||
| cube([max_x, max_y, max_z]); | |||||
| // bottom clearance | |||||
| translate([(max_x-btm_x)/2,-1,-1]) | |||||
| cube([btm_x,max_y+2,btm_z+1]); | |||||
| // rabbets | |||||
| translate([-1,-1,rbt_h]) | |||||
| cube([rbt_x+1,max_y+2,max_z-rbt_h+1]); | |||||
| translate([max_x-rbt_x,-1,rbt_h]) | |||||
| cube([rbt_x+1,max_y+2,max_z-rbt_h+1]); | |||||
| translate([(max_x-mid_x)/2,-1,-1]) | |||||
| cube([mid_x,mid_y+1,max_z+2]); | |||||
| } | |||||
| // grip | |||||
| translate([ | |||||
| (max_x-grp_x)/2, | |||||
| (-grp_y+mid_y), | |||||
| btm_z | |||||
| ]) | |||||
| union() { | |||||
| // main grip section | |||||
| difference() { | |||||
| cube([grp_x, grp_y+1, grp_z]); | |||||
| translate([0,0,grp_z/2]) | |||||
| rotate([0,0,45]) | |||||
| cube([1,5,grp_z+1], center = true); | |||||
| translate([grp_x,0,grp_z/2]) | |||||
| rotate([0,0,45]) | |||||
| cube([5,1,grp_z+1], center = true); | |||||
| } | |||||
| // triangular catch | |||||
| translate([0,tri_d,-tri_z]) | |||||
| difference() { | |||||
| cube([grp_x,tri_y,tri_z]); | |||||
| translate([-1,tri_y,tri_z]) | |||||
| rotate([tri_a-180,0,0]) | |||||
| cube([grp_x+2,tri_y,tri_z]); | |||||
| } | |||||
| } | |||||
| } | |||||