From 6c48c27bafa750322cf0d220774c2f677a588092 Mon Sep 17 00:00:00 2001 From: Revar Desmera Date: Sat, 3 Aug 2019 02:18:40 -0700 Subject: [PATCH] Added r/d alternate args to or/od for polygon 2D shapes. --- common.scad | 6 +++++- knurling.scad | 8 ++++---- masks.scad | 4 ++-- shapes.scad | 12 ++++++------ shapes2d.scad | 40 ++++++++++++++++++++-------------------- transforms.scad | 4 ++-- 6 files changed, 39 insertions(+), 35 deletions(-) diff --git a/common.scad b/common.scad index 279eeee..de9848c 100644 --- a/common.scad +++ b/common.scad @@ -83,12 +83,16 @@ function all_defined(v,recursive=false) = max([for (x=v) is_undef(x)||(recursive // Arguments: // r1 = Most specific radius. // d1 = Most specific diameter. +// r2 = Second most specific radius. +// d2 = Second most specific diameter. // r = Most general radius. // d = Most general diameter. // dflt = Value to return if all other values given are `undef`. -function get_radius(r1=undef, r=undef, d1=undef, d=undef, dflt=undef) = ( +function get_radius(r1=undef, r2=undef, r=undef, d1=undef, d2=undef, d=undef, dflt=undef) = ( !is_undef(r1)? r1 : + !is_undef(r2)? r2 : !is_undef(d1)? d1/2 : + !is_undef(d2)? d2/2 : !is_undef(r)? r : !is_undef(d)? d/2 : dflt diff --git a/knurling.scad b/knurling.scad index 096f085..cf753d4 100644 --- a/knurling.scad +++ b/knurling.scad @@ -59,8 +59,8 @@ module knurled_cylinder( rounding=undef, rounding1=undef, rounding2=undef, anchor=CENTER, spin=0, orient=UP ) { - r1 = get_radius(r1=r1,r=r,d1=d1,d=d,dflt=10); - r2 = get_radius(r1=r2,r=r,d1=d2,d=d,dflt=10); + r1 = get_radius(r1=r1, r=r, d1=d1, d=d, dflt=10); + r2 = get_radius(r1=r2, r=r, d1=d2, d=d, dflt=10); inset = r1 * sin(180/count) / tan(profile/2); twist = 360*l*tan(helix)/(r1*2*PI); c1 = circle(r=r1,$fn=count); @@ -156,8 +156,8 @@ module knurled_cylinder_mask( count=30, profile=120, helix=30, anchor=CENTER, spin=0, orient=UP ) { - r1 = get_radius(r1=r1,r=r,d1=d1,d=d,dflt=10); - r2 = get_radius(r1=r2,r=r,d1=d2,d=d,dflt=10); + r1 = get_radius(r1=r1, r=r, d1=d1, d=d, dflt=10); + r2 = get_radius(r1=r2, r=r, d1=d2, d=d, dflt=10); orient_and_anchor([2*r1,2*r1,l], size2=[2*r2,2*r2], anchor=anchor, spin=spin, orient=orient, geometry="cylinder", chain=true) { difference() { cylinder(r1=r1+overage, r2=r2+overage, h=l, center=true); diff --git a/masks.scad b/masks.scad index c55637b..6b311c4 100644 --- a/masks.scad +++ b/masks.scad @@ -38,8 +38,8 @@ module angle_pie_mask( anchor=CENTER, spin=0, orient=UP ) { l = first_defined([l, h, 1]); - r1 = get_radius(r1, r, d1, d, 10); - r2 = get_radius(r2, r, d2, d, 10); + r1 = get_radius(r1=r1, r=r, d1=d1, d=d, dflt=10); + r2 = get_radius(r1=r2, r=r, d1=d2, d=d, dflt=10); orient_and_anchor([2*r1, 2*r1, l], orient, anchor, spin=spin, chain=true) { pie_slice(ang=ang, l=l+0.1, r1=r1, r2=r2, anchor=CENTER); children(); diff --git a/shapes.scad b/shapes.scad index 46fc113..d91910b 100644 --- a/shapes.scad +++ b/shapes.scad @@ -584,8 +584,8 @@ module cyl( circum=false, realign=false, from_end=false, anchor=CENTER, spin=0, orient=UP, center=undef ) { - r1 = get_radius(r1, r, d1, d, 1); - r2 = get_radius(r2, r, d2, d, 1); + r1 = get_radius(r1=r1, r=r, d1=d1, d=d, dflt=1); + r2 = get_radius(r1=r2, r=r, d1=d2, d=d, dflt=1); l = first_defined([l, h, 1]); size1 = [r1*2,r1*2,l]; size2 = [r2*2,r2*2,l]; @@ -1214,8 +1214,8 @@ module pie_slice( center=undef, h=undef ) { l = first_defined([l, h, 1]); - r1 = get_radius(r1, r, d1, d, 10); - r2 = get_radius(r2, r, d2, d, 10); + r1 = get_radius(r1=r1, r=r, d1=d1, d=d, dflt=10); + r2 = get_radius(r1=r2, r=r, d1=d2, d=d, dflt=10); maxd = max(r1,r2)+0.1; size = [2*r1, 2*r1, l]; orient_and_anchor(size, orient, anchor, spin=spin, center=center, geometry="cylinder", chain=true) { @@ -1358,8 +1358,8 @@ module arced_slot( $fn2 = undef ) { r = get_radius(r=r, d=d, dflt=2); - sr1 = get_radius(sr1, sr, sd1, sd, 2); - sr2 = get_radius(sr2, sr, sd2, sd, 2); + sr1 = get_radius(r1=sr1, r=sr, d1=sd1, d=sd, dflt=2); + sr2 = get_radius(r1=sr2, r=sr, d1=sd2, d=sd, dflt=2); fn_minor = first_defined([$fn2, $fn]); da = ea - sa; size = [r+sr1, r+sr1, h]; diff --git a/shapes2d.scad b/shapes2d.scad index 8b822c2..81d6dfc 100644 --- a/shapes2d.scad +++ b/shapes2d.scad @@ -251,7 +251,7 @@ function arc(N, r, angle, d, cp, points, width, thickness, start, wedge=false) = cp = is_def(cp) ? cp : [0,0], start = is_def(start)? start : is_vector(angle) ? angle[0] : 0, angle = is_vector(angle)? angle[1]-angle[0] : angle, - r = get_radius(r=r,d=d), + r = get_radius(r=r, d=d), N = max(3, is_undef(N)? ceil(segs(r)*abs(angle)/360) : N), arcpoints = [for(i=[0:N-1]) let(theta = start + i*angle/(N-1)) r*[cos(theta),sin(theta)]+cp], extra = wedge? [cp] : [] @@ -370,17 +370,17 @@ module trapezoid(h, w1, w2, anchor=CENTER, spin=0) // regular_ngon(n=8, side=20, realign=true); // Example(2D): Called as Function // stroke(closed=true, regular_ngon(n=6, or=30)); -function regular_ngon(n=6, or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false, anchor=CENTER, spin=0) = +function regular_ngon(n=6, r, d, or, od, ir, id, side, realign=false, anchor=CENTER, spin=0) = let( sc = 1/cos(180/n), - r = get_radius(r1=ir*sc, r=or, d1=id*sc, d=od, dflt=side/2/sin(180/n)), + r = get_radius(r1=ir*sc, r2=or, r=r, d1=id*sc, d2=od, d=d, dflt=side/2/sin(180/n)), offset = 90 + (realign? (180/n) : 0), path = [for (a=[0:360/n:360-EPSILON]) r*[cos(a+offset),sin(a+offset)]] ) rot(spin, p=move(-r*normalize(anchor), p=path)); -module regular_ngon(n=6, or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false, anchor=CENTER, spin=0) - polygon(regular_ngon(n=n,or=or,od=od,ir=ir,id=id,side=side,realign=realign, anchor=anchor, spin=spin)); +module regular_ngon(n=6, r, d, or, od, ir, id, side, realign=false, anchor=CENTER, spin=0) + polygon(regular_ngon(n=n,r=r,d=d,or=or,od=od,ir=ir,id=id,side=side,realign=realign, anchor=anchor, spin=spin)); // Function&Module: pentagon() @@ -412,12 +412,12 @@ module regular_ngon(n=6, or=undef, od=undef, ir=undef, id=undef, side=undef, rea // pentagon(side=20, realign=true); // Example(2D): Called as Function // stroke(closed=true, pentagon(or=30)); -function pentagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false, anchor=CENTER, spin=0) = - regular_ngon(n=5, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin); +function pentagon(r, d, or, od, ir, id, side, realign=false, anchor=CENTER, spin=0) = + regular_ngon(n=5, r=r, d=d, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin); -module pentagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false, anchor=CENTER, spin=0) - polygon(pentagon(or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin)); +module pentagon(r, d, or, od, ir, id, side, realign=false, anchor=CENTER, spin=0) + polygon(pentagon(r=r, d=d, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin)); // Function&Module: hexagon() @@ -447,12 +447,12 @@ module pentagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=fals // hexagon(side=20, realign=true); // Example(2D): Called as Function // stroke(closed=true, hexagon(or=30)); -function hexagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false, anchor=CENTER, spin=0) = - regular_ngon(n=6, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin); +function hexagon(r, d, or, od, ir, id, side, realign=false, anchor=CENTER, spin=0) = + regular_ngon(n=6, r=r, d=d, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin); -module hexagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false, anchor=CENTER, spin=0) - polygon(hexagon(or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin)); +module hexagon(r, d, or, od, ir, id, side, realign=false, anchor=CENTER, spin=0) + polygon(hexagon(r=r, d=d, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin)); // Function&Module: octagon() @@ -482,12 +482,12 @@ module hexagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false // octagon(side=20, realign=true); // Example(2D): Called as Function // stroke(closed=true, octagon(or=30)); -function octagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false, anchor=CENTER, spin=0) = - regular_ngon(n=8, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin); +function octagon(r, d, or, od, ir, id, side, realign=false, anchor=CENTER, spin=0) = + regular_ngon(n=8, r=r, d=d, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin); -module octagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false, anchor=CENTER, spin=0) - polygon(octagon(or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin)); +module octagon(r, d, or, od, ir, id, side, realign=false, anchor=CENTER, spin=0) + polygon(octagon(r=r, d=d, or=or, od=od, ir=ir, id=id, side=side, realign=realign, anchor=anchor, spin=spin)); // Function&Module: glued_circles() @@ -510,7 +510,7 @@ module octagon(or=undef, od=undef, ir=undef, id=undef, side=undef, realign=false // glued_circles(d=30, spread=30, tangent=-30); // Example(2D): Called as Function // stroke(closed=true, glued_circles(r=15, spread=40, tangent=45)); -function glued_circles(r=undef, d=undef, spread=10, tangent=30, anchor=CENTER, spin=0) = +function glued_circles(r, d, spread=10, tangent=30, anchor=CENTER, spin=0) = let( r = get_radius(r=r, d=d, dflt=10), r2 = (spread/2 / sin(tangent)) - r, @@ -536,7 +536,7 @@ function glued_circles(r=undef, d=undef, spread=10, tangent=30, anchor=CENTER, s ) rot(spin, p=move(-vmul(anchor,s), p=path)); -module glued_circles(r=undef, d=undef, spread=10, tangent=30, anchor=CENTER, spin=0) +module glued_circles(r, d, spread=10, tangent=30, anchor=CENTER, spin=0) polygon(glued_circles(r=r, d=d, spread=spread, tangent=tangent, anchor=anchor, spin=spin)); @@ -631,7 +631,7 @@ function _superformula(theta,m1,m2,n1,n2=1,n3=1,a=1,b=1) = // for(i=[1:3]) right(2.5*i)supershape(step=.5,m1=88, m2=64, n1=-i*i,n2=1,r=1); function supershape(step=0.5,m1=4,m2=undef,n1=1,n2=undef,n3=undef,a=1,b=undef,r=undef,d=undef,anchor=CENTER, spin=0) = let( - r = get_radius(r=r,d=d,dflt=undef), + r = get_radius(r=r, d=d, dflt=undef), m2 = is_def(m2) ? m2 : m1, n2 = is_def(n2) ? n2 : n1, n3 = is_def(n3) ? n3 : n2, diff --git a/transforms.scad b/transforms.scad index 004ff73..cd7fc58 100644 --- a/transforms.scad +++ b/transforms.scad @@ -1530,8 +1530,8 @@ module arc_of( sa=0, ea=360, rot=true ) { - rx = get_radius(rx, r, dx, d, 1); - ry = get_radius(ry, r, dy, d, 1); + rx = get_radius(r1=rx, r=r, d1=dx, d=d, dflt=1); + ry = get_radius(r1=ry, r=r, d1=dy, d=d, dflt=1); sa = posmod(sa, 360); ea = posmod(ea, 360); n = (abs(ea-sa)<0.01)?(n+1):n;