From b07d2461d38c7112c56332724b9ceb87e456211d Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 23 Jan 2019 10:08:16 +0100 Subject: [PATCH] Make extrusion_entities_append_paths appends loop if first_point() == last_point() --- src/libslic3r/ExtrusionEntity.hpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index dc8ca0d0c..7c9495207 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -287,9 +287,15 @@ inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, Polylines dst.reserve(dst.size() + polylines.size()); for (Polyline &polyline : polylines) if (polyline.is_valid()) { - ExtrusionPath *extrusion_path = new ExtrusionPath(role, mm3_per_mm, width, height); - dst.push_back(extrusion_path); - extrusion_path->polyline = polyline; + if (polyline.points.back() == polyline.points.front()) { + ExtrusionPath path(role, mm3_per_mm, width, height); + path.polyline.points = polyline.points; + dst.emplace_back(new ExtrusionLoop(std::move(path))); + } else { + ExtrusionPath *extrusion_path = new ExtrusionPath(role, mm3_per_mm, width, height); + dst.push_back(extrusion_path); + extrusion_path->polyline = polyline; + } } } @@ -298,9 +304,15 @@ inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, Polylines dst.reserve(dst.size() + polylines.size()); for (Polyline &polyline : polylines) if (polyline.is_valid()) { - ExtrusionPath *extrusion_path = new ExtrusionPath(role, mm3_per_mm, width, height); - dst.push_back(extrusion_path); - extrusion_path->polyline = std::move(polyline); + if (polyline.points.back() == polyline.points.front()) { + ExtrusionPath path(role, mm3_per_mm, width, height); + path.polyline.points = polyline.points; + dst.emplace_back(new ExtrusionLoop(std::move(path))); + } else { + ExtrusionPath *extrusion_path = new ExtrusionPath(role, mm3_per_mm, width, height); + dst.push_back(extrusion_path); + extrusion_path->polyline = std::move(polyline); + } } polylines.clear(); }