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]); } } }