From 4b9cb50e485a46bdb6fc3e8d6b76c8f023b4cc31 Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 20 Mar 2020 19:10:24 -0400 Subject: [PATCH] flat-sided keycaps make square_shape and rounded_square_shape use trapezoids as their top surface, perfectly shaped so that the sides of the keycap are flat, and can be used as a printing surface --- src/shapes/rounded_square.scad | 32 +++++++++++++------------------- src/shapes/square.scad | 18 +++++++++++++++++- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/shapes/rounded_square.scad b/src/shapes/rounded_square.scad index ee57911..bdeeb9e 100644 --- a/src/shapes/rounded_square.scad +++ b/src/shapes/rounded_square.scad @@ -1,26 +1,20 @@ include <../libraries/rounded_rectangle_profile.scad> module rounded_square_shape(size, delta, progress, center = true) { - width = size[0]; - height = size[1]; + offset(r=$corner_radius){ + square_shape([size.x - $corner_radius*2, size.y - $corner_radius*2], delta, progress); + } +} - width_difference = delta[0]; - height_difference = delta[1]; - - // computed values for this slice - extra_width_this_slice = (width_difference) * progress; - extra_height_this_slice = (height_difference) * progress; - extra_corner_radius_this_slice = ($corner_radius); - - offset(r=extra_corner_radius_this_slice){ - square( - [ - width - extra_width_this_slice - extra_corner_radius_this_slice * 2, - height - extra_height_this_slice - extra_corner_radius_this_slice * 2 - ], - center=center - ); - } +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 diff --git a/src/shapes/square.scad b/src/shapes/square.scad index f62a192..d615e5d 100644 --- a/src/shapes/square.scad +++ b/src/shapes/square.scad @@ -1,3 +1,19 @@ -module square_shape(size, delta, progress){ +module square_shape_old(size, delta, progress){ square(size - delta * progress, center = true); } +/* +[-size.x /2,-size.y / 2], +[size.x / 2,-size.y / 2], +[size.x / 2, size.y / 2], +[-size.x / 2, size.y / 2] */ + +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] + ]); +}