From 620a536dbc5717ec0815e8483a892c162d21b53a Mon Sep 17 00:00:00 2001 From: Revar Desmera <revarbat@gmail.com> Date: Wed, 10 Jun 2020 00:03:48 -0700 Subject: [PATCH] Fix stroke() for 1 point paths. --- shapes2d.scad | 33 +++++++++++++++++++++------------ version.scad | 2 +- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/shapes2d.scad b/shapes2d.scad index 7a3014d..bb70b4d 100644 --- a/shapes2d.scad +++ b/shapes2d.scad @@ -114,7 +114,10 @@ module stroke( ) * linewidth; assert(is_bool(closed)); - assert(is_path(path,[2,3]), "The path argument must be a list of 2D or 3D points."); + assert(is_list(path)); + if (len(path) > 1) { + assert(is_path(path,[2,3]), "The path argument must be a list of 2D or 3D points."); + } path = deduplicate( closed? close_path(path) : path ); assert(is_num(width) || (is_vector(width) && len(width)==len(path))); @@ -164,18 +167,24 @@ module stroke( ]); assert(is_num(trim2)); - spos = path_pos_from_start(path,trim1,closed=false); - epos = path_pos_from_end(path,trim2,closed=false); - path2 = path_subselect(path, spos[0], spos[1], epos[0], epos[1]); - widths = concat( - [lerp(width[spos[0]], width[(spos[0]+1)%len(width)], spos[1])], - [for (i = [spos[0]+1:1:epos[0]]) width[i]], - [lerp(width[epos[0]], width[(epos[0]+1)%len(width)], epos[1])] - ); + if (len(path) == 1) { + if (len(path[0]) == 2) { + translate(path[0]) circle(d=width[0]); + } else { + translate(path[0]) sphere(d=width[0]); + } + } else if (len(path[0]) == 2) { + spos = path_pos_from_start(path,trim1,closed=false); + epos = path_pos_from_end(path,trim2,closed=false); + path2 = path_subselect(path, spos[0], spos[1], epos[0], epos[1]); + widths = concat( + [lerp(width[spos[0]], width[(spos[0]+1)%len(width)], spos[1])], + [for (i = [spos[0]+1:1:epos[0]]) width[i]], + [lerp(width[epos[0]], width[(epos[0]+1)%len(width)], epos[1])] + ); - start_vec = select(path,0) - select(path,1); - end_vec = select(path,-1) - select(path,-2); - if (len(path[0]) == 2) { + start_vec = select(path,0) - select(path,1); + end_vec = select(path,-1) - select(path,-2); // Straight segments for (i = idx(path2,end=-2)) { seg = select(path2,i,i+1); diff --git a/version.scad b/version.scad index 0f3004c..ee54723 100644 --- a/version.scad +++ b/version.scad @@ -8,7 +8,7 @@ ////////////////////////////////////////////////////////////////////// -BOSL_VERSION = [2,0,332]; +BOSL_VERSION = [2,0,333]; // Section: BOSL Library Version Functions