- 
                Notifications
    You must be signed in to change notification settings 
- Fork 210
Open
Description
I was having trouble deciding what colors to print keys in and decided it might be worth to try a color layout. The example below is quick and dirty but should let anyone play around with the idea. I'm not quite sure how a merge-worthy feature should be approached. Key labels do get very hard to read so it might be worth passing the colors down to lower levels so the individual parts of a keycap can be colored slightly differently.
diff --git a/src/layouts/layout.scad b/src/layouts/layout.scad
index cd3c9c2..f371b6d 100644
--- a/src/layouts/layout.scad
+++ b/src/layouts/layout.scad
@@ -20,7 +20,7 @@ function double_sculpted_column(column, row_length, column_sculpt_profile) =
         1hand(column, row_length) : (column_sculpt_profile == "cresting_wave") ?
           cresting_wave(column, row_length) : 0;
 
-module layout(list, profile="dcs", legends=undef, front_legends=undef, row_sculpting_offset=0, row_override=undef, column_sculpt_profile="2hands", column_override=undef) {
+module layout(list, profile="dcs", legends=undef, front_legends=undef, color_legends=undef, row_sculpting_offset=0, row_override=undef, column_sculpt_profile="2hands", column_override=undef) {
   for (row = [0:len(list)-1]){
     /* echo("**ROW**:", row); */
     row_length = len(list[row]);
@@ -36,7 +36,8 @@ module layout(list, profile="dcs", legends=undef, front_legends=undef, row_sculp
       // supports negative values for nonexistent keys
       if (key_length >= 1) {
         translate_u(column_distance - (key_length/2), -row) {
-        
+          
+          color(color_legends ? color_legends[row][column] : "") 
           key_profile(profile, row_sculpting, column_value) u(key_length) legend(legends ? legends[row][column] : "") front_legend(front_legends ? front_legends[row][column] : "") cherry() { // (row+4) % 5 + 1
           $row = row;
           $column = column;
Example layout:
include <../layout.scad>
60_percent_default_layout = [
  [1,1,1,1,1,1,1,1,1,1,1,1,1,2],
  [1.5,1,1,1,1,1,1,1,1,1,1,1,1,1.5],
  [1.75,1,1,1,1,1,1,1,1,1,1,1,2.25],
  [2.25,1,1,1,1,1,1,1,1,1,1,2.75],
  [1.25,1.25,1.25,6.25,1.25,1.25,1.25,1.25]
];
home="crimson";
letters="#222222";
numbers="gray";
space=numbers;
other="saddlebrown";
shift=other;
non_letters="purple";
ctrl=other;
alt=ctrl;
fn="goldenrod";
60_percent_color_legends = [
  [other, numbers, numbers, numbers, numbers, numbers, numbers, numbers, numbers, numbers, numbers, non_letters, non_letters, other],
  [other, letters, letters, letters, letters, letters, letters, letters, letters, letters, letters, non_letters, non_letters, non_letters],
  [other, home, home, home, home, letters, letters, home, home, home, home, non_letters, other],
  [shift, letters, letters, letters, letters, letters, letters, letters, non_letters, non_letters, non_letters, shift],
  [ctrl, fn, alt, space, alt, fn, fn, ctrl],
];
module 60_percent_default(profile) {
  layout(60_percent_default_layout, profile, [], [], 60_percent_color_legends) children();
}
Metadata
Metadata
Assignees
Labels
No labels
