From a1b8ae1cb9dc31a4847251283c0043d476ea8076 Mon Sep 17 00:00:00 2001 From: Simon Kueppers Date: Tue, 23 Jan 2024 19:51:57 +0100 Subject: [PATCH] Implemented Outer/Outer/inner wall sequence for classic slicer as Outer/Inner mode, but first and second external perimeters are swapped. This improves overhang performance at the cost of a slight decrease in print quality --- src/libslic3r/PerimeterGenerator.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 02586fbcb2e..ba0c2212d28 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -1738,6 +1738,24 @@ void PerimeterGenerator::process_classic() this->object_config->brim_type == BrimType::btOuterOnly && this->object_config->brim_width.value > 0)) entities.reverse(); + else if (this->config->wall_sequence == WallSequence::OuterOuterInner) + if (entities.entities.size() > 1) { + entities.reverse(); + + int swapped = 0; + int index; + + for (index=0; index < entities.entities.size(); index++) { + if (entities.entities[index]->role() == erExternalPerimeter) { + if (swapped == 0 && (index+1) < entities.entities.size()) { + std::swap(entities.entities[index], entities.entities[index+1]); + swapped = 1; + } + } else { + swapped = 0; + } + } + } // SoftFever: sandwich mode else if (this->config->wall_sequence == WallSequence::InnerOuterInner) if (entities.entities.size() > 1){