From fefedb66c48c3c36da78e8eefbfb392a113f5a9f Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Tue, 6 Oct 2026 03:17:20 +0300 Subject: [PATCH] Fix overlapping internal bridges (#16177) --- src/libslic3r/PrintObject.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 104b2f2bd7..4229ceca73 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -3450,14 +3450,14 @@ void PrintObject::bridge_over_infill() const bool turning_pattern = region_config.sparse_infill_pattern == ipHilbertCurve || region_config.sparse_infill_pattern == ipOctagramSpiral; const Flow &flow = candidate.region->bridging_flow(frSolidInfill, true); - Polygons area_to_be_bridge = expand(candidate.new_polys, flow.scaled_spacing()); - area_to_be_bridge = intersection(area_to_be_bridge, deep_infill_area); - - area_to_be_bridge.erase(std::remove_if(area_to_be_bridge.begin(), area_to_be_bridge.end(), - [internal_unsupported_area](const Polygon &p) { - return intersection({p}, internal_unsupported_area).empty(); + ExPolygons bridge_components = intersection_ex(expand(candidate.new_polys, flow.scaled_spacing()), deep_infill_area); + // Orca: Filter whole bridge areas so their holes remain holes. + bridge_components.erase(std::remove_if(bridge_components.begin(), bridge_components.end(), + [&internal_unsupported_area](const ExPolygon &component) { + return intersection_ex(component, internal_unsupported_area).empty(); }), - area_to_be_bridge.end()); + bridge_components.end()); + Polygons area_to_be_bridge = to_polygons(std::move(bridge_components)); Polygons limiting_area = union_(area_to_be_bridge, expansion_area);