diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index a2d4516022..f5c27e949c 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -762,8 +762,13 @@ static std::vector get_path_of_change_filament(const Print& print) if (is_ramming) gcodegen.m_wipe.reset_path(); // We don't want wiping on the ramming lines. toolchange_gcode_str = gcodegen.set_extruder(new_extruder_id, tcr.print_z); // TODO: toolchange_z vs print_z - if (gcodegen.config().enable_prime_tower) - deretraction_str = gcodegen.unretract(); + if (gcodegen.config().enable_prime_tower) { + deretraction_str += gcodegen.writer().travel_to_z(z, "restore layer Z"); + Vec3d position{gcodegen.writer().get_position()}; + position.z() = z; + gcodegen.writer().set_position(position); + deretraction_str += gcodegen.unretract(); + } } // Insert the toolchange and deretraction gcode into the generated gcode. diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index df68f549fd..ccdd460fe0 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -82,7 +82,7 @@ public: std::string lift(LiftType lift_type = LiftType::NormalLift, bool spiral_vase = false); std::string unlift(); Vec3d get_position() const { return m_pos; } - void set_position(const Vec3d& in) { m_pos = in; } + void set_position(const Vec3d& in) { m_pos = in; } double get_zhop() const { return m_lifted; } //BBS: set offset for gcode writer