FIX: effiency issue in some cases with slope enhance

github:6186

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I534a71475ea9ebe0f6467e27e43cc2e3f9348f48
This commit is contained in:
xun.zhang 2025-03-27 10:59:36 +08:00 committed by Lane.Wei
parent 274a053673
commit b3793dd812
2 changed files with 7 additions and 4 deletions

View File

@ -359,6 +359,7 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
// BBS: detect narrow internal solid infill area and use ipConcentricInternal pattern instead // BBS: detect narrow internal solid infill area and use ipConcentricInternal pattern instead
if (layer.object()->config().detect_narrow_internal_solid_infill) { if (layer.object()->config().detect_narrow_internal_solid_infill) {
const coordf_t narrow_threshold = scale_(NARROW_INFILL_AREA_THRESHOLD) * 2;
ExPolygons lower_internal_areas; ExPolygons lower_internal_areas;
BoundingBox lower_internal_bbox; BoundingBox lower_internal_bbox;
if (layer.lower_layer) { if (layer.lower_layer) {
@ -381,8 +382,10 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
// BBS: get the index list of narrow expolygon // BBS: get the index list of narrow expolygon
for (size_t j = 0; j < expolygons_size; j++) { for (size_t j = 0; j < expolygons_size; j++) {
auto bbox = get_extents(surface_fills[i].expolygons[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)) { auto clipped_internals = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_internal_areas, bbox.inflated(scale_(2))); // expand a little
if (bbox.overlap(lower_internal_bbox) && !intersection_ex(offset_ex(surface_fills[i].expolygons[j],SCALED_EPSILON), lower_internal_areas).empty()) { 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); narrow_floating_expoly_idx.emplace_back(j);
} }
else { else {

View File

@ -651,8 +651,8 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in
toggle_line(el, support_is_tree); toggle_line(el, support_is_tree);
toggle_line("support_critical_regions_only", is_auto(support_type) && 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("detect_floating_vertical_shell", config->option<ConfigOptionBool>("detect_narrow_internal_solid_infill")->value);
toggle_line(el, config->option<ConfigOptionEnum<EnsureVerticalThicknessLevel>>("ensure_vertical_shell_thickness")->value != EnsureVerticalThicknessLevel::evtDisabled); toggle_line("vertical_shell_speed", config->option<ConfigOptionBool>("detect_narrow_internal_solid_infill")->value, variant_index);
// tree support use max_bridge_length instead of bridge_no_support // tree support use max_bridge_length instead of bridge_no_support
toggle_line("bridge_no_support", !support_is_tree); toggle_line("bridge_no_support", !support_is_tree);