diff --git a/docs/images/lib2x-dedup-1.JPG b/docs/images/lib2x-dedup-1.JPG new file mode 100644 index 00000000..9664cf48 Binary files /dev/null and b/docs/images/lib2x-dedup-1.JPG differ diff --git a/docs/images/lib2x-dedup-2.JPG b/docs/images/lib2x-dedup-2.JPG new file mode 100644 index 00000000..c33b9c64 Binary files /dev/null and b/docs/images/lib2x-dedup-2.JPG differ diff --git a/docs/lib2x-dedup.md b/docs/lib2x-dedup.md new file mode 100644 index 00000000..4468cada --- /dev/null +++ b/docs/lib2x-dedup.md @@ -0,0 +1,45 @@ +# dedup + +Eliminating duplicate copies of repeating vectors. If `lt` has many elements, sorting `lt` first and setting `sorted` to `true` will be faster. + +**Since:** 2.3 + +## Parameters + +- `lt` : A list of vectors. +- `sorted` : If `false` (default), use native `search`. If `true`, `lt` must be sorted by zyx (from the last idx to first) and `dedup` will use binary search internally. + +## Examples + + use ; + use ; + + pts1 = px_circle(10, filled = true); + pts2 = [for(p = px_circle(5, filled = true)) p + [10, 0]]; + + // simple union + pts3 = dedup(concat(pts1, pts2)); + for(p = pts3) { + translate(p) + square(1, center = true); + } + +![dedup](images/lib2x-dedup-1.JPG) + + use ; + use ; + use ; + + pts1 = px_circle(20, filled = true); + pts2 = [for(p = px_circle(10, filled = true)) p + [20, 0]]; + + sorted_pts = sort(sort(concat(pts1, pts2), by = "x"), by = "y"); + + // simple union + pts3 = dedup(sorted_pts, sorted = true); + for(p = pts3) { + translate(p) + square(1, center = true); + } + +![dedup](images/lib2x-dedup-2.JPG) \ No newline at end of file diff --git a/src/util/dedup.scad b/src/util/dedup.scad index 335b78eb..38f71e08 100644 --- a/src/util/dedup.scad +++ b/src/util/dedup.scad @@ -1,3 +1,13 @@ +/** +* dedup.scad +* +* @copyright Justin Lin, 2020 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2x-dedup.html +* +**/ + use ; function dedup(lt, sorted = false) =