diff --git a/xs/src/libslic3r/Polyline.cpp b/xs/src/libslic3r/Polyline.cpp index 08717b57c..672777ce1 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 3aee85fa1..d304ba19a 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;