From 4eea1e0e8460517910b437bdf7a66d2774a01486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20GINIER?= Date: Sat, 15 Jul 2023 17:17:50 +0200 Subject: [PATCH] Optimize sort_by_key (SortFaces/SortVerts) Remap boxes separately --- src/manifold/src/sort.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/manifold/src/sort.cpp b/src/manifold/src/sort.cpp index 2387d211a..8ea0f0687 100644 --- a/src/manifold/src/sort.cpp +++ b/src/manifold/src/sort.cpp @@ -312,8 +312,9 @@ void Manifold::Impl::SortVerts() { VecDH vertNew2Old(numVert); sequence(policy, vertNew2Old.begin(), vertNew2Old.end()); + sort_by_key(policy, vertMorton.begin(), vertMorton.end(), - zip(vertPos_.begin(), vertNew2Old.begin())); + vertNew2Old.begin()); ReindexVerts(vertNew2Old, numVert); @@ -323,10 +324,12 @@ void Manifold::Impl::SortVerts() { lower_bound(policy, vertMorton.begin(), vertMorton.end(), kNoCode) - vertMorton.begin(); - vertPos_.resize(newNumVert); + + vertNew2Old.resize(newNumVert); + Permute(vertPos_, vertNew2Old); + if (vertNormal_.size() == numVert) { Permute(vertNormal_, vertNew2Old); - vertNormal_.resize(newNumVert); } } @@ -395,7 +398,7 @@ void Manifold::Impl::SortFaces(VecDH& faceBox, sequence(policy, faceNew2Old.begin(), faceNew2Old.end()); sort_by_key(policy, faceMorton.begin(), faceMorton.end(), - zip(faceBox.begin(), faceNew2Old.begin())); + faceNew2Old.begin()); // Tris were flagged for removal with pairedHalfedge = -1 and assigned kNoCode // to sort them to the end, which allows them to be removed. @@ -403,10 +406,10 @@ void Manifold::Impl::SortFaces(VecDH& faceBox, find(policy, faceMorton.begin(), faceMorton.end(), kNoCode) - faceMorton.begin(); - faceBox.resize(newNumTri); faceMorton.resize(newNumTri); faceNew2Old.resize(newNumTri); + Permute(faceBox, faceNew2Old); GatherFaces(faceNew2Old); }