From 736f3a6d706979a05be1a63f839c6c72134594ba Mon Sep 17 00:00:00 2001
From: Bob - Home - Windows <rsheldiii@gmail.com>
Date: Sat, 18 Nov 2017 16:44:35 -0500
Subject: [PATCH] pushing up to continue work elsewhere. actually abstracting
 ISO shape

---
 keys.scad   | 15 ++++++++-------
 shapes.scad | 37 +++++++++++++++++++++----------------
 2 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/keys.scad b/keys.scad
index c0beb63..ef70907 100644
--- a/keys.scad
+++ b/keys.scad
@@ -197,11 +197,12 @@ module g20() {
   /*$rounded_key = true;*/
 }
 
-module fake_iso_enter() {
-	$bottom_key_width = 18.16 * 1.9;
-	$bottom_key_height = 18.16 * 2;
-	$width_difference = 4;
-	$height_difference = 4;
+module iso_enter() {
+	$bottom_key_width = 18.16;
+	$bottom_key_height = 18.16;
+	$key_length = 1.5;
+	$key_height = 2;
+
 	$total_depth = 7;
 	$top_tilt = 0;
 	$top_skew = 1.75;
@@ -424,7 +425,7 @@ module legend(text, inset=false) {
 	children();
 }
 
-translate_u(1.125, 0.5) fake_iso_enter() cherry() key();
+translate_u(1.125, 0.5) iso_enter() cherry() key();
 translate_u(0, 0) sa_row(2) legend("q", inset=true) cherry() {
-	key();
+	/*key();*/
 }
diff --git a/shapes.scad b/shapes.scad
index cce2279..21b3a16 100644
--- a/shapes.scad
+++ b/shapes.scad
@@ -3,7 +3,7 @@ unit = 19.05;
 
 module key_shape(width, height, width_difference, height_difference, corner_size) {
 	if ($key_shape_type == "iso_enter") {
-		fakeISOEnter(width_difference/2);
+		ISO_enter(width, height, width_difference, height_difference, corner_size);
 	} else if ($key_shape_type == "normal") {
 		roundedSquare([width - width_difference, height - height_difference], corner_size);
 	} else if ($key_shape_type == "circle") {
@@ -26,28 +26,33 @@ module roundedSquare(size, radius, center = true) {
 
 // corollary is roundedSquare
 // NOT 3D
-module fakeISOEnter(thickness_difference = 0){
-	// t is all modifications to the polygon array
-	// t used to contain a corner radius adjustment, but due to
-	// the offset we need that expansion back
-	t = (thickness_difference - (unit - 18.16));
+module ISO_enter(width, height, width_difference, height_difference, corner_size){
+	function unit_length(length) = unit * (length - 1) + 18.16;
 
-	function unit(length) = unit * length;
+
+	// in order to make the ISO keycap shape generic, we are going to express the
+	// 'elbow point' in terms of ratios. an ISO enter is just a 1.5u key stuck on
+	// top of a 1.25u key, but since our key_shape function doesnt understand that
+	// and wants to pass just width and height, we make these ratios to know where
+	// to put the elbow joint
+
+	width_ratio = unit_length(1.25) / unit_length(1.5);
+	height_ratio = unit_length(1) / unit_length(2);
 
   pointArray = [
-      [unit(-.625)  + t,      unit(-1)  + t],
-      [unit(0.625)  - t,      unit(-1)  + t],
-      [unit(0.625)  - t,      unit(1)   - t],
-      [unit(-0.875) + t,      unit(1)   - t],
-      [unit(-0.875) + t,      unit(0)   + t],
-      [unit(-0.625) + t,      unit(0)   + t]
+      [                      -width_difference/2,                        -height_difference/2],
+      [                      -width_difference/2,               -height + height_difference/2],
+      [-width * width_ratio + width_difference/2,               -height + height_difference/2],
+      [-width * width_ratio + width_difference/2,-height * height_ratio + height_difference/2],
+      [              -width + width_difference/2,-height * height_ratio + height_difference/2],
+      [              -width + width_difference/2,                        -height_difference/2]
   ];
 
 	minkowski(){
-		circle(r=$corner_radius);
+		circle(r=corner_size);
 		// gives us rounded inner corner
-		offset(r=-$corner_radius*2) {
-			polygon(points=pointArray);
+		offset(r=-corner_size*2) {
+			translate([(width * width_ratio)/2, height/2]) polygon(points=pointArray);
 		}
 	}
 }