mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2024-12-29 16:29:40 +00:00
Added resample_path() tests.
This commit is contained in:
parent
82de139057
commit
4d9833a368
2 changed files with 74 additions and 26 deletions
|
@ -532,13 +532,13 @@ function resample_path(path, n, spacing, keep_corners, closed=true) =
|
||||||
pcnt = len(path),
|
pcnt = len(path),
|
||||||
plen = path_length(path, closed=closed),
|
plen = path_length(path, closed=closed),
|
||||||
subpaths = [ for (p = pair(corners)) [for(i = [p.x:1:p.y]) path[i%pcnt]] ],
|
subpaths = [ for (p = pair(corners)) [for(i = [p.x:1:p.y]) path[i%pcnt]] ],
|
||||||
n = is_undef(n)? n : closed? n+1 : n
|
n = is_undef(n)? undef : closed? n+1 : n
|
||||||
)
|
)
|
||||||
assert(n==undef || n >= len(corners), "There are nore than `n=` corners whose angle is greater than `keep_corners=`.")
|
assert(n==undef || n >= len(corners), "There are nore than `n=` corners whose angle is greater than `keep_corners=`.")
|
||||||
let(
|
let(
|
||||||
lens = [for (subpath = subpaths) path_length(subpath)],
|
lens = [for (subpath = subpaths) path_length(subpath)],
|
||||||
part_ns = is_undef(n)
|
part_ns = is_undef(n)
|
||||||
? [for (i=idx(subpaths)) ceil(lens[i]/spacing)-1]
|
? [for (i=idx(subpaths)) max(1,round(lens[i]/spacing)-1)]
|
||||||
: let(
|
: let(
|
||||||
ccnt = len(corners),
|
ccnt = len(corners),
|
||||||
parts = [for (l=lens) (n-ccnt) * l/plen],
|
parts = [for (l=lens) (n-ccnt) * l/plen],
|
||||||
|
@ -549,8 +549,8 @@ function resample_path(path, n, spacing, keep_corners, closed=true) =
|
||||||
let(
|
let(
|
||||||
subpath = subpaths[i],
|
subpath = subpaths[i],
|
||||||
splen = lens[i],
|
splen = lens[i],
|
||||||
n = part_ns[i] + 1,
|
pn = part_ns[i] + 1,
|
||||||
distlist = lerpn(0, splen, n, false),
|
distlist = lerpn(0, splen, pn, false),
|
||||||
cuts = path_cut_points(subpath, distlist, closed=false)
|
cuts = path_cut_points(subpath, distlist, closed=false)
|
||||||
)
|
)
|
||||||
each column(cuts,0),
|
each column(cuts,0),
|
||||||
|
|
|
@ -173,29 +173,77 @@ test_subdivide_long_segments();
|
||||||
|
|
||||||
module test_resample_path(){
|
module test_resample_path(){
|
||||||
path = xscale(2,circle($fn=250, r=10));
|
path = xscale(2,circle($fn=250, r=10));
|
||||||
sampled = resample_path(path, 16);
|
assert_approx(
|
||||||
assert_approx(sampled,
|
resample_path(path, 16), [
|
||||||
[[20, 0], [17.1657142861, -5.13020769642],
|
[20, 0],
|
||||||
[11.8890531315, -8.04075246881], [6.03095737128,
|
[17.1657142861, -5.13020769642],
|
||||||
-9.53380030092], [1.72917236085e-14, -9.99921044204],
|
[11.8890531315, -8.04075246881],
|
||||||
[-6.03095737128, -9.53380030092], [-11.8890531315,
|
[6.03095737128, -9.53380030092],
|
||||||
-8.04075246881], [-17.1657142861, -5.13020769642], [-20,
|
[1.72917236085e-14, -9.99921044204],
|
||||||
-3.19176120946e-14], [-17.1657142861, 5.13020769642],
|
[-6.03095737128, -9.53380030092],
|
||||||
[-11.8890531315, 8.04075246881], [-6.03095737128,
|
[-11.8890531315, -8.04075246881],
|
||||||
9.53380030092], [-4.20219414821e-14, 9.99921044204],
|
[-17.1657142861, -5.13020769642],
|
||||||
[6.03095737128, 9.53380030092], [11.8890531315,
|
[-20, -3.19176120946e-14],
|
||||||
8.04075246881], [17.1657142861, 5.13020769642]]);
|
[-17.1657142861, 5.13020769642],
|
||||||
|
[-11.8890531315, 8.04075246881],
|
||||||
|
[-6.03095737128, 9.53380030092],
|
||||||
|
[-4.20219414821e-14, 9.99921044204],
|
||||||
|
[6.03095737128, 9.53380030092],
|
||||||
|
[11.8890531315, 8.04075246881],
|
||||||
|
[17.1657142861, 5.13020769642]
|
||||||
|
]
|
||||||
|
);
|
||||||
path2 = square(20);
|
path2 = square(20);
|
||||||
assert_approx(resample_path(path2, spacing=6),
|
assert_approx(
|
||||||
[[20, 0], [13.8461538462, 0], [7.69230769231, 0], [1.53846153846, 0],
|
resample_path(path2, spacing=6), [
|
||||||
[0, 4.61538461538], [0, 10.7692307692], [0, 16.9230769231], [3.07692307692, 20],
|
[20, 0], [13.8461538462, 0], [7.69230769231, 0],
|
||||||
[9.23076923077, 20], [15.3846153846, 20], [20, 18.4615384615], [20, 12.3076923077], [20, 6.15384615385]]);
|
[1.53846153846, 0], [0, 4.61538461538],
|
||||||
assert_equal(resample_path(path2, spacing=6,closed=false),[[20, 0], [14, 0], [8, 0], [2, 0], [0, 4], [0, 10], [0, 16], [2, 20], [8, 20], [14, 20], [20, 20]]);
|
[0, 10.7692307692], [0, 16.9230769231],
|
||||||
assert_approx(resample_path(path, spacing=17),
|
[3.07692307692, 20], [9.23076923077, 20],
|
||||||
[[20, 0], [8.01443073309, -9.16170407964],
|
[15.3846153846, 20], [20, 18.4615384615],
|
||||||
[-8.01443073309, -9.16170407964], [-20,
|
[20, 12.3076923077], [20, 6.15384615385]
|
||||||
-1.59309060367e-14], [-8.01443073309, 9.16170407964],
|
]
|
||||||
[8.01443073309, 9.16170407964]]);
|
);
|
||||||
|
assert_equal(
|
||||||
|
resample_path(path2, spacing=6,closed=false), [
|
||||||
|
[20, 0], [14, 0], [ 8, 0], [ 2, 0],
|
||||||
|
[ 0, 4], [ 0,10], [ 0,16], [ 2,20],
|
||||||
|
[ 8,20], [14,20], [20,20]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
assert_equal(
|
||||||
|
resample_path(path2, n=7, keep_corners=90, closed=true), [
|
||||||
|
[20,0],[10,0],[0,0],[0,10],[0,20],[20,20],[20,10]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
assert_equal(
|
||||||
|
resample_path(path2, n=7, keep_corners=90, closed=false), [
|
||||||
|
[20,0],[10,0],[0,0],[0,10],[0,20],[10,20],[20,20]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
assert_approx(
|
||||||
|
resample_path(path2, spacing=6, keep_corners=90, closed=false), [
|
||||||
|
[20, 0], [13.3333333333, 0], [6.66666666667,0],
|
||||||
|
[ 0, 0], [ 0,6.66666666667], [0,13.3333333333],
|
||||||
|
[ 0,20], [ 6.66666666667,20], [13.3333333333,20],
|
||||||
|
[20,20]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
assert_approx(
|
||||||
|
resample_path(path2, spacing=6, keep_corners=90), [
|
||||||
|
[20, 0], [13.3333333333, 0], [ 6.66666666667, 0],
|
||||||
|
[ 0, 0], [ 0, 6.66666666667], [ 0,13.3333333333],
|
||||||
|
[ 0,20], [ 6.66666666667,20], [13.3333333333,20],
|
||||||
|
[20,20], [20,13.3333333333], [20, 6.66666666667]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
assert_approx(
|
||||||
|
resample_path(path, spacing=17), [
|
||||||
|
[20, 0], [8.01443073309, -9.16170407964],
|
||||||
|
[-8.01443073309, -9.16170407964], [-20, -1.59309060367e-14],
|
||||||
|
[-8.01443073309, 9.16170407964], [8.01443073309, 9.16170407964]
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
test_resample_path();
|
test_resample_path();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue