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-09-26 13:44:45 +0300
committerbubnikv <bubnikv@gmail.com>2016-09-26 13:44:45 +0300
commit4046552dd10453f48a14ebe13b71ab1c78b05de9 (patch)
tree46df4e31eb7fd38a719b8e07a67f81d7d5fc2f6a /xs/src/libslic3r/MultiPoint.cpp
parent758458e5a01fb138bf8a420ca52091f554b9e85d (diff)
Documented MultiPoint.
Diffstat (limited to 'xs/src/libslic3r/MultiPoint.cpp')
-rw-r--r--xs/src/libslic3r/MultiPoint.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/xs/src/libslic3r/MultiPoint.cpp b/xs/src/libslic3r/MultiPoint.cpp
index e253f9bba..b771833ed 100644
--- a/xs/src/libslic3r/MultiPoint.cpp
+++ b/xs/src/libslic3r/MultiPoint.cpp
@@ -171,9 +171,12 @@ MultiPoint::dump_perl() const
return ret.str();
}
+//FIXME This is very inefficient in term of memory use.
+// The recursive algorithm shall run in place, not allocating temporary data in each recursion.
Points
MultiPoint::_douglas_peucker(const Points &points, const double tolerance)
{
+ assert(points.size() >= 2);
Points results;
double dmax = 0;
size_t index = 0;
@@ -190,13 +193,15 @@ MultiPoint::_douglas_peucker(const Points &points, const double tolerance)
Points dp0;
dp0.reserve(index + 1);
dp0.insert(dp0.end(), points.begin(), points.begin() + index + 1);
+ // Recursive call.
Points dp1 = MultiPoint::_douglas_peucker(dp0, tolerance);
results.reserve(results.size() + dp1.size() - 1);
results.insert(results.end(), dp1.begin(), dp1.end() - 1);
dp0.clear();
- dp0.reserve(points.size() - index + 1);
+ dp0.reserve(points.size() - index);
dp0.insert(dp0.end(), points.begin() + index, points.end());
+ // Recursive call.
dp1 = MultiPoint::_douglas_peucker(dp0, tolerance);
results.reserve(results.size() + dp1.size());
results.insert(results.end(), dp1.begin(), dp1.end());