diff options
author | Lukáš Hejl <hejl.lukas@gmail.com> | 2022-07-27 21:17:57 +0300 |
---|---|---|
committer | Lukáš Hejl <hejl.lukas@gmail.com> | 2022-07-28 12:42:57 +0300 |
commit | 394494b3acb9bd888b88b4257f977c4844ea76e9 (patch) | |
tree | 210b84ae1664cb3bde909445a6e42f87326679a4 | |
parent | 9168b604636d62ea7ad70eff84963df2a9dca93f (diff) |
Fix of #8530: Pressure equalizer unintentionally decelerates before ironing.
This is the follow-up to: 39404be75a723bde17add6acab7beba237821ebc
-rw-r--r-- | src/libslic3r/GCode/PressureEqualizer.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/libslic3r/GCode/PressureEqualizer.cpp b/src/libslic3r/GCode/PressureEqualizer.cpp index 03aa9d9df..943395c68 100644 --- a/src/libslic3r/GCode/PressureEqualizer.cpp +++ b/src/libslic3r/GCode/PressureEqualizer.cpp @@ -520,6 +520,11 @@ 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) { + line_idx = idx_prev; + continue; + } // Volumetric extrusion rate at the start of the succeding segment. float rate_succ = m_gcode_lines[line_idx].volumetric_extrusion_rate_start; // What is the gradient of the extrusion rate between idx_prev and idx? @@ -559,7 +564,9 @@ 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] = line.volumetric_extrusion_rate_start; + // Don't store feed rate for ironing. + if (line.extrusion_role != erIroning) + feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_start; } } @@ -572,6 +579,11 @@ 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) { + line_idx = idx_next; + continue; + } float rate_prec = m_gcode_lines[line_idx].volumetric_extrusion_rate_end; // What is the gradient of the extrusion rate between idx_prev and idx? line_idx = idx_next; @@ -608,7 +620,9 @@ 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] = line.volumetric_extrusion_rate_end; + // Don't store feed rate for ironing. + if (line.extrusion_role != erIroning) + feedrate_per_extrusion_role[iRole] = line.volumetric_extrusion_rate_end; } } } |