From e84f400fad090b130b9a6107317ad4ee2c503683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0ach?= Date: Mon, 24 Feb 2025 15:50:39 +0100 Subject: [PATCH] SPE-2701: Disable scarf seam on thick bridges (#14190) --- src/libslic3r/GCode/SeamPlacer.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp index ab89399901..b3a16c8500 100644 --- a/src/libslic3r/GCode/SeamPlacer.cpp +++ b/src/libslic3r/GCode/SeamPlacer.cpp @@ -271,7 +271,8 @@ boost::variant finalize_seam_position( SeamChoice seam_choice, const Perimeters::Perimeter &perimeter, const bool staggered_inner_seams, - const bool flipped + const bool flipped, + const bool thick_bridges ) { using Perimeters::offset_along_perimeter; using Perimeters::PointOnPerimeter; @@ -351,6 +352,15 @@ boost::variant finalize_seam_position( place_scarf_seam = false; } + const bool is_overhang{ + perimeter.point_classifications[seam_choice.previous_index] == Perimeters::PointClassification::overhang + || perimeter.point_classifications[seam_choice.next_index] == Perimeters::PointClassification::overhang + }; + + if (thick_bridges && is_overhang) { + place_scarf_seam = false; + } + if (place_scarf_seam) { Scarf::Scarf scarf{}; scarf.entire_loop = region->config().scarf_seam_entire_loop; @@ -532,6 +542,8 @@ boost::variant Placer::place_seam( assert(layer->id() >= po->slicing_parameters().raft_layers()); const size_t layer_index = layer->id() - po->slicing_parameters().raft_layers(); + const bool thick_bridges{po->config().thick_bridges.value}; + if (po->config().seam_position.value == spNearest) { const std::vector &perimeters{ this->perimeters_per_layer.at(po)[layer_index]}; @@ -539,7 +551,7 @@ boost::variant Placer::place_seam( place_seam_near(perimeters, loop, last_pos, this->params.max_nearest_detour); return finalize_seam_position( loop, region, seam_choice, perimeters[perimeter_index].perimeter, - this->params.staggered_inner_seams, flipped + this->params.staggered_inner_seams, flipped, thick_bridges ); } else { const std::vector &seams_on_perimeters{this->seams_per_object.at(po)[layer_index]}; @@ -557,7 +569,7 @@ boost::variant Placer::place_seam( seams_on_perimeters[0]}; return finalize_seam_position( loop, region, seam_perimeter_choice.choice, seam_perimeter_choice.perimeter, - this->params.staggered_inner_seams, flipped + this->params.staggered_inner_seams, flipped, thick_bridges ); } } @@ -566,7 +578,7 @@ boost::variant Placer::place_seam( choose_closest_seam(seams_on_perimeters, Geometry::to_polygon(loop))}; return finalize_seam_position( loop, region, seam_perimeter_choice.choice, seam_perimeter_choice.perimeter, - this->params.staggered_inner_seams, flipped + this->params.staggered_inner_seams, flipped, thick_bridges ); } }