From 8557d19b02c7b368137d2aff142e777cd8717929 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 21 Mar 2020 13:45:49 -0400 Subject: [PATCH] fix negative top tilt keytop tucking --- src/shapes/rounded_square.scad | 11 ----------- src/shapes/square.scad | 11 ++++++++--- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/shapes/rounded_square.scad b/src/shapes/rounded_square.scad index bdeeb9e..4152239 100644 --- a/src/shapes/rounded_square.scad +++ b/src/shapes/rounded_square.scad @@ -6,17 +6,6 @@ module rounded_square_shape(size, delta, progress, center = true) { } } -module square_shape(size, delta, progress) { - alpha = sin($top_tilt) * (top_total_key_height() - $corner_radius * 2) * 0.5; - gamma = ($width_difference * alpha) / ($total_depth+alpha); - polygon(points=[ - [-size.x /2 + delta.x * progress/2 , -size.y / 2 + delta.y * progress/2], - [size.x / 2 - delta.x * progress/2,-size.y / 2 + delta.y * progress/2], - [size.x / 2 - delta.x * progress/2 + gamma * progress, size.y / 2 - delta.y * progress/2], - [-size.x / 2 + delta.x * progress/2 - gamma * progress, size.y / 2 - delta.y * progress/2] - ]); -} - // for skin function skin_rounded_square(size, delta, progress) = diff --git a/src/shapes/square.scad b/src/shapes/square.scad index d615e5d..39f9c4c 100644 --- a/src/shapes/square.scad +++ b/src/shapes/square.scad @@ -8,11 +8,16 @@ module square_shape_old(size, delta, progress){ [-size.x / 2, size.y / 2] */ module square_shape(size, delta, progress) { + // vertical inclination due to top tilt alpha = sin($top_tilt) * (top_total_key_height() - $corner_radius * 2) * 0.5; - gamma = ($width_difference * alpha) / ($total_depth+alpha); + + // how much we have to tuck in the top and bottom of the keytop to make the sides parallel + gamma = min((($width_difference * alpha) / ($total_depth+alpha)), 0); + nega_gamma = max((($width_difference * alpha) / ($total_depth-alpha)), 0); + polygon(points=[ - [-size.x /2 + delta.x * progress/2 , -size.y / 2 + delta.y * progress/2], - [size.x / 2 - delta.x * progress/2,-size.y / 2 + delta.y * progress/2], + [-size.x /2 + delta.x * progress/2 + nega_gamma * progress , -size.y / 2 + delta.y * progress/2], + [size.x / 2 - delta.x * progress/2 - nega_gamma * progress ,-size.y / 2 + delta.y * progress/2], [size.x / 2 - delta.x * progress/2 + gamma * progress, size.y / 2 - delta.y * progress/2], [-size.x / 2 + delta.x * progress/2 - gamma * progress, size.y / 2 - delta.y * progress/2] ]);