GCodeTimeEstimator uses annotated gcode in place of processing m600 lines to detect color print changes.
WARNING -> After this commit the exported gcode will contain the extra lines used by the time estimator. They will be removed by a future commit when a new post-process method will be implemented.
This commit is contained in:
parent
b79457b723
commit
9cabb03f72
@ -1525,6 +1525,8 @@ void GCode::process_layer(
|
|||||||
{
|
{
|
||||||
// add tag for analyzer
|
// add tag for analyzer
|
||||||
gcode += "; " + GCodeAnalyzer::Color_Change_Tag + "\n";
|
gcode += "; " + GCodeAnalyzer::Color_Change_Tag + "\n";
|
||||||
|
// add tag for time estimator
|
||||||
|
gcode += "; " + GCodeTimeEstimator::Color_Change_Tag + "\n";
|
||||||
gcode += "M600\n";
|
gcode += "M600\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,10 +168,12 @@ namespace Slic3r {
|
|||||||
}
|
}
|
||||||
#endif // ENABLE_MOVE_STATS
|
#endif // ENABLE_MOVE_STATS
|
||||||
|
|
||||||
const std::string GCodeTimeEstimator::Normal_First_M73_Output_Placeholder_Tag = "; NORMAL_FIRST_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 = "; SILENT_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 = "; NORMAL_LAST_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 = "; SILENT_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)
|
GCodeTimeEstimator::GCodeTimeEstimator(EMode mode)
|
||||||
: m_mode(mode)
|
: m_mode(mode)
|
||||||
@ -814,6 +816,11 @@ namespace Slic3r {
|
|||||||
void GCodeTimeEstimator::_process_gcode_line(GCodeReader&, const GCodeReader::GCodeLine& line)
|
void GCodeTimeEstimator::_process_gcode_line(GCodeReader&, const GCodeReader::GCodeLine& line)
|
||||||
{
|
{
|
||||||
PROFILE_FUNC();
|
PROFILE_FUNC();
|
||||||
|
|
||||||
|
// processes 'special' comments contained in line
|
||||||
|
if (_process_tags(line))
|
||||||
|
return;
|
||||||
|
|
||||||
std::string cmd = line.cmd();
|
std::string cmd = line.cmd();
|
||||||
if (cmd.length() > 1)
|
if (cmd.length() > 1)
|
||||||
{
|
{
|
||||||
@ -921,11 +928,6 @@ namespace Slic3r {
|
|||||||
_processM566(line);
|
_processM566(line);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 600: // Set color change
|
|
||||||
{
|
|
||||||
_processM600(line);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 702: // MK3 MMU2: Process the final filament unload.
|
case 702: // MK3 MMU2: Process the final filament unload.
|
||||||
{
|
{
|
||||||
_processM702(line);
|
_processM702(line);
|
||||||
@ -1396,18 +1398,6 @@ namespace Slic3r {
|
|||||||
set_axis_max_jerk(E, line.e() * MMMIN_TO_MMSEC);
|
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)
|
void GCodeTimeEstimator::_processM702(const GCodeReader::GCodeLine& line)
|
||||||
{
|
{
|
||||||
PROFILE_FUNC();
|
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()
|
void GCodeTimeEstimator::_simulate_st_synchronize()
|
||||||
{
|
{
|
||||||
PROFILE_FUNC();
|
PROFILE_FUNC();
|
||||||
|
@ -22,6 +22,8 @@ namespace Slic3r {
|
|||||||
static const std::string Normal_Last_M73_Output_Placeholder_Tag;
|
static const std::string Normal_Last_M73_Output_Placeholder_Tag;
|
||||||
static const std::string Silent_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
|
enum EMode : unsigned char
|
||||||
{
|
{
|
||||||
Normal,
|
Normal,
|
||||||
@ -425,15 +427,19 @@ namespace Slic3r {
|
|||||||
// Set allowable instantaneous speed change
|
// Set allowable instantaneous speed change
|
||||||
void _processM566(const GCodeReader::GCodeLine& line);
|
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.
|
// Unload the current filament into the MK3 MMU2 unit at the end of print.
|
||||||
void _processM702(const GCodeReader::GCodeLine& line);
|
void _processM702(const GCodeReader::GCodeLine& line);
|
||||||
|
|
||||||
// Processes T line (Select Tool)
|
// Processes T line (Select Tool)
|
||||||
void _processT(const GCodeReader::GCodeLine& line);
|
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
|
// Simulates firmware st_synchronize() call
|
||||||
void _simulate_st_synchronize();
|
void _simulate_st_synchronize();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user