diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 7908f64f0..40c3698d2 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -2535,7 +2535,7 @@ void WipeTower::plan_toolchange(float z_par, float layer_height_par, unsigned in if (!m_filament_map.empty() && m_filament_map[old_tool] != m_filament_map[new_tool]) { double e_flow = nozzle_change_extrusion_flow(layer_height_par); double length = m_filaments_change_length[old_tool] / e_flow; - int nozzle_change_line_count = length / (m_wipe_tower_width - 2*m_nozzle_change_perimeter_width) + 1; + int nozzle_change_line_count = std::ceil(length / (m_wipe_tower_width - 2*m_nozzle_change_perimeter_width)); if (m_need_reverse_travel) nozzle_change_depth = m_tpu_fixed_spacing * nozzle_change_line_count * m_nozzle_change_perimeter_width; else @@ -2925,6 +2925,7 @@ WipeTower::NozzleChangeResult WipeTower::nozzle_change_new(int old_filament_id, break; } } + if (nozzle_change_line_count <= 0) return m_nozzle_change_result; auto format_nozzle_change_line = [](bool start, int old_filament_id, int new_filament_id) -> std::string { char buff[64]; std::string tag = start ? GCodeProcessor::reserved_tag(GCodeProcessor::ETags::NozzleChangeStart) : GCodeProcessor::reserved_tag(GCodeProcessor::ETags::NozzleChangeEnd); @@ -3752,7 +3753,7 @@ void WipeTower::plan_tower_new() if (!m_filament_map.empty() && m_filament_map[toolchange.old_tool] != m_filament_map[toolchange.new_tool]) { double e_flow = nozzle_change_extrusion_flow(m_plan[idx].height); double length = m_filaments_change_length[toolchange.old_tool] / e_flow; - int nozzle_change_line_count = length / (m_wipe_tower_width - 2*m_nozzle_change_perimeter_width) + 1; + int nozzle_change_line_count = std::ceil(length / (m_wipe_tower_width - 2*m_nozzle_change_perimeter_width)); if (m_need_reverse_travel) nozzle_change_depth = m_tpu_fixed_spacing * nozzle_change_line_count * m_nozzle_change_perimeter_width; else