diff options
author | bubnikv <bubnikv@gmail.com> | 2018-04-04 12:04:31 +0300 |
---|---|---|
committer | bubnikv <bubnikv@gmail.com> | 2018-04-04 12:04:31 +0300 |
commit | 40bbabb6d000be1abc1ded70d2604d6c0890baaf (patch) | |
tree | d78807812fb3ba6ac1347dc5528c44410ff720be /xs/src/libslic3r/GCode | |
parent | 76360d698cbdc8b63adcd741b56385344ac5b546 (diff) | |
parent | bf295b903968d75845bc9898fa880e2b91e4121d (diff) |
Merge remote-tracking branch 'origin/time_estimate'
Diffstat (limited to 'xs/src/libslic3r/GCode')
-rw-r--r-- | xs/src/libslic3r/GCode/Analyzer.cpp | 38 | ||||
-rw-r--r-- | xs/src/libslic3r/GCode/Analyzer.hpp | 12 |
2 files changed, 27 insertions, 23 deletions
diff --git a/xs/src/libslic3r/GCode/Analyzer.cpp b/xs/src/libslic3r/GCode/Analyzer.cpp index e20f6589f..799bd6661 100644 --- a/xs/src/libslic3r/GCode/Analyzer.cpp +++ b/xs/src/libslic3r/GCode/Analyzer.cpp @@ -97,8 +97,8 @@ GCodeAnalyzer::GCodeAnalyzer() void GCodeAnalyzer::reset() { _set_units(Millimeters); - _set_positioning_xyz_type(Absolute); - _set_positioning_e_type(Relative); + _set_global_positioning_type(Absolute); + _set_e_local_positioning_type(Absolute); _set_extrusion_role(erNone); _set_extruder_id(DEFAULT_EXTRUDER_ID); _set_mm3_per_mm(Default_mm3_per_mm); @@ -247,13 +247,13 @@ void GCodeAnalyzer::_process_gcode_line(GCodeReader&, const GCodeReader::GCodeLi } // Returns the new absolute position on the given axis in dependence of the given parameters -float axis_absolute_position_from_G1_line(GCodeAnalyzer::EAxis axis, const GCodeReader::GCodeLine& lineG1, GCodeAnalyzer::EUnits units, GCodeAnalyzer::EPositioningType type, float current_absolute_position) +float axis_absolute_position_from_G1_line(GCodeAnalyzer::EAxis axis, const GCodeReader::GCodeLine& lineG1, GCodeAnalyzer::EUnits units, bool is_relative, float current_absolute_position) { float lengthsScaleFactor = (units == GCodeAnalyzer::Inches) ? INCHES_TO_MM : 1.0f; if (lineG1.has(Slic3r::Axis(axis))) { float ret = lineG1.value(Slic3r::Axis(axis)) * lengthsScaleFactor; - return (type == GCodeAnalyzer::Absolute) ? ret : current_absolute_position + ret; + return is_relative ? current_absolute_position + ret : ret; } else return current_absolute_position; @@ -266,7 +266,11 @@ void GCodeAnalyzer::_processG1(const GCodeReader::GCodeLine& line) float new_pos[Num_Axis]; for (unsigned char a = X; a < Num_Axis; ++a) { - new_pos[a] = axis_absolute_position_from_G1_line((EAxis)a, line, units, (a == E) ? _get_positioning_e_type() : _get_positioning_xyz_type(), _get_axis_position((EAxis)a)); + bool is_relative = (_get_global_positioning_type() == Relative); + if (a == E) + is_relative |= (_get_e_local_positioning_type() == Relative); + + new_pos[a] = axis_absolute_position_from_G1_line((EAxis)a, line, units, is_relative, _get_axis_position((EAxis)a)); } // updates feedrate from line, if present @@ -341,12 +345,12 @@ void GCodeAnalyzer::_processG23(const GCodeReader::GCodeLine& line) void GCodeAnalyzer::_processG90(const GCodeReader::GCodeLine& line) { - _set_positioning_xyz_type(Absolute); + _set_global_positioning_type(Absolute); } void GCodeAnalyzer::_processG91(const GCodeReader::GCodeLine& line) { - _set_positioning_xyz_type(Relative); + _set_global_positioning_type(Relative); } void GCodeAnalyzer::_processG92(const GCodeReader::GCodeLine& line) @@ -389,12 +393,12 @@ void GCodeAnalyzer::_processG92(const GCodeReader::GCodeLine& line) void GCodeAnalyzer::_processM82(const GCodeReader::GCodeLine& line) { - _set_positioning_e_type(Absolute); + _set_e_local_positioning_type(Absolute); } void GCodeAnalyzer::_processM83(const GCodeReader::GCodeLine& line) { - _set_positioning_e_type(Relative); + _set_e_local_positioning_type(Relative); } void GCodeAnalyzer::_processT(const GCodeReader::GCodeLine& line) @@ -488,24 +492,24 @@ GCodeAnalyzer::EUnits GCodeAnalyzer::_get_units() const return m_state.units; } -void GCodeAnalyzer::_set_positioning_xyz_type(GCodeAnalyzer::EPositioningType type) +void GCodeAnalyzer::_set_global_positioning_type(GCodeAnalyzer::EPositioningType type) { - m_state.positioning_xyz_type = type; + m_state.global_positioning_type = type; } -GCodeAnalyzer::EPositioningType GCodeAnalyzer::_get_positioning_xyz_type() const +GCodeAnalyzer::EPositioningType GCodeAnalyzer::_get_global_positioning_type() const { - return m_state.positioning_xyz_type; + return m_state.global_positioning_type; } -void GCodeAnalyzer::_set_positioning_e_type(GCodeAnalyzer::EPositioningType type) +void GCodeAnalyzer::_set_e_local_positioning_type(GCodeAnalyzer::EPositioningType type) { - m_state.positioning_e_type = type; + m_state.e_local_positioning_type = type; } -GCodeAnalyzer::EPositioningType GCodeAnalyzer::_get_positioning_e_type() const +GCodeAnalyzer::EPositioningType GCodeAnalyzer::_get_e_local_positioning_type() const { - return m_state.positioning_e_type; + return m_state.e_local_positioning_type; } void GCodeAnalyzer::_set_extrusion_role(ExtrusionRole extrusion_role) diff --git a/xs/src/libslic3r/GCode/Analyzer.hpp b/xs/src/libslic3r/GCode/Analyzer.hpp index e2f38292e..03dbab338 100644 --- a/xs/src/libslic3r/GCode/Analyzer.hpp +++ b/xs/src/libslic3r/GCode/Analyzer.hpp @@ -90,8 +90,8 @@ private: struct State { EUnits units; - EPositioningType positioning_xyz_type; - EPositioningType positioning_e_type; + EPositioningType global_positioning_type; + EPositioningType e_local_positioning_type; Metadata data; Pointf3 start_position; float start_extrusion; @@ -176,11 +176,11 @@ private: void _set_units(EUnits units); EUnits _get_units() const; - void _set_positioning_xyz_type(EPositioningType type); - EPositioningType _get_positioning_xyz_type() const; + void _set_global_positioning_type(EPositioningType type); + EPositioningType _get_global_positioning_type() const; - void _set_positioning_e_type(EPositioningType type); - EPositioningType _get_positioning_e_type() const; + void _set_e_local_positioning_type(EPositioningType type); + EPositioningType _get_e_local_positioning_type() const; void _set_extrusion_role(ExtrusionRole extrusion_role); ExtrusionRole _get_extrusion_role() const; |