mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-08 07:46:39 +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/sub_str.scad>;
|
||||||
include <util/reverse.scad>;
|
include <util/reverse.scad>;
|
||||||
include <util/slice.scad>;
|
include <util/slice.scad>;
|
||||||
|
include <util/sort.scad>;
|
||||||
include <matrix/m_cumulate.scad>;
|
include <matrix/m_cumulate.scad>;
|
||||||
include <matrix/m_mirror.scad>;
|
include <matrix/m_mirror.scad>;
|
||||||
include <matrix/m_rotation.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_split_str.scad>;
|
||||||
include <util/test_parse_number.scad>;
|
include <util/test_parse_number.scad>;
|
||||||
include <util/test_slice.scad>;
|
include <util/test_slice.scad>;
|
||||||
|
include <util/test_sort.scad>;
|
||||||
|
|
||||||
// Pixel
|
// Pixel
|
||||||
include <pixel/test_px_line.scad>;
|
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