Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2016-04-15 19:01:08 +0300
committerbubnikv <bubnikv@gmail.com>2016-04-15 19:01:08 +0300
commit79c5e0a52d3a797967756a807989dd7c0f4b94c3 (patch)
treeb71c574e7fed97adba9832a1bb03b7aa0e2b1703 /xs/src/libslic3r/MultiPoint.cpp
parent42d9db04f2b9d9bfad4a29b8794fd5cd1be68207 (diff)
Optimize remove_duplicate_points.
Diffstat (limited to 'xs/src/libslic3r/MultiPoint.cpp')
-rw-r--r--xs/src/libslic3r/MultiPoint.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/xs/src/libslic3r/MultiPoint.cpp b/xs/src/libslic3r/MultiPoint.cpp
index 49aceacaf..627420628 100644
--- a/xs/src/libslic3r/MultiPoint.cpp
+++ b/xs/src/libslic3r/MultiPoint.cpp
@@ -102,15 +102,33 @@ MultiPoint::bounding_box() const
return BoundingBox(this->points);
}
-void
+bool
+MultiPoint::has_duplicate_points() const
+{
+ for (size_t i = 1; i < points.size(); ++i)
+ if (points[i-1].coincides_with(points[i]))
+ return true;
+ return false;
+}
+
+bool
MultiPoint::remove_duplicate_points()
{
- for (size_t i = 1; i < this->points.size(); ++i) {
- if (this->points.at(i).coincides_with(this->points.at(i-1))) {
- this->points.erase(this->points.begin() + i);
- --i;
+ size_t j = 0;
+ for (size_t i = 1; i < points.size(); ++i) {
+ if (points[j].coincides_with(points[i])) {
+ // Just increase index i.
+ } else {
+ ++ j;
+ if (j < i)
+ points[j] = points[i];
}
}
+ if (++ j < points.size()) {
+ points.erase(points.begin() + j, points.end());
+ return true;
+ }
+ return false;
}
void