From ee237cfc16e8d82f3b184465515ab64d11c8345b Mon Sep 17 00:00:00 2001 From: Wang YB <94800665+Gradbb@users.noreply.github.com> Date: Tue, 14 May 2024 11:17:56 +0800 Subject: [PATCH] fix surface detection --- src/libslic3r/PrintObject.cpp | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 31777ee..69dc0d3 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -2364,11 +2364,17 @@ void PrintObject::bridge_over_infill() Polygons lightning_area; Polygons expansion_area; Polygons total_fill_area; + //w35 + Polygons top_area; for (const LayerRegion *region : layer->regions()) { Polygons internal_polys = to_polygons(region->fill_surfaces().filter_by_types({stInternal, stInternalSolid})); expansion_area.insert(expansion_area.end(), internal_polys.begin(), internal_polys.end()); Polygons fill_polys = to_polygons(region->fill_expolygons()); total_fill_area.insert(total_fill_area.end(), fill_polys.begin(), fill_polys.end()); + //w35 + Polygons top_polys = to_polygons(region->fill_surfaces().filter_by_type(stTop)); + top_area.insert(top_area.end(), top_polys.begin(), top_polys.end()); + if (region->region().config().fill_pattern == ipLightning) { Polygons l = to_polygons(region->fill_surfaces().filter_by_type(stInternal)); lightning_area.insert(lightning_area.end(), l.begin(), l.end()); @@ -2447,12 +2453,21 @@ void PrintObject::bridge_over_infill() bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle); } } - - bridging_area = opening(bridging_area, flow.scaled_spacing()); - bridging_area = closing(bridging_area, flow.scaled_spacing()); - bridging_area = intersection(bridging_area, limiting_area); - bridging_area = intersection(bridging_area, total_fill_area); - expansion_area = diff(expansion_area, bridging_area); + //w35 + bridging_area = opening(bridging_area, flow.scaled_spacing()); + bridging_area = closing(bridging_area, flow.scaled_spacing()); + bridging_area = intersection(bridging_area, limiting_area); + bridging_area = intersection(bridging_area, total_fill_area); + bridging_area = diff(bridging_area, top_area); + bridging_area = opening(bridging_area, flow.scaled_spacing()); + bridging_area = closing(bridging_area, flow.scaled_spacing()); + expansion_area = diff(expansion_area, bridging_area); + + //bridging_area = opening(bridging_area, flow.scaled_spacing()); + //bridging_area = closing(bridging_area, flow.scaled_spacing()); + //bridging_area = intersection(bridging_area, limiting_area); + //bridging_area = intersection(bridging_area, total_fill_area); + //expansion_area = diff(expansion_area, bridging_area); #ifdef DEBUG_BRIDGE_OVER_INFILL debug_draw(std::to_string(lidx) + "_" + std::to_string(cluster_idx) + "_" + std::to_string(job_idx) + "_" + "_expanded_bridging" + std::to_string(r),