From 4dcfd9718105b470e9f066bbf040d87908265b44 Mon Sep 17 00:00:00 2001 From: SVNMLR <44621949+SVNMLR@users.noreply.github.com> Date: Fri, 17 Nov 2023 01:01:52 +0100 Subject: [PATCH] [Multi Material] Fix first layers of prime tower when using "no sparse layers" (#2764) * MM - Add check for first layer * Change: If no sparse layer is on -> Respect the toolchange in the first-layer checkup, to use a brim and slow down printspeed if using a primetower * Fix comment --- src/libslic3r/GCode/WipeTower2.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 8fc76935900..3c717a063de 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -1092,7 +1092,8 @@ void WipeTower2::toolchange_Wipe( float dy = (is_first_layer() ? 1.f : m_extra_spacing) * m_perimeter_width; // Don't use the extra spacing for the first layer. // All the calculations in all other places take the spacing into account for all the layers. - const float target_speed = is_first_layer() ? m_first_layer_speed * 60.f : std::min(5400.f, m_infill_speed * 60.f); + // If spare layers are excluded->if 1 or less toolchange has been done, it must be sill the first layer, too.So slow down. + const float target_speed = is_first_layer() || (m_num_tool_changes <= 1 && m_no_sparse_layers) ? m_first_layer_speed * 60.f : std::min(5400.f, m_infill_speed * 60.f); float wipe_speed = 0.33f * target_speed; // if there is less than 2.5*m_perimeter_width to the edge, advance straightaway (there is likely a blob anyway) @@ -1160,7 +1161,8 @@ WipeTower::ToolChangeResult WipeTower2::finish_layer() // Slow down on the 1st layer. - bool first_layer = is_first_layer(); + // If spare layers are excluded -> if 1 or less toolchange has been done, it must be still the first layer, too. So slow down. + bool first_layer = is_first_layer() || (m_num_tool_changes <= 1 && m_no_sparse_layers); float feedrate = first_layer ? m_first_layer_speed * 60.f : std::min(5400.f, m_infill_speed * 60.f); float current_depth = m_layer_info->depth - m_layer_info->toolchanges_depth(); WipeTower::box_coordinates fill_box(Vec2f(m_perimeter_width, m_layer_info->depth-(current_depth-m_perimeter_width)),