From b48fb2465e333c957a1b32d89badfb1e6c595ec6 Mon Sep 17 00:00:00 2001 From: Myles Metzler Date: Sun, 25 Feb 2018 22:26:27 -0500 Subject: [PATCH] create redox generator file, add bump() function --- redox_keys.scad | 174 +++++++++++++++++++++++++++++++++++ src/key.scad | 9 ++ src/key_profiles/g20.scad | 2 + src/key_transformations.scad | 6 ++ src/settings.scad | 6 ++ 5 files changed, 197 insertions(+) create mode 100644 redox_keys.scad diff --git a/redox_keys.scad b/redox_keys.scad new file mode 100644 index 0000000..3705659 --- /dev/null +++ b/redox_keys.scad @@ -0,0 +1,174 @@ +/* +keyset generator for the redox keyboard found here: https://www.thingiverse.com/thing:2704567 + +Modify the "profile", "unsculpted", "legend_inset", "home_row_bump" to achieve desired results. + +Select what to render at the bottom of the file (which modules to call) (everything is commented out +by default... + +Modify key legends with the "legend" function in each module (or keysdef in the case of alpha numeric keys) +*/ +use +include +include +include +include +include + +//select the keyset profile options are: ["dcs", "oem", "sa", "g20", "dsa"] +profile = "oem"; +//select weather or not to sculpt the keys by row (you probably want true for dsa only) +unsculpted = false; +//choose if legends are inset or raised above the surface of the keys. +legend_inset = true; +//place a home row bump on the F and J keys +home_row_bump = true; + +//used for selecting the profile row in a loop. +rows = [5,1,2,3,4]; + +module translate_u(x=0, y=0, z=0){ + translate([x * unit, y*unit, z*unit]) children(); +} + +module keypf(row) { + key_profile(profile, unsculpted ? 3 : row) brimmed(0.25) cherry() key(legend_inset); +} + +module make_keys(keys) { + for (i=[0:len(keys)-1]) { + for (j=[0:len(keys[i])-1]) { + if ((keys[i][j][0] == "F" || keys[i][j][0] == "J") && home_row_bump && len(keys[i][j]) == 1) + translate_u(i, -j) legend(keys[i][j][0]) bump() keypf(rows[j]); + else if ((keys[i][j][0] == "F" || keys[i][j][0] == "J") && home_row_bump && len(keys[i][j]) == 2) + translate_u(i, -j) legend(keys[i][j][1], "top", "left", 3) legend(keys[i][j][0]) bump() keypf(rows[j]); + else if (len(keys[i][j]) == 1) + translate_u(i, -j) legend(keys[i][j][0]) keypf(rows[j]); + else if (len(keys[i][j]) == 2) + translate_u(i, -j) legend(keys[i][j][1], "top", "left", 3) legend(keys[i][j][0]) keypf(rows[j]); + } + } +} + +module make_1_25_col(keys) { + for (i=[0:len(keys)-1]) { + translate_u(0, -i) 1_25u() legend(keys[i]) keypf(rows[i]); + } +} + +//left hand alphanumeric keys +module alphanum_left() { + keysdef = [ + [["1", "!"], ["Q"], ["A"], ["Z"]], + [["2", "@"], ["W"], ["S"], ["X"]], + [["3", "#"], ["E"], ["D"], ["C"]], + [["4", "$"], ["R"], ["F"], ["V"]], + [["5", "%"], ["T"], ["G"], ["B"]] + ]; + make_keys(keysdef); +} + +//left hand 1.25u modifier keys +module mod_left_outside() { + translate_u(-1.125, 0) make_1_25_col(["ESC","TAB","CLK",chr(8657)]); +} + +//left hand bottom row modifier keys +module mod_left_bottom() { + translate_u(-1, -4) legend("`") legend("~", "top", "left", 3) keypf(4); + translate_u(0, -4) legend("CTRL", size=4) keypf(4); + translate_u(1, -4) keypf(4); + translate_u(2, -4) legend("ALT", size=4) keypf(4); + translate_u(3.125, -4) 1_25u()legend("fn", size=4) keypf(4); +} + +//left hand center modifier keys +module mod_left_inside() { + translate_u(5, 0) legend("-") legend("_", "top", "left", 3) keypf(5); + translate_u(5, -1.125) 1_25uh() legend("[") legend("{", "top", "left", 3) keypf(1); +} + +//left hand thumb cluster modifier keys +module mod_left_thumb() { + translate_u(5, -3) legend("HOME", size=4) keypf(3); + translate_u(6, -3) legend("END", size=4) keypf(3); + translate_u(5, -4.25) 1_5uh() legend(chr(9003)) keypf(3); + translate_u(6, -4.25) 1_5uh() legend(chr(8998)) keypf(3); +} + +//render the entire left hand key set +module left() { + alphanum_left(); + mod_left_outside(); + mod_left_bottom(); + mod_left_inside(); + mod_left_thumb(); +} + +//right hand alphanumeric keys +module alphanum_right() { + keysdef = [ + [["6", "^"], ["Y"], ["H"], ["N"]], + [["7", "&"], ["U"], ["J"], ["M"]], + [["8", "*"], ["I"], ["K"], [",", "<"]], + [["9", "("], ["O"], ["L"], [".", ">"]], + [["0", ")"], ["P"], [";", ":"], ["/", "?"]] + ]; + make_keys(keysdef); +} + +//right hand 1.25u modifier keys +module mod_right_outside() { + translate_u(5.125, 0) make_1_25_col([chr(9003),"\\",chr(8629),chr(8657)]); +} + +//right hand bottom row modifier keys +module mod_right_bottom() { + translate_u(5, -4) legend(chr(9654)) keypf(4); + translate_u(4, -4) legend(chr(9660)) keypf(4); + translate_u(3, -4) legend(chr(9650)) keypf(4); + translate_u(2, -4) legend(chr(9664)) keypf(4); + translate_u(0.875, -4) 1_25u() legend("fn", size=4) keypf(4); +} + +//right hand center modifier keys +module mod_right_inside() { + translate_u(-1, 0) legend("=") legend("+", "top", "left", 3) keypf(1); + translate_u(-1, -1.125) 1_25uh() legend("]") legend("}", "top", "left", 3) keypf(2); +} + +//right hand thum cluster modifier keys +module mod_right_thumb() { + translate_u(-1, -3) legend("PGDN", size=4) keypf(3); + translate_u(-2, -3) legend("PGUP", size=4) keypf(3); + translate_u(-1, -4.25) 1_5uh() keypf(3); + translate_u(-2, -4.25) 1_5uh() legend(chr(8629)) keypf(3); +} + +//render entire right hand key set +module right() { + alphanum_right(); + mod_right_outside(); + mod_right_bottom(); + mod_right_thumb(); + mod_right_inside(); +} + + +//show entire set +//left(); +//translate_u(10) right(); + +//individual sections for printing (keep stl output clusters close together for better slicing) +//left(); +//alphanum_left(); +//mod_left_outside(); +//mod_left_bottom(); +//mod_left_inside(); +//mod_left_thumb(); +//right(); +//alphanum_right(); +//mod_right_outside(); +//mod_right_bottom(); +//mod_right_thumb(); +//mod_right_inside(); diff --git a/src/key.scad b/src/key.scad index bf3202b..fccc459 100644 --- a/src/key.scad +++ b/src/key.scad @@ -171,6 +171,14 @@ module keytext(text, halign, valign, font_size, depth) { } } +module keybump(depth = 0, edge_inset=0.4) { + radius = 0.5; + translate([0, -top_total_key_height()/2 + edge_inset, depth]){ + rotate([90,0,90]) cylinder($font_size, radius, radius, true); + translate([0,0,-radius]) cube([$font_size, radius*2, radius*2], true); + } +} + module keystem_positions() { for (connector_pos = $connectors) { translate(connector_pos) { @@ -253,6 +261,7 @@ module key(inset = false) { union(){ // the shape of the key, inside and out keytop(); + if($key_bump) top_of_key() keybump($key_bump_depth, $key_bump_edge); // additive objects at the top of the key if(!inset) artisan() children(); // render the clearance check if it's enabled, but don't have it intersect with anything diff --git a/src/key_profiles/g20.scad b/src/key_profiles/g20.scad index 212880a..d07d8f3 100644 --- a/src/key_profiles/g20.scad +++ b/src/key_profiles/g20.scad @@ -12,6 +12,8 @@ module g20_row(n=3) { $dish_skew_x = 0; $dish_skew_y = 0; $minkowski_radius = 1.75; + $key_bump_depth = 0.6; + $key_bump_edge = 2; //also, $rounded_key = true; diff --git a/src/key_transformations.scad b/src/key_transformations.scad index 8adab57..5013c97 100644 --- a/src/key_transformations.scad +++ b/src/key_transformations.scad @@ -107,3 +107,9 @@ module legend(text, valign="center", halign="center", size=0) { $legends = [for(L=[$legends, [[text, halign, valign, size > 0 ? size : $font_size]]], a=L) a]; children(); } + +module bump(depth=undef) { + $key_bump = true; + $key_bump_depth = depth == undef ? $key_bump_depth : depth; + children(); +} diff --git a/src/settings.scad b/src/settings.scad index 4876c56..87b56aa 100644 --- a/src/settings.scad +++ b/src/settings.scad @@ -114,4 +114,10 @@ $alps_stem = [4.45, 2.25]; //halign = "left" or "center" or "right" //valign = "top" or "center" or "bottom" $legends = []; +//insert locating bump +$key_bump = false; +//height of the location bump from the top surface of the key +$key_bump_depth = 0.3; +//distance to move the bump from the front edge of the key +$key_bump_edge = 0.4;