From e4773501532905bbcde7077edd6a046357532d1e Mon Sep 17 00:00:00 2001
From: Robert Sheldon <rsheldiii@gmail.com>
Date: Sat, 7 Sep 2019 16:59:29 -0400
Subject: [PATCH] begin implementing choc stem

---
 keys.scad                    | 14 +++++++++++---
 src/key.scad                 |  6 +++++-
 src/key_transformations.scad | 14 ++++++++++++++
 src/settings.scad            |  3 +++
 src/stem_supports/brim.scad  | 12 ++++++++++++
 src/stem_supports/tines.scad |  4 ++++
 src/stems.scad               |  3 +++
 src/stems/choc.scad          |  6 ++++++
 src/supports/flared.scad     |  9 +++++++++
 9 files changed, 67 insertions(+), 4 deletions(-)
 create mode 100644 src/stems/choc.scad

diff --git a/keys.scad b/keys.scad
index fe38b74..bfee55e 100644
--- a/keys.scad
+++ b/keys.scad
@@ -14,7 +14,15 @@ include <src/key_types.scad>
 include <src/key_transformations.scad>
 include <src/key_helpers.scad>
 
-sa_row(3) u(3) stabilized() {
-  /* %envelope(0); */
-  key();
+
+
+u(1) choc() {
+  tined_stem_support() sa_row(1){
+    $stem_support_height = 2;
+    low_profile() {
+      key();
+    }
+  }
 }
+
+/* translate_u(1,0) u(1) choc() row_profile("oem") low_profile() key(); */
diff --git a/src/key.scad b/src/key.scad
index cc44886..227c7bd 100644
--- a/src/key.scad
+++ b/src/key.scad
@@ -291,7 +291,11 @@ module key(inset = false) {
     dished($keytop_thickness, $inverted_dish) {
       translate([0, 0, $stem_inset]) {
         /* if ($stabilizer_type != "disable") stems_for($stabilizers, $stabilizer_type); */
-        if ($stem_type != "disable") stems_for($stem_positions, $stem_type);
+        if ($stem_type != "disable") {
+          stems_for($stabilizers, $stabilizer_type);
+        }
+
+        stems_for($stem_positions, $stem_type);
       }
     }
   }
diff --git a/src/key_transformations.scad b/src/key_transformations.scad
index 15f63f7..53f387b 100644
--- a/src/key_transformations.scad
+++ b/src/key_transformations.scad
@@ -104,6 +104,12 @@ module box_cherry(slop) {
   children();
 }
 
+module choc(slop) {
+  $stem_slop = slop ? slop : $stem_slop;
+  $stem_type = "choc";
+  children();
+}
+
 module flared_support() {
   $support_type = "flared";
   children();
@@ -130,3 +136,11 @@ module bump(depth=undef) {
     $key_bump_depth = depth == undef ? $key_bump_depth : depth;
     children();
 }
+
+module low_profile() {
+  /* $total_depth = 5.35; */
+  /* extra ugly hack right now to make sure we don't generate keycaps with insufficient throw */
+  /* $total_depth = ($total_depth / 2) < 6 ? 6 : $total_depth / 2; */
+  $stem_throw = 3;
+  children();
+}
diff --git a/src/settings.scad b/src/settings.scad
index 4a43766..3b32e67 100644
--- a/src/settings.scad
+++ b/src/settings.scad
@@ -125,6 +125,9 @@ $legends = [];
 // Dimensions of alps stem
 $alps_stem = [4.45, 2.25];
 
+// Dimensions of choc stem
+$choc_stem = [1.2, 3];
+
 // Enable stabilizer stems, to hold onto your cherry or costar stabilizers
 $stabilizer_type = "costar_stabilizer"; // [costar_stabilizer, cherry_stabilizer, disable]
 
diff --git a/src/stem_supports/brim.scad b/src/stem_supports/brim.scad
index 97ae5dc..372fcf3 100644
--- a/src/stem_supports/brim.scad
+++ b/src/stem_supports/brim.scad
@@ -43,5 +43,17 @@ module brim_support(stem_type, stem_support_height, slop) {
 
       inside_cherry_cross(slop);
     }
+  } else if(stem_type == "choc") {
+    translate([-5.7/2,0,0]) linear_extrude(height=stem_support_height) {
+      offset(r=1){
+        square($choc_stem + [3,3], center=true);
+      }
+    }
+
+    translate([5.7/2,0,0]) linear_extrude(height=stem_support_height) {
+      offset(r=1){
+        square($choc_stem + [3,3], center=true);
+      }
+    }
   }
 }
diff --git a/src/stem_supports/tines.scad b/src/stem_supports/tines.scad
index 99cb57c..aaa5ec9 100644
--- a/src/stem_supports/tines.scad
+++ b/src/stem_supports/tines.scad
@@ -41,5 +41,9 @@ module tines_support(stem_type, stem_support_height, slop) {
     }
   } else if (stem_type == "alps"){
     centered_tines(stem_support_height);
+  } else if (stem_type == "choc"){
+    if ($key_length < 2) translate([0,0,$stem_support_height / 2]) cube([total_key_width($wall_thickness)+$wall_thickness/4, 0.5, $stem_support_height], center = true);
+    /* translate([-5.7/2,0,$stem_support_height / 2]) cube([0.5, total_key_height($wall_thickness), $stem_support_height], center = true); */
+    /* translate([5.7/2,0,$stem_support_height / 2]) cube([0.5, total_key_height($wall_thickness), $stem_support_height], center = true); */
   }
 }
diff --git a/src/stems.scad b/src/stems.scad
index c53ab91..473c10a 100644
--- a/src/stems.scad
+++ b/src/stems.scad
@@ -4,6 +4,7 @@ include <stems/box_cherry.scad>
 include <stems/alps.scad>
 include <stems/filled.scad>
 include <stems/cherry_stabilizer.scad>
+include <stems/choc.scad>
 
 
 //whole stem, alps or cherry, trimmed to fit
@@ -20,6 +21,8 @@ module stem(stem_type, depth, slop){
       filled_stem();
     } else if (stem_type == "cherry_stabilizer") {
       cherry_stabilizer_stem(depth, slop);
+    } else if (stem_type == "choc") {
+      choc_stem(depth, slop);
     } else if (stem_type == "disable") {
       children();
     } else {
diff --git a/src/stems/choc.scad b/src/stems/choc.scad
new file mode 100644
index 0000000..1589880
--- /dev/null
+++ b/src/stems/choc.scad
@@ -0,0 +1,6 @@
+module choc_stem(depth, slop){
+  echo("slop");
+  echo(slop);
+  translate([-5.7/2, 0, depth/2]) cube([1.2 - slop/2, 3 - slop/2, depth], center=true);
+  translate([5.7/2, 0, depth/2]) cube([1.2 - slop/2, 3 - slop/2, depth], center=true);
+}
diff --git a/src/supports/flared.scad b/src/supports/flared.scad
index 213a701..e4eec58 100644
--- a/src/supports/flared.scad
+++ b/src/supports/flared.scad
@@ -32,6 +32,15 @@ module flared(stem_type, loft, height) {
           square(outer_cherry_stabilizer_stem($stem_slop) - [2,2], center=true);
         }
       }
+    } else if (stem_type == "choc") {
+      alps_scale = [scale_for_45(height, $choc_stem[0]), scale_for_45(height, $choc_stem[1])];
+      translate([-5.7/2,0,0]) linear_extrude(height=height, scale = alps_scale){
+        square($choc_stem - [$stem_slop/2, $stem_slop/2], center=true);
+      }
+
+      translate([5.7/2,0,0]) linear_extrude(height=height, scale = alps_scale){
+        square($choc_stem - [$stem_slop/2, $stem_slop/2], center=true);
+      }
     } else {
       // always render cherry if no stem type. this includes stem_type = false!
       // this avoids a bug where the keycap is rendered filled when not desired