From 47bba48b3435e666205e4df136936467988ce2f2 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Tue, 26 Nov 2024 10:03:18 +0100 Subject: [PATCH] SPE-2577 - Fixed processing of gcodes when using absolute values for E (#13623) --- src/libslic3r/GCode/GCodeProcessor.cpp | 9 +++++---- src/libslic3r/GCode/GCodeProcessor.hpp | 4 ---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 8bfe0ff3b8..92059d9f03 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -2844,12 +2844,13 @@ void GCodeProcessor::process_G1(const std::array, 4>& axes && m_extrusion_role != GCodeExtrusionRole::OverhangPerimeter ) )) { - const Vec3f curr_pos(m_end_position[X], m_end_position[Y], m_end_position[Z]); + const AxisCoords curr_pos = m_end_position; const Vec3f new_pos = m_result.moves.back().position - m_extruder_offsets[m_extruder_id]; - - m_end_position = create_axis_coords(new_pos + m_z_offset * Vec3f::UnitZ()); + for (unsigned char a = X; a < E; ++a) { + m_end_position[a] = double(new_pos[a]); + } store_move_vertex(EMoveType::Seam); - m_end_position = create_axis_coords(curr_pos); + m_end_position = curr_pos; m_seams_detector.activate(false); } else if (type == EMoveType::Extrude && m_extrusion_role == GCodeExtrusionRole::ExternalPerimeter) { diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 79d4a9094e..b218c95dc0 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -779,10 +779,6 @@ namespace Slic3r { double extract_absolute_position_on_axis(Axis axis, const GCodeReader::GCodeLine& line, double area_filament_cross_section); - AxisCoords create_axis_coords(const Vec3f &vec) { - return AxisCoords{vec[0], vec[1], vec[2], 0}; - } - }; } /* namespace Slic3r */