Follow-up to 394494b3acb9bd888b88b4257f977c4844ea76e9: 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; extrusion_rate_slope.positive = m_max_volumetric_extrusion_rate_slope_positive;
} }
// Don't regulate the pressure in infill, gap fill and ironing. // Don't regulate the pressure before and after gap-fill and ironing.
// TODO: Do we want to regulate pressure in erWipeTower, erCustom and erMixed? for (const ExtrusionRole er : {erGapFill, erIroning}) {
for (const ExtrusionRole er : {erBridgeInfill, erGapFill, erIroning}) {
m_max_volumetric_extrusion_rate_slopes[er].negative = 0; m_max_volumetric_extrusion_rate_slopes[er].negative = 0;
m_max_volumetric_extrusion_rate_slopes[er].positive = 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); for (; !m_gcode_lines[idx_prev].extruding() && idx_prev != fist_line_idx; --idx_prev);
if (!m_gcode_lines[idx_prev].extruding()) if (!m_gcode_lines[idx_prev].extruding())
break; break;
// Don't decelerate before ironing. // Don't decelerate before ironing and gap-fill.
if (m_gcode_lines[line_idx].extrusion_role == erIroning) { if (m_gcode_lines[line_idx].extrusion_role == erIroning || m_gcode_lines[line_idx].extrusion_role == erGapFill) {
line_idx = idx_prev; line_idx = idx_prev;
continue; 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; // feedrate_per_extrusion_role[iRole] = (iRole == line.extrusion_role) ? line.volumetric_extrusion_rate_start : rate_start;
// Don't store feed rate for ironing. // Don't store feed rate for ironing and gap-fill.
if (line.extrusion_role != erIroning) if (line.extrusion_role != erIroning && line.extrusion_role != erGapFill)
feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_start; 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); for (; !m_gcode_lines[idx_next].extruding() && idx_next != last_line_idx; ++idx_next);
if (!m_gcode_lines[idx_next].extruding()) if (!m_gcode_lines[idx_next].extruding())
break; break;
// Don't accelerate after ironing. // Don't accelerate after ironing and gap-fill.
if (m_gcode_lines[line_idx].extrusion_role == erIroning) { if (m_gcode_lines[line_idx].extrusion_role == erIroning || m_gcode_lines[line_idx].extrusion_role == erGapFill) {
line_idx = idx_next; line_idx = idx_next;
continue; 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; // feedrate_per_extrusion_role[iRole] = (iRole == line.extrusion_role) ? line.volumetric_extrusion_rate_end : rate_end;
// Don't store feed rate for ironing. // Don't store feed rate for ironing and gap-fill.
if (line.extrusion_role != erIroning) if (line.extrusion_role != erIroning && line.extrusion_role != erGapFill)
feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_end; feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_end;
} }
} }