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