diff options
Diffstat (limited to 'keycap.scad')
| -rw-r--r-- | keycap.scad | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/keycap.scad b/keycap.scad new file mode 100644 index 0000000..7e280c6 --- /dev/null +++ b/keycap.scad @@ -0,0 +1,50 @@ +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); + } +} |
