diff --git a/partitions.scad b/partitions.scad index 144c768..69aa455 100644 --- a/partitions.scad +++ b/partitions.scad @@ -95,10 +95,10 @@ function half_of(p, v=UP, cp) = assert(is_vector(v,2) || (is_vector(v,3) && v.z==0),"Must give 2-vector") assert(!all_zero(v), "Vector v must be nonzero") let( - bounds = pointlist_bounds(move(-cp,p)), - L = 2*max(flatten(bounds)), - n = unit(v), - u = [-n.y,n.x], + v=unit(v), + bounds = pointlist_bounds(is_region(p)?flatten(p):p), + L = 2*max(norm(bounds[0]-cp), norm(bounds[1]-cp)), + u = [-v.y,v.x], box = [cp+u*L, cp+(v+u)*L, cp+(v-u)*L, cp-u*L] ) intersection(box,p) diff --git a/skin.scad b/skin.scad index d97e4c4..f44007b 100644 --- a/skin.scad +++ b/skin.scad @@ -2099,7 +2099,7 @@ function sweep(shape, transforms, closed=false, caps, style="min_edge", capsOK = is_bool(caps) || is_bool_list(caps,2), fullcaps = is_bool(caps) ? [caps,caps] : caps ) - assert(len(transforms), "transformation must be length 2 or more") + assert(len(transforms)>=2, "transformation must be length 2 or more") assert(capsOK, "caps must be boolean or a list of two booleans") assert(!closed || !caps, "Cannot make closed shape with caps") is_region(shape)? let( @@ -2108,7 +2108,7 @@ function sweep(shape, transforms, closed=false, caps, style="min_edge", vnfs = [ for (rgn=regions) each [ for (path=rgn) - sweep(path, transforms, closed=closed, caps=false), + sweep(path, transforms, closed=closed, caps=false, style=style), if (fullcaps[0]) vnf_from_region(rgn, transform=transforms[0], reverse=true), if (fullcaps[1]) vnf_from_region(rgn, transform=last(transforms)), ], diff --git a/tests/test_skin.scad b/tests/test_skin.scad index 405e19b..1898946 100644 --- a/tests/test_skin.scad +++ b/tests/test_skin.scad @@ -16,4 +16,21 @@ module test_skin() { test_skin(); +module test_sweep() { + multi_region = [ + [[10, 0], [ 0, 0], [ 0, 10], [10, 10]], + [[30, 0], [20, 0], [20, 10], [30, 10]] + ]; + transforms = [ up(10), down(10) ]; + + vnf1 = sweep(multi_region,transforms,closed=false,caps=false); + assert(len(vnf1[0])==8*2 && len(vnf1[1])==8*2); + + vnf2 = sweep(multi_region,transforms,closed=false,caps=false,style="quincunx"); + assert(len(vnf2[0])==8*3 && len(vnf2[1])==8*4); +} +test_sweep(); + + + // vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap diff --git a/version.scad b/version.scad index c71362f..98e219a 100644 --- a/version.scad +++ b/version.scad @@ -9,7 +9,7 @@ ////////////////////////////////////////////////////////////////////// -BOSL_VERSION = [2,0,675]; +BOSL_VERSION = [2,0,677]; // Section: BOSL Library Version Functions