From 6bc580930eb3bd0af54afd88ef880c1f3bb74680 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Thu, 3 Nov 2022 15:29:07 +0800 Subject: [PATCH] FIX: fix the error path when it is bridge & top if the region is top surface as well as bridge use bridge path Signed-off-by: qing.zhang Change-Id: Ia23910e4c49daeacf12d2f40d21a7ca319ddcfb7 --- src/libslic3r/PerimeterGenerator.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index d5dfd1e18..f6f064bd5 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -576,7 +576,17 @@ void PerimeterGenerator::process() //set the clip to a virtual "second perimeter" fill_clip = offset_ex(last, -double(ext_perimeter_spacing)); // get the real top surface - ExPolygons top_polygons = diff_ex(last, grown_upper_slices, ApplySafetyOffset::Yes); + ExPolygons grown_lower_slices; + ExPolygons bridge_checker; + // BBS: check whether surface be bridge or not + if (this->lower_slices != NULL) { + grown_lower_slices =*this->lower_slices; + double bridge_offset = std::max(double(ext_perimeter_spacing), (double(perimeter_width))); + bridge_checker = offset_ex(diff_ex(last, grown_lower_slices, ApplySafetyOffset::Yes), 1.5 * bridge_offset); + } + ExPolygons delete_bridge = diff_ex(last, bridge_checker, ApplySafetyOffset::Yes); + + ExPolygons top_polygons = diff_ex(delete_bridge, grown_upper_slices, ApplySafetyOffset::Yes); //get the not-top surface, from the "real top" but enlarged by external_infill_margin (and the min_width_top_surface we removed a bit before) ExPolygons inner_polygons = diff_ex(last,