Follow-up to 394494b3ac: Fixed deceleration/acceleration issue also for gap-fill. Also, deceleration before bridge infill is now working.

This commit is contained in:
Lukáš Hejl 2022-08-04 13:37:40 +02:00
parent 3cad3f6b89
commit 7dac30714b

View file

@ -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;
}
}