Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukáš Hejl <hejl.lukas@gmail.com>2022-07-27 21:17:57 +0300
committerLukáš Hejl <hejl.lukas@gmail.com>2022-07-28 12:42:57 +0300
commit394494b3acb9bd888b88b4257f977c4844ea76e9 (patch)
tree210b84ae1664cb3bde909445a6e42f87326679a4
parent9168b604636d62ea7ad70eff84963df2a9dca93f (diff)
Fix of #8530: Pressure equalizer unintentionally decelerates before ironing.
This is the follow-up to: 39404be75a723bde17add6acab7beba237821ebc
-rw-r--r--src/libslic3r/GCode/PressureEqualizer.cpp18
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;
}
}
}