From 3d6b503e1572b9353a76e5f2581cd8261d250ef3 Mon Sep 17 00:00:00 2001 From: supermerill Date: Tue, 2 Jun 2020 15:17:01 +0200 Subject: [PATCH] fix regression from the #242 fix (print ext peri hole after other int peri) --- src/libslic3r/PerimeterGenerator.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index f5d932f94..41c0943f5 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -917,7 +917,7 @@ ExtrusionEntityCollection PerimeterGenerator::_traverse_loops( path.height = (float) this->layer->height; paths.push_back(path); } - + coll.append(ExtrusionLoop(paths, loop_role)); } @@ -933,19 +933,20 @@ ExtrusionEntityCollection PerimeterGenerator::_traverse_loops( //result is [idx, needReverse] ? std::vector> chain = chain_extrusion_entities(coll.entities, &zero_point); ExtrusionEntityCollection coll_out; + if (chain.empty()) return coll_out; //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 (!loops[idx.first].is_external() || (!loops[idx.first].is_contour && !loops[idx.first].children.empty())) + 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); } for (const std::pair& idx : chain) { - if (loops[idx.first].is_external() && !(!loops[idx.first].is_contour && !loops[idx.first].children.empty())) + 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); } - //move from coll to coll_out and gettign children of each in the same time. (deep first) + //move from coll to coll_out and getting children of each in the same time. (deep first) for (const std::pair &idx : better_chain) { if (idx.first >= loops.size()) {