From b1145df566cfbd3b981fe5e9eea83b909928e29d Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Mon, 17 Feb 2020 15:41:35 +0100 Subject: [PATCH] Fixed incorrect filtering of extrusions during gcode generation The behaviour resulted in duplicate extrusions in some cases Fix of #3665 --- src/libslic3r/ExtrusionEntityCollection.cpp | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/libslic3r/ExtrusionEntityCollection.cpp b/src/libslic3r/ExtrusionEntityCollection.cpp index 147a60d95a..391ac2d587 100644 --- a/src/libslic3r/ExtrusionEntityCollection.cpp +++ b/src/libslic3r/ExtrusionEntityCollection.cpp @@ -11,18 +11,10 @@ void filter_by_extrusion_role_in_place(ExtrusionEntitiesPtr &extrusion_entities, if (role != erMixed) { auto first = extrusion_entities.begin(); auto last = extrusion_entities.end(); - auto result = first; - while (first != last) { - // The caller wants only paths with a specific extrusion role. - auto role2 = (*first)->role(); - if (role != role2) { - // This extrusion entity does not match the role asked. - assert(role2 != erMixed); - *result = *first; - ++ result; - } - ++ first; - } + extrusion_entities.erase( + std::remove_if(first, last, [&role](const ExtrusionEntity* ee) { + return ee->role() != role; }), + last); } }