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] + ]); +}