// the point of this file is to be a sort of DSL for constructing keycaps. // when you create a method chain you are just changing the parameters // key.scad uses, it doesn't generate anything itself until the end. This // lets it remain easy to use key.scad like before (except without key profiles) // without having to rely on this file. Unfortunately that means setting tons of // special variables, but that's a limitation of SCAD we have to work around include <./includes.scad> $font="Routed Gothic"; $adm_stem_angle = 15; // chris says this matches real well $inset_legend_depth = 0.6; // stem outside // original part measured 6.9 // 1st print measured 7.25 (with model dimension 6.9) stem_outside_compensation = 7.25 - 6.9; // stem inside // original part measured 4.9 // 1st print measured 4.9 (with model dimension 5.0) // tab key gap 24.5 // tab key size 23.8 // -> key should be 1.7 less than gap // 1 key gap is 33.2 // 33.2 - 1.7 = 32.5 // measured 32.3 is fine // pinted key depth 18 // printed key height 17.9 module lx2(above, below) { translate([0,0,-below]) linear_extrude(above+below) children(); } module adm_stem() { up = 8; down = 6.5; height = 12; children(); color("teal") for(pos = $stem_positions) { echo(pos); translate(pos) //translate([0,0,up]) rotate([$adm_stem_angle,0,0]) lx2(up, down) //translate([0,0,-height]) //linear_extrude(height) difference() { square(6.9 - stem_outside_compensation, center=true); square(5, center=true); } } } size=4.5; offfs=.80; // right side 9.45 // left side 7.00 module one() { sa_row(5) blank() // we make our own stem legend("!", position=[0,-offfs], size=size) legend("1", position=[0,offfs], size=size) adm_stem($stem_positions=[[-1.2,+.6]]) key($bottom_key_width=32.3, $bottom_key_height=18); } rotate([-$adm_stem_angle,0,0]) one(); // example row /* for (x = [0:1:4]) { translate_u(0,-x) dcs_row(x) key(); } */ // example layout /* preonic_default("dcs") key(); */