From 40eaf144f06d0804b839963be093594feec91a9c Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 25 Jan 2017 18:23:57 +0100 Subject: [PATCH] new function remove_degenerate(Polylines ...) --- xs/src/libslic3r/Polyline.cpp | 17 +++++++++++++++++ xs/src/libslic3r/Polyline.hpp | 2 ++ 2 files changed, 19 insertions(+) diff --git a/xs/src/libslic3r/Polyline.cpp b/xs/src/libslic3r/Polyline.cpp index 08717b57cf..672777ce12 100644 --- a/xs/src/libslic3r/Polyline.cpp +++ b/xs/src/libslic3r/Polyline.cpp @@ -237,6 +237,23 @@ BoundingBox get_extents(const Polylines &polylines) return bb; } +bool remove_degenerate(Polylines &polylines) +{ + bool modified = false; + size_t j = 0; + for (size_t i = 0; i < polylines.size(); ++ i) { + if (polylines[i].points.size() >= 2) { + if (j < i) + std::swap(polylines[i].points, polylines[j].points); + ++ j; + } else + modified = true; + } + if (j < polylines.size()) + polylines.erase(polylines.begin() + j, polylines.end()); + return modified; +} + ThickLines ThickPolyline::thicklines() const { diff --git a/xs/src/libslic3r/Polyline.hpp b/xs/src/libslic3r/Polyline.hpp index 3aee85fa18..d304ba19a1 100644 --- a/xs/src/libslic3r/Polyline.hpp +++ b/xs/src/libslic3r/Polyline.hpp @@ -111,6 +111,8 @@ inline void polylines_append(Polylines &dst, Polylines &&src) } } +bool remove_degenerate(Polylines &polylines); + class ThickPolyline : public Polyline { public: std::vector width;