From 6d5d0f82b82284d33342820fdcfecec634dc85f3 Mon Sep 17 00:00:00 2001 From: supermerill Date: Thu, 18 Jun 2020 03:54:55 +0200 Subject: [PATCH] Fix bug where perimeters could be printed last because they start by a thin walls. Now all thin walls are printed after their perimeters. --- src/libslic3r/PerimeterGenerator.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 5f60cfa8c..32ef6f55d 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -954,11 +954,18 @@ ExtrusionEntityCollection PerimeterGenerator::_traverse_loops( //little check: if you have external holes with only one extrusion and internal things, please draw the internal first, just in case it can help print the hole better. std::vector> better_chain; for (const std::pair& idx : chain) { - if (idx.first >= loops.size() || !loops[idx.first].is_external() || (!loops[idx.first].is_contour && !loops[idx.first].children.empty())) - better_chain.push_back(idx); + if(idx.first < loops.size()) + if (!loops[idx.first].is_external() || (!loops[idx.first].is_contour && !loops[idx.first].children.empty())) + better_chain.push_back(idx); } for (const std::pair& idx : chain) { - if (idx.first < loops.size() && loops[idx.first].is_external() && !(!loops[idx.first].is_contour && !loops[idx.first].children.empty())) + if (idx.first < loops.size()) + if (idx.first < loops.size() && loops[idx.first].is_external() && !(!loops[idx.first].is_contour && !loops[idx.first].children.empty())) + better_chain.push_back(idx); + } + //thin walls always last! + for (const std::pair& idx : chain) { + if (idx.first >= loops.size()) better_chain.push_back(idx); }