From 6575bd1ead42ab069290b42e7fec725fffe67587 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 22 Dec 2024 20:51:15 +0800 Subject: [PATCH] SPE-1837: Fixed issue when perimeters weren't generated with Arachne. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cherry-picked from prusa3d/PrusaSlicer@6df4891e6cb98541d23b4c2b83b84a314e23e1ef Co-authored-by: Lukáš Hejl --- .../Arachne/BeadingStrategy/BeadingStrategyFactory.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp index 911cd78bc1..d6cb1331c1 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp @@ -30,7 +30,12 @@ BeadingStrategyPtr BeadingStrategyFactory::makeStrategy(const coord_t preferred_ const int inward_distributed_center_wall_count, const double minimum_variable_line_ratio) { - BeadingStrategyPtr ret = std::make_unique(preferred_bead_width_inner, preferred_transition_length, transitioning_angle, wall_split_middle_threshold, wall_add_middle_threshold, inward_distributed_center_wall_count); + // Handle a special case when there is just one external perimeter. + // Because big differences in bead width for inner and other perimeters cause issues with current beading strategies. + const coord_t optimal_width = max_bead_count <= 2 ? preferred_bead_width_outer : preferred_bead_width_inner; + BeadingStrategyPtr ret = std::make_unique(optimal_width, preferred_transition_length, transitioning_angle, + wall_split_middle_threshold, wall_add_middle_threshold, + inward_distributed_center_wall_count); BOOST_LOG_TRIVIAL(trace) << "Applying the Redistribute meta-strategy with outer-wall width = " << preferred_bead_width_outer << ", inner-wall width = " << preferred_bead_width_inner << "."; ret = std::make_unique(preferred_bead_width_outer, minimum_variable_line_ratio, std::move(ret));