72 lines
4.2 KiB
OpenSCAD
72 lines
4.2 KiB
OpenSCAD
module bottom_model()
|
|
{
|
|
kbheight = 124;
|
|
kbwidth = 286;
|
|
color([0, 0.6, 0.5])
|
|
translate([0, -220, 0])
|
|
difference() {
|
|
union() {
|
|
hull() {
|
|
translate([width / 2.0 - radius + 24, -height / 2.0 + radius - 4, radius4 / 1.5]) sphere(radius4);
|
|
translate([-width / 2.0 + radius - 24, -height / 2.0 + radius - 4, radius4 / 1.5]) sphere(radius4);
|
|
translate([width / 2.0 - radius + 24, height / 2.0 - radius + 4, radius4 / 1.5]) sphere(radius4);
|
|
translate([-width / 2.0 + radius - 24, , height / 2.0 - radius + 4, radius4 / 1.5]) sphere(radius4);
|
|
|
|
translate([width / 2.0 - radius + 24, -height / 2.0 + radius - 4, 22.0 - radius4 / 1.5]) sphere(radius4);
|
|
translate([-width / 2.0 + radius - 24, -height / 2.0 + radius - 4, 22.0 - radius4 / 1.5]) sphere(radius4);
|
|
translate([width / 2.0 - radius + 24, height / 2.0 - radius + 4, 22.0 - radius4 / 1.5]) sphere(radius4);
|
|
translate([-width / 2.0 + radius - 24 , height / 2.0 - radius + 4, 22.0 - radius4 / 1.5]) sphere(radius4);
|
|
}
|
|
hull() {
|
|
translate([-width / 2.0 + 1, height / 2.0 - 5, radius4 / 1.5 + 4])
|
|
rotate(90, [0, 1, 0])
|
|
cylinder(width - 2, 8.0, 8.0);
|
|
translate([-width / 2.0 + 1, height / 2.0 + 10, radius4 / 1.5 + 20.0])
|
|
rotate(90, [0, 1, 0])
|
|
cylinder(width - 2, 8.0, 8.0);
|
|
}
|
|
}
|
|
union() {
|
|
translate([0, -110, -100]) cube([15, 220, 200]);
|
|
translate([-width / 2.0 + 25, kbheight / 2.0, 20]) cube([30, 40, 30]);
|
|
translate([width / 2.0 - 25 - 30, kbheight / 2.0, 20]) cube([30, 40, 30]);
|
|
translate([-width / 2.0 - 10.0, height / 2.0 + 10, radius4 / 1.5 + 20.0])
|
|
rotate(90, [0, 1, 0])
|
|
cylinder(width + 20, 3.5, 3.5);
|
|
hull() {
|
|
xpass = kbwidth / 2.0 - radius4 - 3.0;
|
|
translate([-xpass, -kbheight / 2.0 + 12 + 6, 30]) sphere(radius4);
|
|
translate([xpass, -kbheight / 2.0 + 12 + 6, 30]) sphere(radius4);
|
|
translate([-xpass, kbheight / 2.0 + 12 - 6, 30]) sphere(radius4);
|
|
translate([xpass, kbheight / 2.0 + 12 - 6, 30]) sphere(radius4);
|
|
translate([-xpass, -kbheight / 2.0 + 12 + 6, 10]) sphere(radius4);
|
|
translate([xpass, -kbheight / 2.0 + 12 + 6, 10]) sphere(radius4);
|
|
translate([-xpass, kbheight / 2.0 + 12 - 6, 10]) sphere(radius4);
|
|
translate([xpass, kbheight / 2.0 + 12 - 6, 10]) sphere(radius4);
|
|
}
|
|
// bottom hole
|
|
translate([-100, -45, -30]) cube([200, 110, 60]);
|
|
// translate([-width / 2 - 8, -45, 5]) cube([width + 20, 124, 60]);
|
|
translate([-kbwidth / 2, -85, 16]) cube([kbwidth, 165, 6.5]);
|
|
translate([-kbwidth / 2 + 2, -85, 2]) cube([kbwidth - 4, 165, 20]);
|
|
// snap fits
|
|
translate([0, -height / 2.0 - 3.1, 9]) snapfit_neg();
|
|
translate([0, -height / 2.0 - 3.1, 17]) snapfit_neg();
|
|
translate([0, height / 2.0 - 1, 9]) rotate(180, [1, 0, 0]) snapfit_neg();
|
|
translate([0, height / 2.0 - 1, 17]) rotate(180, [1, 0, 0])snapfit_neg();
|
|
translate([19, height / 2.0 - 15, -5]) cube([6, 6, 10]);
|
|
translate([-10, height / 2.0 - 15, -5]) cube([6, 6, 10]);
|
|
translate([19, -height / 2.0 + 15, -5]) cube([6, 6, 10]);
|
|
translate([-10, -height / 2.0 + 15, -5]) cube([6, 6, 10]);
|
|
}
|
|
}
|
|
// snap fits
|
|
translate([0, -220, 0]) {
|
|
translate([0, -height / 2.0 - 2.8, 9]) snapfit();
|
|
translate([0, -height / 2.0 - 2.8, 17]) snapfit();
|
|
translate([0, height / 2.01 - 2, 9]) rotate(180, [1, 0, 0]) snapfit();
|
|
translate([0, height / 2.01 - 2, 17]) rotate(180, [1, 0, 0])snapfit();
|
|
}
|
|
}
|
|
|