mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2025-01-01 09:49:45 +00:00
detect p=undef in transformations
This commit is contained in:
parent
267b5cd771
commit
a6de7ee975
1 changed files with 42 additions and 39 deletions
|
@ -23,6 +23,9 @@
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
_NO_ARG = [true,[123232345],false];
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: move()
|
// Function&Module: move()
|
||||||
// Aliases: translate()
|
// Aliases: translate()
|
||||||
//
|
//
|
||||||
|
@ -95,14 +98,14 @@ module move(v=[0,0,0], p, x=0, y=0, z=0) {
|
||||||
translate(point3d(v)+[x,y,z]) children();
|
translate(point3d(v)+[x,y,z]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function move(v=[0,0,0], p, x=0, y=0, z=0) =
|
function move(v=[0,0,0], p=_NO_ARG, x=0, y=0, z=0) =
|
||||||
let(
|
let(
|
||||||
m = len(v)==2? affine2d_translate(v+[x,y]) :
|
m = len(v)==2? affine2d_translate(v+[x,y]) :
|
||||||
affine3d_translate(point3d(v)+[x,y,z])
|
affine3d_translate(point3d(v)+[x,y,z])
|
||||||
)
|
)
|
||||||
is_undef(p)? m : apply(m, p);
|
p==_NO_ARG ? m : apply(m, p);
|
||||||
|
|
||||||
function translate(v=[0,0,0], p=undef) = move(v=v, p=p);
|
function translate(v=[0,0,0], p=_NO_ARG) = move(v=v, p=p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: left()
|
// Function&Module: left()
|
||||||
|
@ -140,7 +143,7 @@ module left(x=0, p) {
|
||||||
translate([-x,0,0]) children();
|
translate([-x,0,0]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function left(x=0, p) = move([-x,0,0],p=p);
|
function left(x=0, p=_NO_ARG) = move([-x,0,0],p=p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: right()
|
// Function&Module: right()
|
||||||
|
@ -178,7 +181,7 @@ module right(x=0, p) {
|
||||||
translate([x,0,0]) children();
|
translate([x,0,0]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function right(x=0, p) = move([x,0,0],p=p);
|
function right(x=0, p=_NO_ARG) = move([x,0,0],p=p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: fwd()
|
// Function&Module: fwd()
|
||||||
|
@ -216,7 +219,7 @@ module fwd(y=0, p) {
|
||||||
translate([0,-y,0]) children();
|
translate([0,-y,0]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function fwd(y=0, p) = move([0,-y,0],p=p);
|
function fwd(y=0, p=_NO_ARG) = move([0,-y,0],p=p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: back()
|
// Function&Module: back()
|
||||||
|
@ -254,7 +257,7 @@ module back(y=0, p) {
|
||||||
translate([0,y,0]) children();
|
translate([0,y,0]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function back(y=0,p) = move([0,y,0],p=p);
|
function back(y=0,p=_NO_ARG) = move([0,y,0],p=p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: down()
|
// Function&Module: down()
|
||||||
|
@ -291,7 +294,7 @@ module down(z=0, p) {
|
||||||
translate([0,0,-z]) children();
|
translate([0,0,-z]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function down(z=0, p) = move([0,0,-z],p=p);
|
function down(z=0, p=_NO_ARG) = move([0,0,-z],p=p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: up()
|
// Function&Module: up()
|
||||||
|
@ -328,7 +331,7 @@ module up(z=0, p) {
|
||||||
translate([0,0,z]) children();
|
translate([0,0,z]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function up(z=0, p) = move([0,0,z],p=p);
|
function up(z=0, p=_NO_ARG) = move([0,0,z],p=p);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -412,7 +415,7 @@ module rot(a=0, v, cp, from, to, reverse=false)
|
||||||
multmatrix(m) children();
|
multmatrix(m) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function rot(a=0, v, cp, from, to, reverse=false, planar=false, p, _m) =
|
function rot(a=0, v, cp, from, to, reverse=false, planar=false, p=_NO_ARG, _m) =
|
||||||
assert(is_undef(from)==is_undef(to), "from and to must be specified together.")
|
assert(is_undef(from)==is_undef(to), "from and to must be specified together.")
|
||||||
assert(is_undef(from) || is_vector(from, zero=false), "'from' must be a non-zero vector.")
|
assert(is_undef(from) || is_vector(from, zero=false), "'from' must be a non-zero vector.")
|
||||||
assert(is_undef(to) || is_vector(to, zero=false), "'to' must be a non-zero vector.")
|
assert(is_undef(to) || is_vector(to, zero=false), "'to' must be a non-zero vector.")
|
||||||
|
@ -450,7 +453,7 @@ function rot(a=0, v, cp, from, to, reverse=false, planar=false, p, _m) =
|
||||||
m3 = reverse? matrix_inverse(m2) : m2
|
m3 = reverse? matrix_inverse(m2) : m2
|
||||||
) m3
|
) m3
|
||||||
)
|
)
|
||||||
is_undef(p)? m : apply(m, p);
|
p==_NO_ARG ? m : apply(m, p);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -498,7 +501,7 @@ module xrot(a=0, p, cp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function xrot(a=0, p, cp) = rot([a,0,0], cp=cp, p=p);
|
function xrot(a=0, p=_NO_ARG, cp) = rot([a,0,0], cp=cp, p=p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: yrot()
|
// Function&Module: yrot()
|
||||||
|
@ -544,7 +547,7 @@ module yrot(a=0, p, cp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function yrot(a=0, p, cp) = rot([0,a,0], cp=cp, p=p);
|
function yrot(a=0, p=_NO_ARG, cp) = rot([0,a,0], cp=cp, p=p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: zrot()
|
// Function&Module: zrot()
|
||||||
|
@ -590,7 +593,7 @@ module zrot(a=0, p, cp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function zrot(a=0, p, cp) = rot(a, cp=cp, p=p);
|
function zrot(a=0, p=_NO_ARG, cp) = rot(a, cp=cp, p=p);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -633,9 +636,9 @@ function zrot(a=0, p, cp) = rot(a, cp=cp, p=p);
|
||||||
// path = circle(d=50,$fn=12);
|
// path = circle(d=50,$fn=12);
|
||||||
// #stroke(path,closed=true);
|
// #stroke(path,closed=true);
|
||||||
// stroke(scale([1.5,3],p=path),closed=true);
|
// stroke(scale([1.5,3],p=path),closed=true);
|
||||||
function scale(v=1, p, cp=[0,0,0]) =
|
function scale(v=1, p=_NO_ARG, cp=[0,0,0]) =
|
||||||
assert(is_num(v) || is_vector(v))
|
assert(is_num(v) || is_vector(v),"Invalid scale")
|
||||||
assert(is_undef(p) || is_list(p))
|
assert(p==_NO_ARG || is_list(p),"Invalid point list")
|
||||||
assert(is_vector(cp))
|
assert(is_vector(cp))
|
||||||
let(
|
let(
|
||||||
v = is_num(v)? [v,v,v] : v,
|
v = is_num(v)? [v,v,v] : v,
|
||||||
|
@ -653,7 +656,7 @@ function scale(v=1, p, cp=[0,0,0]) =
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
is_undef(p)? m : apply(m, p) ;
|
p==_NO_ARG? m : apply(m, p) ;
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: xscale()
|
// Function&Module: xscale()
|
||||||
|
@ -704,9 +707,9 @@ module xscale(x=1, p, cp=0, planar) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function xscale(x=1, p, cp=0, planar=false) =
|
function xscale(x=1, p=_NO_ARG, cp=0, planar=false) =
|
||||||
assert(is_finite(x))
|
assert(is_finite(x))
|
||||||
assert(is_undef(p) || is_list(p))
|
assert(p==_NO_ARG || is_list(p))
|
||||||
assert(is_finite(cp) || is_vector(cp))
|
assert(is_finite(cp) || is_vector(cp))
|
||||||
assert(is_bool(planar))
|
assert(is_bool(planar))
|
||||||
let( cp = is_num(cp)? [cp,0,0] : cp )
|
let( cp = is_num(cp)? [cp,0,0] : cp )
|
||||||
|
@ -762,9 +765,9 @@ module yscale(y=1, p, cp=0, planar) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function yscale(y=1, p, cp=0, planar=false) =
|
function yscale(y=1, p=_NO_ARG, cp=0, planar=false) =
|
||||||
assert(is_finite(y))
|
assert(is_finite(y))
|
||||||
assert(is_undef(p) || is_list(p))
|
assert(p==_NO_ARG || is_list(p))
|
||||||
assert(is_finite(cp) || is_vector(cp))
|
assert(is_finite(cp) || is_vector(cp))
|
||||||
assert(is_bool(planar))
|
assert(is_bool(planar))
|
||||||
let( cp = is_num(cp)? [0,cp,0] : cp )
|
let( cp = is_num(cp)? [0,cp,0] : cp )
|
||||||
|
@ -818,7 +821,7 @@ module zscale(z=1, p, cp=0) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function zscale(z=1, p, cp=0) =
|
function zscale(z=1, p=_NO_ARG, cp=0) =
|
||||||
assert(is_finite(z))
|
assert(is_finite(z))
|
||||||
assert(is_undef(p) || is_list(p))
|
assert(is_undef(p) || is_list(p))
|
||||||
assert(is_finite(cp) || is_vector(cp))
|
assert(is_finite(cp) || is_vector(cp))
|
||||||
|
@ -892,11 +895,11 @@ function zscale(z=1, p, cp=0) =
|
||||||
// color("red") stroke([[0,0],10*n],endcap2="arrow2");
|
// color("red") stroke([[0,0],10*n],endcap2="arrow2");
|
||||||
// #stroke(path,closed=true);
|
// #stroke(path,closed=true);
|
||||||
// stroke(mirror(n, p=path),closed=true);
|
// stroke(mirror(n, p=path),closed=true);
|
||||||
function mirror(v, p) =
|
function mirror(v, p=_NO_ARG) =
|
||||||
assert(is_vector(v))
|
assert(is_vector(v))
|
||||||
assert(is_undef(p) || is_list(p))
|
assert(p==_NO_ARG || is_list(p),"Invalid pointlist")
|
||||||
let(m = len(v)==2? affine2d_mirror(v) : affine3d_mirror(v))
|
let(m = len(v)==2? affine2d_mirror(v) : affine3d_mirror(v))
|
||||||
is_undef(p)? m : apply(m,p);
|
p==_NO_ARG? m : apply(m,p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: xflip()
|
// Function&Module: xflip()
|
||||||
|
@ -944,10 +947,10 @@ module xflip(p, x=0, planar) {
|
||||||
translate([-x,0,0]) children();
|
translate([-x,0,0]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function xflip(p, x=0, planar=false) =
|
function xflip(p=_NO_ARG, x=0, planar=false) =
|
||||||
assert(is_finite(x))
|
assert(is_finite(x))
|
||||||
assert(is_bool(planar))
|
assert(is_bool(planar))
|
||||||
assert(is_undef(p) || is_list(p))
|
assert(p==_NO_ARG || is_list(p),"Invalid point list")
|
||||||
let(
|
let(
|
||||||
v = RIGHT,
|
v = RIGHT,
|
||||||
n = planar? point2d(v) : v
|
n = planar? point2d(v) : v
|
||||||
|
@ -957,7 +960,7 @@ function xflip(p, x=0, planar=false) =
|
||||||
cp = x * n,
|
cp = x * n,
|
||||||
m = move(cp) * mirror(n) * move(-cp)
|
m = move(cp) * mirror(n) * move(-cp)
|
||||||
)
|
)
|
||||||
is_undef(p)? m : apply(m, p);
|
p==_NO_ARG? m : apply(m, p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: yflip()
|
// Function&Module: yflip()
|
||||||
|
@ -1005,10 +1008,10 @@ module yflip(p, y=0, planar) {
|
||||||
translate([0,-y,0]) children();
|
translate([0,-y,0]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function yflip(p, y=0, planar=false) =
|
function yflip(p=_NO_ARG, y=0, planar=false) =
|
||||||
assert(is_finite(y))
|
assert(is_finite(y))
|
||||||
assert(is_bool(planar))
|
assert(is_bool(planar))
|
||||||
assert(is_undef(p) || is_list(p))
|
assert(p==_NO_ARG || is_list(p),"Invalid point list")
|
||||||
let(
|
let(
|
||||||
v = BACK,
|
v = BACK,
|
||||||
n = planar? point2d(v) : v
|
n = planar? point2d(v) : v
|
||||||
|
@ -1018,7 +1021,7 @@ function yflip(p, y=0, planar=false) =
|
||||||
cp = y * n,
|
cp = y * n,
|
||||||
m = move(cp) * mirror(n) * move(-cp)
|
m = move(cp) * mirror(n) * move(-cp)
|
||||||
)
|
)
|
||||||
is_undef(p)? m : apply(m, p);
|
p==_NO_ARG? m : apply(m, p);
|
||||||
|
|
||||||
|
|
||||||
// Function&Module: zflip()
|
// Function&Module: zflip()
|
||||||
|
@ -1062,12 +1065,12 @@ module zflip(p, z=0) {
|
||||||
translate([0,0,-z]) children();
|
translate([0,0,-z]) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function zflip(p, z=0) =
|
function zflip(p=_NO_ARG, z=0) =
|
||||||
assert(is_finite(z))
|
assert(is_finite(z))
|
||||||
assert(is_undef(p) || is_list(p))
|
assert(p==_NO_ARG || is_list(p),"Invalid point list")
|
||||||
z==0? mirror([0,0,1],p=p) :
|
z==0? mirror([0,0,1],p=p) :
|
||||||
let(m = up(z) * mirror(UP) * down(z))
|
let(m = up(z) * mirror(UP) * down(z))
|
||||||
p==undef? m : apply(m, p);
|
p==_NO_ARG? m : apply(m, p);
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1118,8 +1121,8 @@ function zflip(p, z=0) =
|
||||||
// color("purple") stroke([[0,0,0],10*[1,1,0]]);
|
// color("purple") stroke([[0,0,0],10*[1,1,0]]);
|
||||||
// color("green") stroke([[0,0,0],10*[-1,1,0]]);
|
// color("green") stroke([[0,0,0],10*[-1,1,0]]);
|
||||||
// }
|
// }
|
||||||
function frame_map(x,y,z, p, reverse=false) =
|
function frame_map(x,y,z, p=_NO_ARG, reverse=false) =
|
||||||
is_def(p)
|
p != _NO_ARG
|
||||||
? apply(frame_map(x,y,z,reverse=reverse), p)
|
? apply(frame_map(x,y,z,reverse=reverse), p)
|
||||||
:
|
:
|
||||||
assert(num_defined([x,y,z])>=2, "Must define at least two inputs")
|
assert(num_defined([x,y,z])>=2, "Must define at least two inputs")
|
||||||
|
@ -1222,7 +1225,7 @@ module skew(p, sxy=0, sxz=0, syx=0, syz=0, szx=0, szy=0)
|
||||||
) children();
|
) children();
|
||||||
}
|
}
|
||||||
|
|
||||||
function skew(p, sxy=0, sxz=0, syx=0, syz=0, szx=0, szy=0, planar=false) =
|
function skew(p=_NO_ARG, sxy=0, sxz=0, syx=0, syz=0, szx=0, szy=0, planar=false) =
|
||||||
assert(is_finite(sxy))
|
assert(is_finite(sxy))
|
||||||
assert(is_finite(sxz))
|
assert(is_finite(sxz))
|
||||||
assert(is_finite(syx))
|
assert(is_finite(syx))
|
||||||
|
@ -1238,7 +1241,7 @@ function skew(p, sxy=0, sxz=0, syx=0, syz=0, szx=0, szy=0, planar=false) =
|
||||||
[ 0, 0, 1]
|
[ 0, 0, 1]
|
||||||
] : affine3d_skew(sxy=sxy, sxz=sxz, syx=syx, syz=syz, szx=szx, szy=szy)
|
] : affine3d_skew(sxy=sxy, sxz=sxz, syx=syx, syz=syz, szx=szx, szy=szy)
|
||||||
)
|
)
|
||||||
is_undef(p)? m : apply(m, p);
|
p==_NO_ARG? m : apply(m, p);
|
||||||
|
|
||||||
|
|
||||||
// Section: Applying transformation matrices to
|
// Section: Applying transformation matrices to
|
||||||
|
|
Loading…
Reference in a new issue