From e35766bb89e3eaf21da4cc01faf7613a02bc9d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Thu, 2 Jan 2025 22:31:20 +0100 Subject: [PATCH] SPE-2496: Fix calculation of perimeter spacing in the multi-material segmentation when the perimeter extrusion width is set to zero. --- src/libslic3r/MultiMaterialSegmentation.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index cfbe9f1262..cb9c2da30b 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -864,14 +864,15 @@ static inline std::vector> segmentation_top_and_bottom_l // color_idx == 0 means "don't know" extruder aka the underlying extruder. // As this region may split existing regions, we collect statistics over all regions for color_idx == 0. color_idx == 0 || config.perimeter_extruder == int(color_idx)) { - out.extrusion_width = std::max(out.extrusion_width, float(config.perimeter_extrusion_width)); + const Flow perimeter_flow = region->flow(FlowRole::frPerimeter); + out.extrusion_width = std::max(out.extrusion_width, perimeter_flow.width()); out.top_solid_layers = std::max(out.top_solid_layers, config.top_solid_layers); out.bottom_solid_layers = std::max(out.bottom_solid_layers, config.bottom_solid_layers); out.small_region_threshold = config.gap_fill_enabled.value && config.gap_fill_speed.value > 0 ? // Gap fill enabled. Enable a single line of 1/2 extrusion width. - 0.5f * float(config.perimeter_extrusion_width) : + 0.5f * perimeter_flow.width() : // Gap fill disabled. Enable two lines slightly overlapping. - float(config.perimeter_extrusion_width) + 0.7f * Flow::rounded_rectangle_extrusion_spacing(float(config.perimeter_extrusion_width), float(layer.height)); + perimeter_flow.width() + 0.7f * perimeter_flow.spacing(); out.small_region_threshold = scaled(out.small_region_threshold * 0.5f); ++ out.num_regions; }