diff --git a/src/libslic3r/GCode/PressureEqualizer.cpp b/src/libslic3r/GCode/PressureEqualizer.cpp index 943395c68b..b173cb684f 100644 --- a/src/libslic3r/GCode/PressureEqualizer.cpp +++ b/src/libslic3r/GCode/PressureEqualizer.cpp @@ -59,9 +59,8 @@ PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_ extrusion_rate_slope.positive = m_max_volumetric_extrusion_rate_slope_positive; } - // Don't regulate the pressure in infill, gap fill and ironing. - // TODO: Do we want to regulate pressure in erWipeTower, erCustom and erMixed? - for (const ExtrusionRole er : {erBridgeInfill, erGapFill, erIroning}) { + // Don't regulate the pressure before and after gap-fill and ironing. + for (const ExtrusionRole er : {erGapFill, erIroning}) { m_max_volumetric_extrusion_rate_slopes[er].negative = 0; m_max_volumetric_extrusion_rate_slopes[er].positive = 0; } @@ -520,8 +519,8 @@ void PressureEqualizer::adjust_volumetric_rate() for (; !m_gcode_lines[idx_prev].extruding() && idx_prev != fist_line_idx; --idx_prev); if (!m_gcode_lines[idx_prev].extruding()) break; - // Don't decelerate before ironing. - if (m_gcode_lines[line_idx].extrusion_role == erIroning) { + // Don't decelerate before ironing and gap-fill. + if (m_gcode_lines[line_idx].extrusion_role == erIroning || m_gcode_lines[line_idx].extrusion_role == erGapFill) { line_idx = idx_prev; continue; } @@ -564,8 +563,8 @@ void PressureEqualizer::adjust_volumetric_rate() } } // feedrate_per_extrusion_role[iRole] = (iRole == line.extrusion_role) ? line.volumetric_extrusion_rate_start : rate_start; - // Don't store feed rate for ironing. - if (line.extrusion_role != erIroning) + // Don't store feed rate for ironing and gap-fill. + if (line.extrusion_role != erIroning && line.extrusion_role != erGapFill) feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_start; } } @@ -579,8 +578,8 @@ void PressureEqualizer::adjust_volumetric_rate() for (; !m_gcode_lines[idx_next].extruding() && idx_next != last_line_idx; ++idx_next); if (!m_gcode_lines[idx_next].extruding()) break; - // Don't accelerate after ironing. - if (m_gcode_lines[line_idx].extrusion_role == erIroning) { + // Don't accelerate after ironing and gap-fill. + if (m_gcode_lines[line_idx].extrusion_role == erIroning || m_gcode_lines[line_idx].extrusion_role == erGapFill) { line_idx = idx_next; continue; } @@ -620,8 +619,8 @@ void PressureEqualizer::adjust_volumetric_rate() } } // feedrate_per_extrusion_role[iRole] = (iRole == line.extrusion_role) ? line.volumetric_extrusion_rate_end : rate_end; - // Don't store feed rate for ironing. - if (line.extrusion_role != erIroning) + // Don't store feed rate for ironing and gap-fill. + if (line.extrusion_role != erIroning && line.extrusion_role != erGapFill) feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_end; } }