diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 5760073d8..4804107cd 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -359,6 +359,7 @@ std::vector group_fills(const Layer &layer) // BBS: detect narrow internal solid infill area and use ipConcentricInternal pattern instead if (layer.object()->config().detect_narrow_internal_solid_infill) { + const coordf_t narrow_threshold = scale_(NARROW_INFILL_AREA_THRESHOLD) * 2; ExPolygons lower_internal_areas; BoundingBox lower_internal_bbox; if (layer.lower_layer) { @@ -381,8 +382,10 @@ std::vector group_fills(const Layer &layer) // BBS: get the index list of narrow expolygon for (size_t j = 0; j < expolygons_size; j++) { auto bbox = get_extents(surface_fills[i].expolygons[j]); - if (is_narrow_expolygon(surface_fills[i].expolygons[j], scale_(NARROW_INFILL_AREA_THRESHOLD) * 2)) { - if (bbox.overlap(lower_internal_bbox) && !intersection_ex(offset_ex(surface_fills[i].expolygons[j],SCALED_EPSILON), lower_internal_areas).empty()) { + auto clipped_internals = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_internal_areas, bbox.inflated(scale_(2))); // expand a little + auto clipped_internal_bbox = get_extents(clipped_internals); + if (is_narrow_expolygon(surface_fills[i].expolygons[j], narrow_threshold)) { + if (!clipped_internals.empty() && bbox.overlap(clipped_internal_bbox) && !intersection_ex(offset_ex(surface_fills[i].expolygons[j],SCALED_EPSILON), clipped_internals).empty()) { narrow_floating_expoly_idx.emplace_back(j); } else { diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 15a2a03f5..e797a3f45 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -651,8 +651,8 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in toggle_line(el, support_is_tree); toggle_line("support_critical_regions_only", is_auto(support_type) && support_is_tree); - for (auto el : { "detect_floating_vertical_shell", "vertical_shell_speed" }) - toggle_line(el, config->option>("ensure_vertical_shell_thickness")->value != EnsureVerticalThicknessLevel::evtDisabled); + toggle_line("detect_floating_vertical_shell", config->option("detect_narrow_internal_solid_infill")->value); + toggle_line("vertical_shell_speed", config->option("detect_narrow_internal_solid_infill")->value, variant_index); // tree support use max_bridge_length instead of bridge_no_support toggle_line("bridge_no_support", !support_is_tree);