Add examples and sa_ergo

This commit is contained in:
Bob 2020-02-22 21:11:33 -05:00
parent ce2e5855fe
commit 2c69695958
9 changed files with 119 additions and 26 deletions

28
examples/sa_ergo.scad Normal file
View File

@ -0,0 +1,28 @@
include <../includes.scad>
$double_sculpted = true;
$font_size = 4;
extra_column_height = [5.64, 5.64, 0, -3, 0, 0, 0, 0, 0, -3, 0, 5.64, 5.64] + [0,0,0,0,0,0,0,0,0,0,0,0,0];
row_length = len(preonic_default_layout[0]);
simple_layout(preonic_default_layout) {
// uh oh, now I need two of them...
union() {
column_value = double_sculpted_column($column, row_length, "2hands");
echo("column value", column_value);
sa_row($row+1, column_value){
// this union is here because, for some reason, you cannot modify the
// variables dcs_row and other row decs modify in the scope below them.
union() {
/* $dish_type = "disable"; */
$stem_support_type = "disable";
$total_depth = $total_depth + extra_column_height[$column];
/* key(); */
dished(){
legend(preonic_default_legends[$row][$column]) legends($inset_legend_depth);
}
}
}
}
}

9
includes.scad Normal file
View File

@ -0,0 +1,9 @@
use <src/key.scad>
include <src/settings.scad>
include <src/key_sizes.scad>
include <src/key_profiles.scad>
include <src/key_types.scad>
include <src/key_transformations.scad>
include <src/key_helpers.scad>
include <src/key_layouts.scad>

View File

@ -5,15 +5,8 @@
// without having to rely on this file. Unfortunately that means setting tons of // 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 // special variables, but that's a limitation of SCAD we have to work around
use <src/key.scad> include <./includes.scad>
include <src/settings.scad>
include <src/key_sizes.scad>
include <src/key_profiles.scad>
include <src/key_types.scad>
include <src/key_transformations.scad>
include <src/key_helpers.scad>
include <src/key_layouts.scad>
// example key // example key
dcs_row(5) legend("⇪", size=9) key(); dcs_row(5) legend("⇪", size=9) key();

View File

@ -1,5 +1,4 @@
module dcs_row(row=3, column=0) { module dcs_row(row=3, column=0) {
// names, so I don't go crazy
$bottom_key_width = 18.16; $bottom_key_width = 18.16;
$bottom_key_height = 18.16; $bottom_key_height = 18.16;
$width_difference = 6; $width_difference = 6;

View File

@ -1,7 +1,7 @@
include <../layout.scad> include <../layout.scad>
// negative numbers are used for spacing // negative numbers are used for spacing
gherkin_mapping = [ gherkin_default_layout = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
@ -14,5 +14,5 @@ gherkin_default_legends = [
]; ];
module gherkin_default(profile) { module gherkin_default(profile) {
layout(gherkin_mapping, profile, legends=gherkin_default_legends, row_sculpting_offset=1, row_override=3) children(); layout(gherkin_default_layout, profile, legends=gherkin_default_legends, row_sculpting_offset=1, row_override=3) children();
} }

View File

@ -22,7 +22,7 @@ function double_sculpted_column(column, row_length, column_sculpt_profile) =
module layout(list, profile="dcs", legends=undef, row_sculpting_offset=0, row_override=undef, column_sculpt_profile="2hands", column_override=undef) { module layout(list, profile="dcs", legends=undef, row_sculpting_offset=0, row_override=undef, column_sculpt_profile="2hands", column_override=undef) {
for (row = [0:len(list)-1]){ for (row = [0:len(list)-1]){
echo("**ROW**:", row); /* echo("**ROW**:", row); */
row_length = len(list[row]); row_length = len(list[row]);
for(column = column_override ? column_override : [0:len(list[row])-1]) { for(column = column_override ? column_override : [0:len(list[row])-1]) {
@ -31,12 +31,15 @@ module layout(list, profile="dcs", legends=undef, row_sculpting_offset=0, row_ov
column_value = double_sculpted_column(column, row_length, column_sculpt_profile); column_value = double_sculpted_column(column, row_length, column_sculpt_profile);
column_distance = abs_sum([for (x = [0 : column]) list[row][x]]); column_distance = abs_sum([for (x = [0 : column]) list[row][x]]);
echo("\t**COLUMN**", "column_value", column_value, "column_distance", column_distance); /* echo("\t**COLUMN**", "column_value", column_value, "column_distance", column_distance); */
// supports negative values for nonexistent keys // supports negative values for nonexistent keys
if (key_length >= 1) { if (key_length >= 1) {
translate_u(column_distance - (key_length/2), -row) { translate_u(column_distance - (key_length/2), -row) {
key_profile(profile, row_sculpting, column_value) u(key_length) legend(legends ? legends[row][column] : "") cherry() { // (row+4) % 5 + 1 key_profile(profile, row_sculpting, column_value) u(key_length) legend(legends ? legends[row][column] : "") cherry() { // (row+4) % 5 + 1
$row = row;
$column = column;
if (key_length == 6.25) { if (key_length == 6.25) {
spacebar() { spacebar() {
if ($children) { if ($children) {
@ -84,3 +87,37 @@ module layout(list, profile="dcs", legends=undef, row_sculpting_offset=0, row_ov
} }
} }
} }
module simple_layout(list) {
for (row = [0:len(list)-1]){
/* echo("**ROW**:", row); */
for(column = [0:len(list[row])-1]) {
key_length = list[row][column];
column_distance = abs_sum([for (x = [0 : column]) list[row][x]]);
/* echo("\t**COLUMN**", "column_value", column_value, "column_distance", column_distance); */
// supports negative values for nonexistent keys
if (key_length >= 1) {
translate_u(column_distance - (key_length/2), -row) {
u(key_length) { // (row+4) % 5 + 1
$row = row;
$column = column;
if (key_length == 6.25) {
spacebar() children();
} else if (key_length == 2.25) {
lshift() children();
} else if (key_length == 2) {
backspace() children();
} else if (key_length == 2.75) {
rshift() children();
} else {
children();
}
}
}
}
}
}
}

View File

@ -3,13 +3,21 @@ include <../layout.scad>
// 0's are to make space for a middle row for just the spacebar so that it // 0's are to make space for a middle row for just the spacebar so that it
// isn't sculpted with double sculpting. the 0's in the first three rows // isn't sculpted with double sculpting. the 0's in the first three rows
// don't _need_ to be there but it's nice to keep track // don't _need_ to be there but it's nice to keep track
planck_layout_mapping = [ planck_default_layout = [
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1]
]; ];
planck_default_legends = [
[ "⇥", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "⌫"],
["Esc", "A", "S", "D", "F", "G", "H", "J", "K", "L", ";", "⏎"],
[ "⇧", "Z", "X", "C", "V", "B", "N", "M", ",", ".", "/", "⇧"],
[ "Fn", "Ctl", "Alt", "Cmd", "Lwr", "", "", "RSE", "←", "↓", "↑", "→"],
];
module planck_default(profile, column_sculpt_profile="2hands") { module planck_default(profile, column_sculpt_profile="2hands") {
layout(planck_layout_mapping, profile, row_sculpting_offset=1, column_sculpt_profile=column_sculpt_profile) children(); layout(planck_default_layout, profile, row_sculpting_offset=1, column_sculpt_profile=column_sculpt_profile) children();
} }

View File

@ -1,6 +1,6 @@
include <../layout.scad> include <../layout.scad>
preonic_layout_mapping = [ preonic_default_layout = [
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1],
@ -8,6 +8,14 @@ preonic_layout_mapping = [
[1, 1, 1, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1]
]; ];
preonic_default_legends = [
[ "`", "1", "2", "3", "4", "5", "", "6", "7", "8", "9", "0", "-"],
[ "⇥", "Q", "W", "E", "R", "T", "", "Y", "U", "I", "O", "P", "⌫"],
["Esc", "A", "S", "D", "F", "G", "", "H", "J", "K", "L", ";", "⏎"],
[ "⇧", "Z", "X", "C", "V", "B", "", "N", "M", ",", ".", "/", "⇧"],
[ "Fn", "Ctl", "Alt", "Cmd", "Lwr", "", "", "", "RSE", "←", "↓", "↑", "→"],
];
module preonic_default(profile, column_sculpt_profile="2hands") { module preonic_default(profile, column_sculpt_profile="2hands") {
layout(preonic_layout_mapping, profile, column_sculpt_profile=column_sculpt_profile) children(); layout(preonic_default_layout, profile, column_sculpt_profile=column_sculpt_profile) children();
} }

View File

@ -1,10 +1,21 @@
// TODO make this use layout() include <../layout.scad>
module preonic_mit(profile) {
for(x = [0:1:4]) { preonic_mit_layout = [
for(y=[-2.5:0.5:3]) { [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
translate_u(y * 2,-x) key_profile(profile, x,floor(y)) { [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
key(); [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
} [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
} [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
} ];
preonic_mit_legends = [
[ "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-"],
[ "⇥", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "⌫"],
["Esc", "A", "S", "D", "F", "G", "H", "J", "K", "L", ";", "⏎"],
[ "⇧", "Z", "X", "C", "V", "B", "N", "M", ",", ".", "/", "⇧"],
[ "Fn", "Ctl", "Alt", "Cmd", "Lwr", "", "", "RSE", "←", "↓", "↑", "→"],
];
module planck_mit(profile) {
layout(preonic_mit_layout, profile, legends=preonic_mit_legends, row_sculpting_offset=1) children();
} }