From f900d80e93a62f3ad72f07e3ac0e9540627c89bb Mon Sep 17 00:00:00 2001 From: supermerill Date: Mon, 11 Oct 2021 17:53:31 +0200 Subject: [PATCH] fix the Fix for no_perimeter_unsupported_algo (a4caa5) assign instead of insert... supermerill/SuperSlicer#1621 --- src/libslic3r/PrintConfig.cpp | 5 ++++- src/libslic3r/PrintObject.cpp | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 3e5f52572..a4cc2f4d3 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3849,7 +3849,10 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionBool(false)); def = this->add("solid_over_perimeters", coInt); - def->label = L("Max perimeters layer for solid infill"); + def->label = L("No solid infill over"); + def->full_label = L("No solid infill over perimeters"); + def->sidetext = L("perimeters"); + def->sidetext_width = 20; def->category = OptionCategory::perimeter; def->tooltip = L("When you have a medium/hight number of top/bottom solid layers, and a low/medium of perimeters," " then it have to put some solid infill inside the part to have enough solid layers." diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index c9d48093f..126db9a2c 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1672,7 +1672,7 @@ namespace Slic3r { size_t grain_size = std::max(num_layers / 16, size_t(1)); //solid_over_perimeters value, to remove solid fill where there's only perimeters on multiple layers - int nb_perimeter_layers_for_solid_fill = region.config().solid_over_perimeters.value; + const int nb_perimeter_layers_for_solid_fill = region.config().solid_over_perimeters.value; if (!top_bottom_surfaces_all_regions) { // This is either a single material print, or a multi-material print and interface_shells are enabled, meaning that the vertical shell thickness @@ -1899,8 +1899,9 @@ namespace Slic3r { //check if a polygon is only over perimeter, in this case evict it (depends from nb_perimeter_layers_for_solid_fill value) if (nb_perimeter_layers_for_solid_fill != 0) { for (int i = 0; i < shell.size(); i++) { - if (nb_perimeter_layers_for_solid_fill < 2 || intersection({ shell[i] }, max_perimeter_shell, false).empty()) { - toadd = intersection_ex({ shell[i] }, fill_shell); + if (nb_perimeter_layers_for_solid_fill < 2 || intersection_ex({ shell[i] }, max_perimeter_shell, false).empty()) { + ExPolygons expoly = intersection_ex({ shell[i] }, fill_shell); + toadd.insert(toadd.end(), expoly.begin(), expoly.end()); shell.erase(shell.begin() + i); i--; }