mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-01 22:40:37 +08:00
SPE-2098: Pass color_change_extruder also into Color Change G-code.
Some minor refactoring of ProcessLayer::emit_custom_gcode_per_print_z();
This commit is contained in:
parent
a85a0a8191
commit
ff3612840c
@ -1917,65 +1917,58 @@ namespace ProcessLayer
|
|||||||
assert(custom_gcode->type != CustomGCode::ToolChange);
|
assert(custom_gcode->type != CustomGCode::ToolChange);
|
||||||
|
|
||||||
CustomGCode::Type gcode_type = custom_gcode->type;
|
CustomGCode::Type gcode_type = custom_gcode->type;
|
||||||
bool color_change = gcode_type == CustomGCode::ColorChange;
|
const bool color_change = gcode_type == CustomGCode::ColorChange;
|
||||||
bool tool_change = gcode_type == CustomGCode::ToolChange;
|
const bool tool_change = gcode_type == CustomGCode::ToolChange;
|
||||||
// Tool Change is applied as Color Change for a single extruder printer only.
|
// Tool Change is applied as Color Change for a single extruder printer only.
|
||||||
assert(! tool_change || single_extruder_printer);
|
assert(!tool_change || single_extruder_printer);
|
||||||
|
|
||||||
std::string pause_print_msg;
|
|
||||||
int m600_extruder_before_layer = -1;
|
|
||||||
if (color_change && custom_gcode->extruder > 0)
|
|
||||||
m600_extruder_before_layer = custom_gcode->extruder - 1;
|
|
||||||
else if (gcode_type == CustomGCode::PausePrint)
|
|
||||||
pause_print_msg = custom_gcode->extra;
|
|
||||||
|
|
||||||
// we should add or not colorprint_change in respect to nozzle_diameter count instead of really used extruders count
|
// we should add or not colorprint_change in respect to nozzle_diameter count instead of really used extruders count
|
||||||
if (color_change || tool_change)
|
if (color_change || tool_change) {
|
||||||
{
|
int color_change_extruder = -1;
|
||||||
assert(m600_extruder_before_layer >= 0);
|
if (color_change && custom_gcode->extruder > 0)
|
||||||
|
color_change_extruder = custom_gcode->extruder - 1;
|
||||||
|
|
||||||
|
assert(color_change_extruder >= 0);
|
||||||
// Color Change or Tool Change as Color Change.
|
// Color Change or Tool Change as Color Change.
|
||||||
// add tag for processor
|
// add tag for processor
|
||||||
gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Color_Change) + ",T" + std::to_string(m600_extruder_before_layer) + "," + custom_gcode->color + "\n";
|
gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Color_Change) + ",T" + std::to_string(color_change_extruder) + "," + custom_gcode->color + "\n";
|
||||||
|
|
||||||
if (!single_extruder_printer && m600_extruder_before_layer >= 0 && first_extruder_id != (unsigned)m600_extruder_before_layer
|
|
||||||
// && !MMU1
|
|
||||||
) {
|
|
||||||
//! FIXME_in_fw show message during print pause
|
|
||||||
// FIXME: Why is pause_print_gcode here? Why is it supplied "color_change_extruder"? Why is that not
|
|
||||||
// passed to color_change_gcode below?
|
|
||||||
DynamicConfig cfg;
|
DynamicConfig cfg;
|
||||||
cfg.set_key_value("color_change_extruder", new ConfigOptionInt(m600_extruder_before_layer));
|
cfg.set_key_value("color_change_extruder", new ConfigOptionInt(color_change_extruder));
|
||||||
|
if (!single_extruder_printer && color_change_extruder >= 0 && first_extruder_id != unsigned(color_change_extruder)) {
|
||||||
|
//! FIXME_in_fw show message during print pause
|
||||||
|
// FIXME: Why is pause_print_gcode here? Why is it supplied "color_change_extruder"?
|
||||||
gcode += gcodegen.placeholder_parser_process("pause_print_gcode", config.pause_print_gcode, current_extruder_id, &cfg);
|
gcode += gcodegen.placeholder_parser_process("pause_print_gcode", config.pause_print_gcode, current_extruder_id, &cfg);
|
||||||
gcode += "\n";
|
gcode += "\n";
|
||||||
gcode += "M117 Change filament for Extruder " + std::to_string(m600_extruder_before_layer) + "\n";
|
gcode += "M117 Change filament for Extruder " + std::to_string(color_change_extruder) + "\n";
|
||||||
}
|
} else {
|
||||||
else {
|
gcode += gcodegen.placeholder_parser_process("color_change_gcode", config.color_change_gcode, current_extruder_id, &cfg);
|
||||||
gcode += gcodegen.placeholder_parser_process("color_change_gcode", config.color_change_gcode, current_extruder_id);
|
|
||||||
gcode += "\n";
|
gcode += "\n";
|
||||||
//FIXME Tell G-code writer that M600 filled the extruder, thus the G-code writer shall reset the extruder to unretracted state after
|
//FIXME Tell G-code writer that M600 filled the extruder, thus the G-code writer shall reset the extruder to unretracted state after
|
||||||
// return from M600. Thus the G-code generated by the following line is ignored.
|
// return from M600. Thus the G-code generated by the following line is ignored.
|
||||||
// see GH issue #6362
|
// see GH issue #6362
|
||||||
gcodegen.writer().unretract();
|
gcodegen.writer().unretract();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
if (gcode_type == CustomGCode::PausePrint) { // Pause print
|
||||||
if (gcode_type == CustomGCode::PausePrint) // Pause print
|
const std::string pause_print_msg = custom_gcode->extra;
|
||||||
{
|
|
||||||
// add tag for processor
|
// add tag for processor
|
||||||
gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Pause_Print) + "\n";
|
gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Pause_Print) + "\n";
|
||||||
//! FIXME_in_fw show message during print pause
|
//! FIXME_in_fw show message during print pause
|
||||||
if (!pause_print_msg.empty())
|
if (!pause_print_msg.empty())
|
||||||
gcode += "M117 " + pause_print_msg + "\n";
|
gcode += "M117 " + pause_print_msg + "\n";
|
||||||
gcode += gcodegen.placeholder_parser_process("pause_print_gcode", config.pause_print_gcode, current_extruder_id);
|
|
||||||
}
|
DynamicConfig cfg;
|
||||||
else {
|
cfg.set_key_value("color_change_extruder", new ConfigOptionInt(int(current_extruder_id)));
|
||||||
|
gcode += gcodegen.placeholder_parser_process("pause_print_gcode", config.pause_print_gcode, current_extruder_id, &cfg);
|
||||||
|
} else {
|
||||||
// add tag for processor
|
// add tag for processor
|
||||||
gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Custom_Code) + "\n";
|
gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Custom_Code) + "\n";
|
||||||
if (gcode_type == CustomGCode::Template) // Template Custom Gcode
|
if (gcode_type == CustomGCode::Template) // Template Custom Gcode
|
||||||
gcode += gcodegen.placeholder_parser_process("template_custom_gcode", config.template_custom_gcode, current_extruder_id);
|
gcode += gcodegen.placeholder_parser_process("template_custom_gcode", config.template_custom_gcode, current_extruder_id);
|
||||||
else // custom Gcode
|
else // custom Gcode
|
||||||
gcode += custom_gcode->extra;
|
gcode += custom_gcode->extra;
|
||||||
|
|
||||||
}
|
}
|
||||||
gcode += "\n";
|
gcode += "\n";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user