diff options
author | bubnikv <bubnikv@gmail.com> | 2016-09-26 13:44:45 +0300 |
---|---|---|
committer | bubnikv <bubnikv@gmail.com> | 2016-09-26 13:44:45 +0300 |
commit | 4046552dd10453f48a14ebe13b71ab1c78b05de9 (patch) | |
tree | 46df4e31eb7fd38a719b8e07a67f81d7d5fc2f6a /xs/src/libslic3r/MultiPoint.cpp | |
parent | 758458e5a01fb138bf8a420ca52091f554b9e85d (diff) |
Documented MultiPoint.
Diffstat (limited to 'xs/src/libslic3r/MultiPoint.cpp')
-rw-r--r-- | xs/src/libslic3r/MultiPoint.cpp | 7 |
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()); |