mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-06 14:56:47 +02:00
add sort
This commit is contained in:
@@ -70,6 +70,7 @@ include <util/split_str.scad>;
|
||||
include <util/sub_str.scad>;
|
||||
include <util/reverse.scad>;
|
||||
include <util/slice.scad>;
|
||||
include <util/sort.scad>;
|
||||
include <matrix/m_cumulate.scad>;
|
||||
include <matrix/m_mirror.scad>;
|
||||
include <matrix/m_rotation.scad>;
|
||||
|
19
src/util/sort.scad
Normal file
19
src/util/sort.scad
Normal file
@@ -0,0 +1,19 @@
|
||||
function _sort(pts, i) =
|
||||
let(leng = len(pts))
|
||||
leng <= 1 ? pts :
|
||||
let(
|
||||
pivot = pts[0],
|
||||
before = [for(j = 1; j < leng; j = j + 1) if(pts[j][i] < pivot[i]) pts[j]],
|
||||
after = [for(j = 1; j < leng; j = j + 1) if(pts[j][i] >= pivot[i]) pts[j]]
|
||||
)
|
||||
concat(_sort(before, i), [pivot], _sort(after, i));
|
||||
|
||||
function sort(points, by, idx = -1) =
|
||||
let(
|
||||
i = by == "x" ? 0 : (
|
||||
by == "y" ? 1 : (
|
||||
by == "z" ? 2 : idx
|
||||
)
|
||||
)
|
||||
)
|
||||
_sort(points, i);
|
@@ -68,6 +68,7 @@ include <util/test_sub_str.scad>;
|
||||
include <util/test_split_str.scad>;
|
||||
include <util/test_parse_number.scad>;
|
||||
include <util/test_slice.scad>;
|
||||
include <util/test_sort.scad>;
|
||||
|
||||
// Pixel
|
||||
include <pixel/test_px_line.scad>;
|
||||
|
23
test/util/test_sort.scad
Normal file
23
test/util/test_sort.scad
Normal file
@@ -0,0 +1,23 @@
|
||||
module test_sort() {
|
||||
echo("==== test_sort ====");
|
||||
|
||||
include <unittest.scad>;
|
||||
include <util/sort.scad>;
|
||||
|
||||
assertEqualPoints(
|
||||
[[2, 0, 0], [5, 0, 0], [7, 0, 0], [9, 0, 0], [10, 0, 0]],
|
||||
sort([[10, 0, 0], [5, 0, 0], [7, 0, 0], [2, 0, 0], [9, 0, 0]], by = "x")
|
||||
);
|
||||
|
||||
assertEqualPoints(
|
||||
[[2, 0, 0], [5, 0, 0], [7, 0, 0], [9, 0, 0], [10, 0, 0]],
|
||||
sort([[10, 0, 0], [5, 0, 0], [7, 0, 0], [2, 0, 0], [9, 0, 0]], by = "idx", idx = 0)
|
||||
);
|
||||
|
||||
assertEqualPoints(
|
||||
[[0, 2, 0], [0, 5, 0], [0, 7, 0], [0, 9, 0], [0, 10, 0]],
|
||||
sort([[0, 10, 0], [0, 5, 0], [0, 7, 0], [0, 2, 0], [0, 9, 0]], by = "y")
|
||||
);
|
||||
}
|
||||
|
||||
test_sort();
|
Reference in New Issue
Block a user