diff --git a/regions.scad b/regions.scad index 7eee696..15aa560 100644 --- a/regions.scad +++ b/regions.scad @@ -700,7 +700,9 @@ function offset( outsidecorner = len(sharpcorners)==2 ? [false,false] : [for(i=[0:len(goodsegs)-1]) - let(prevseg=select(goodsegs,i-1)) + let(prevseg=select(goodsegs,i-1)) + i==0 && !closed ? false // In open case first entry is bogus + : (goodsegs[i][1]-goodsegs[i][0]) * (goodsegs[i][0]-sharpcorners[i]) > 0 && (prevseg[1]-prevseg[0]) * (sharpcorners[i]-prevseg[1]) > 0 ], diff --git a/rounding.scad b/rounding.scad index 2b5ddb5..abfe0ba 100644 --- a/rounding.scad +++ b/rounding.scad @@ -376,9 +376,11 @@ function _rounding_offsets(edgespec,z_dir=1) = r = struct_val(edgespec,"r"), cut = struct_val(edgespec,"cut"), k = struct_val(edgespec,"k"), - radius = in_list(edgetype,["circle","teardrop"])? - (is_def(cut) ? cut/(sqrt(2)-1) : r) : - edgetype=="chamfer"? first_defined([sqrt(2)*cut,r]) : undef, + radius = in_list(edgetype,["circle","teardrop"]) + ? (is_def(cut) ? cut/(sqrt(2)-1) : r) + :edgetype=="chamfer" + ? (is_def(cut) ? sqrt(2)*cut : r) + : undef, chamf_angle = struct_val(edgespec, "angle"), cheight = struct_val(edgespec, "chamfer_height"), cwidth = struct_val(edgespec, "chamfer_width"), @@ -786,9 +788,9 @@ function _path_join(paths,joint,k=0.5,i=0,result=[],relocate=true,closed=false) // triangle = [[0,0],[10,0],[5,10]]; // offset_sweep(triangle, height=6, bottom = os_circle(r=-2),steps=16,offset_maxstep=0.01); // Example: Here is the star chamfered at the top with a teardrop rounding at the bottom. Check out the rounded corners on the chamfer. Note that a very small value of `offset_maxstep` is needed to keep these round. Observe how the rounded star points vanish at the bottom in the teardrop: the number of vertices does not remain constant from layer to layer. -// star = star(5, r=22, ir=13); -// rounded_star = round_corners(star, cut=flatten(repeat([.5,0],5)), $fn=24); -// offset_sweep(rounded_star, height=20, bottom=os_teardrop(r=4), top=os_chamfer(width=4,offset_maxstep=.1)); +// star = star(5, r=22, ir=13); +// rounded_star = round_corners(star, cut=flatten(repeat([.5,0],5)), $fn=24); +// offset_sweep(rounded_star, height=20, bottom=os_teardrop(r=4), top=os_chamfer(width=4,offset_maxstep=.1)); // Example: We round a cube using the continous curvature rounding profile. But note that the corners are not smooth because the curved square collapses into a square with corners. When a collapse like this occurs, we cannot turn `check_valid` off. // square = square(1); // rsquare = round_corners(square, method="smooth", cut=0.1, k=0.7, $fn=36); diff --git a/screws.scad b/screws.scad index 9c69265..3dda968 100644 --- a/screws.scad +++ b/screws.scad @@ -310,7 +310,9 @@ function _screw_info_english(diam, threadcount, head, thread, drive) = [2, [ 3, 1.5, undef, undef, undef]], ], entry = struct_val(UTS_socket, diam), - hexdepth = is_def(entry[3]) ? entry[3] : if_def(diam) ? diam/2 : undef, + hexdepth = is_def(entry[3]) ? entry[3] + : is_def(diam) ? diam/2 + : undef, drive_size = drive=="hex" ? [["drive_size",inch*entry[1]], ["drive_depth",inch*hexdepth]] : drive=="torx" ? [["drive_size",entry[2]],["drive_depth",inch*entry[4]]] : [] ) diff --git a/skin.scad b/skin.scad index a75cff8..4d5e66d 100644 --- a/skin.scad +++ b/skin.scad @@ -801,8 +801,7 @@ function associate_vertices(polygons, split, curpoly=0) = curpoly==len(polygons)-1 ? polygons : let( polylen = len(polygons[curpoly]), - cursplit = force_list(split[curpoly]), - fdsa= echo(cursplit=cursplit) + cursplit = force_list(split[curpoly]) ) assert(len(split)==len(polygons)-1,str(split,"Split list length mismatch: it has length ", len(split)," but must have length ",len(polygons)-1)) assert(polylen<=len(polygons[curpoly+1]),str("Polygon ",curpoly," has more vertices than the next one.")) @@ -1143,9 +1142,9 @@ module sweep(shape, transforms, closed=false, caps, convexity=10, // path_sweep(ushape, knot_path, closed=true, method="natural"); // Example: knot with twist. Note if you twist it the other direction the center section untwists because of the natural twist there. Also compare to the "incremental" method which has less twist in the center. // function knot(a,b,t) = // rolling knot -// [ a * cos (3 * t) / (1 - b* sin (2 *t)), -// a * sin( 3 * t) / (1 - b* sin (2 *t)), -// 1.8 * b * cos (2 * t) /(1 - b* sin (2 *t))]; +// [ a * cos (3 * t) / (1 - b* sin (2 *t)), +// a * sin( 3 * t) / (1 - b* sin (2 *t)), +// 1.8 * b * cos (2 * t) /(1 - b* sin (2 *t))]; // a = 0.8; b = sqrt (1 - a * a); // ksteps = 400; // knot_path = [for (i=[0:ksteps-1]) 50 * knot(a,b,(i/ksteps)*360)]; diff --git a/version.scad b/version.scad index aa90602..9907c2d 100644 --- a/version.scad +++ b/version.scad @@ -6,7 +6,7 @@ ////////////////////////////////////////////////////////////////////// -BOSL_VERSION = [2,0,562]; +BOSL_VERSION = [2,0,565]; // Section: BOSL Library Version Functions