fix broken travel (update of last pos on wipe)

supermerill/SuperSlicer#2112
This commit is contained in:
supermerill 2021-12-28 23:49:06 +01:00
parent 5ac295a83f
commit d2c6929192

View File

@ -4286,13 +4286,18 @@ Polyline GCode::travel_to(std::string &gcode, const Point &point, ExtrusionRole
Point last_post_before_retract = this->last_pos();
gcode += this->retract();
// When "Wipe while retracting" is enabled, then extruder moves to another position, and travel from this position can cross perimeters.
bool updated_first_pos = false;
if (last_post_before_retract != this->last_pos() && can_avoid_cross_peri) {
// Is the distance is short enough to just shortcut it?
if (last_post_before_retract.distance_to(this->last_pos()) > scale_d(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0.4)) * 2) {
// Because of it, it is necessary to redo the thing
travel = m_avoid_crossing_perimeters.travel_to(*this, point);
updated_first_pos = true;
}
}
if (!updated_first_pos) {
travel.points.front() = this->last_pos();
}
} else {
// Reset the wipe path when traveling, so one would not wipe along an old path.
m_wipe.reset_path();