range = [ 0 : 11 ];
base_pos = [-66.68750, -28.00167 - 3.5, 6];
key_names = ["C", "Cs", "D", "Ds", "E", "F", "Fs", "G", "Gs", "A", "As", "B"];
* translate([0, 0, 10])
import("source/Keycap.stl", convexity=3);
for (i = range)
key(i);
step_x = 24.245 / 2;
step_y = 42.00223 / 2;
function mountpos(i, row) =
base_pos +
[
step_x * i,
step_y * (row + i % 2),
0
];
module ledspace(upper, depth) {
rotate([0,0,45]) {
// cut a 2mm hole for the LED to rest in
cube([3.75, 3.55, 4], center=true);
difference() {
// 3.3x3.x3mm shaft for cables
cube([3.3, 3.3, upper ? 42 : 32], center=true);
// little bridge to hold LED
translate([0, 0, -2.01 - 1.5/2])
cube([1.5, 4, 1.5], center=true);
}
};
translate([0, upper ? -2 : 2, -13.5 + depth * 2])
cube([3.1, 5, 3], center=true);
}
module key(i) {
difference() {
import(str("source/Key ", key_names[i], ".stl"), convexity=3);
translate(mountpos(i, 0))
ledspace(false, i % 2);
translate(mountpos(i, 2))
ledspace(true, 2 + i % 2);
}
}