diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 907bd9a0e..008cad940 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1525,6 +1525,8 @@ void GCode::process_layer( { // add tag for analyzer gcode += "; " + GCodeAnalyzer::Color_Change_Tag + "\n"; + // add tag for time estimator + gcode += "; " + GCodeTimeEstimator::Color_Change_Tag + "\n"; gcode += "M600\n"; } diff --git a/src/libslic3r/GCodeTimeEstimator.cpp b/src/libslic3r/GCodeTimeEstimator.cpp index a03d3c7c8..5aa0a9ceb 100644 --- a/src/libslic3r/GCodeTimeEstimator.cpp +++ b/src/libslic3r/GCodeTimeEstimator.cpp @@ -168,10 +168,12 @@ namespace Slic3r { } #endif // ENABLE_MOVE_STATS - const std::string GCodeTimeEstimator::Normal_First_M73_Output_Placeholder_Tag = "; NORMAL_FIRST_M73_OUTPUT_PLACEHOLDER"; - const std::string GCodeTimeEstimator::Silent_First_M73_Output_Placeholder_Tag = "; SILENT_FIRST_M73_OUTPUT_PLACEHOLDER"; - const std::string GCodeTimeEstimator::Normal_Last_M73_Output_Placeholder_Tag = "; NORMAL_LAST_M73_OUTPUT_PLACEHOLDER"; - const std::string GCodeTimeEstimator::Silent_Last_M73_Output_Placeholder_Tag = "; SILENT_LAST_M73_OUTPUT_PLACEHOLDER"; + const std::string GCodeTimeEstimator::Normal_First_M73_Output_Placeholder_Tag = "; _TE_NORMAL_FIRST_M73_OUTPUT_PLACEHOLDER"; + const std::string GCodeTimeEstimator::Silent_First_M73_Output_Placeholder_Tag = "; _TE_SILENT_FIRST_M73_OUTPUT_PLACEHOLDER"; + const std::string GCodeTimeEstimator::Normal_Last_M73_Output_Placeholder_Tag = "; _TE_NORMAL_LAST_M73_OUTPUT_PLACEHOLDER"; + const std::string GCodeTimeEstimator::Silent_Last_M73_Output_Placeholder_Tag = "; _TE_SILENT_LAST_M73_OUTPUT_PLACEHOLDER"; + + const std::string GCodeTimeEstimator::Color_Change_Tag = "_TE_COLOR_CHANGE"; GCodeTimeEstimator::GCodeTimeEstimator(EMode mode) : m_mode(mode) @@ -814,6 +816,11 @@ namespace Slic3r { void GCodeTimeEstimator::_process_gcode_line(GCodeReader&, const GCodeReader::GCodeLine& line) { PROFILE_FUNC(); + + // processes 'special' comments contained in line + if (_process_tags(line)) + return; + std::string cmd = line.cmd(); if (cmd.length() > 1) { @@ -921,11 +928,6 @@ namespace Slic3r { _processM566(line); break; } - case 600: // Set color change - { - _processM600(line); - break; - } case 702: // MK3 MMU2: Process the final filament unload. { _processM702(line); @@ -1396,18 +1398,6 @@ namespace Slic3r { set_axis_max_jerk(E, line.e() * MMMIN_TO_MMSEC); } - void GCodeTimeEstimator::_processM600(const GCodeReader::GCodeLine& line) - { - PROFILE_FUNC(); - m_needs_color_times = true; - _calculate_time(); - if (m_color_time_cache != 0.0f) - { - m_color_times.push_back(m_color_time_cache); - m_color_time_cache = 0.0f; - } - } - void GCodeTimeEstimator::_processM702(const GCodeReader::GCodeLine& line) { PROFILE_FUNC(); @@ -1439,6 +1429,33 @@ namespace Slic3r { } } + bool GCodeTimeEstimator::_process_tags(const GCodeReader::GCodeLine& line) + { + std::string comment = line.comment(); + + // color change tag + size_t pos = comment.find(Color_Change_Tag); + if (pos != comment.npos) + { + _process_color_change_tag(); + return true; + } + + return false; + } + + void GCodeTimeEstimator::_process_color_change_tag() + { + PROFILE_FUNC(); + m_needs_color_times = true; + _calculate_time(); + if (m_color_time_cache != 0.0f) + { + m_color_times.push_back(m_color_time_cache); + m_color_time_cache = 0.0f; + } + } + void GCodeTimeEstimator::_simulate_st_synchronize() { PROFILE_FUNC(); diff --git a/src/libslic3r/GCodeTimeEstimator.hpp b/src/libslic3r/GCodeTimeEstimator.hpp index 8d794af1e..dd5d14b57 100644 --- a/src/libslic3r/GCodeTimeEstimator.hpp +++ b/src/libslic3r/GCodeTimeEstimator.hpp @@ -22,6 +22,8 @@ namespace Slic3r { static const std::string Normal_Last_M73_Output_Placeholder_Tag; static const std::string Silent_Last_M73_Output_Placeholder_Tag; + static const std::string Color_Change_Tag; + enum EMode : unsigned char { Normal, @@ -425,15 +427,19 @@ namespace Slic3r { // Set allowable instantaneous speed change void _processM566(const GCodeReader::GCodeLine& line); - // Set color change - void _processM600(const GCodeReader::GCodeLine& line); - // Unload the current filament into the MK3 MMU2 unit at the end of print. void _processM702(const GCodeReader::GCodeLine& line); // Processes T line (Select Tool) void _processT(const GCodeReader::GCodeLine& line); + // Processes the tags + // Returns true if any tag has been processed + bool _process_tags(const GCodeReader::GCodeLine& line); + + // Processes color change tag + void _process_color_change_tag(); + // Simulates firmware st_synchronize() call void _simulate_st_synchronize();