From d2c6929192ef4dc222f9d9d6422b929cc1bc9813 Mon Sep 17 00:00:00 2001 From: supermerill Date: Tue, 28 Dec 2021 23:49:06 +0100 Subject: fix broken travel (update of last pos on wipe) supermerill/SuperSlicer#2112 --- src/libslic3r/GCode.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 362127cc0..9279d42f3 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3090,7 +3090,7 @@ std::string GCode::extrude_loop_vase(const ExtrusionLoop &original_loop, const s z_per_length * line_length / nb_sections }; coordf_t current_height_internal = current_height + height_increment / 2; //ensure you go to the good xyz - if( (last_point - previous).norm() > EPSILON) + if ((last_point - previous).norm() > EPSILON) gcode += m_writer.extrude_to_xyz(last_point, 0, description); //extrusions for (int i = 0; i < nb_sections - 1; i++) { @@ -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(); -- cgit v1.2.3