From 94ecbf39af4f99b9845b6dab60c536428eb06c7b Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 11 Mar 2020 12:33:51 +0100 Subject: [PATCH] add layer information into start/end_filament_gcode --- src/libslic3r/GCode.cpp | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 1af23b4a2..680237284 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -333,7 +333,13 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T unsigned int old_extruder_id = gcodegen.writer().extruder()->id(); const std::string &end_filament_gcode = gcodegen.config().end_filament_gcode.get_at(old_extruder_id); if (gcodegen.writer().extruder() != nullptr && ! end_filament_gcode.empty()) { - end_filament_gcode_str = gcodegen.placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id); + DynamicConfig config; + int previous_extruder_id = gcodegen.writer().extruder() ? (int)gcodegen.writer().extruder()->id() : -1; + config.set_key_value("previous_extruder", new ConfigOptionInt(previous_extruder_id)); + config.set_key_value("next_extruder", new ConfigOptionInt((int)new_extruder_id)); + config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(tcr.print_z)); + end_filament_gcode_str = gcodegen.placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id, &config); check_add_eol(end_filament_gcode_str); } } @@ -373,6 +379,10 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T // Process the start_filament_gcode for the active filament only. DynamicConfig config; config.set_key_value("filament_extruder_id", new ConfigOptionInt(new_extruder_id)); + config.set_key_value("previous_extruder", new ConfigOptionInt(gcodegen.writer().extruder() ? (int)gcodegen.writer().extruder()->id() : -1)); + config.set_key_value("next_extruder", new ConfigOptionInt(new_extruder_id)); + config.set_key_value("layer_num", new ConfigOptionInt(0)); + config.set_key_value("layer_z", new ConfigOptionFloat(z)); start_filament_gcode_str = gcodegen.placeholder_parser_process("start_filament_gcode", start_filament_gcode, new_extruder_id, &config); check_add_eol(start_filament_gcode_str); } @@ -1430,6 +1440,8 @@ void GCode::_do_export(Print &print, FILE *file) for (const std::string &end_gcode : print.config().end_filament_gcode.values) { int extruder_id = (unsigned int)(&end_gcode - &print.config().end_filament_gcode.values.front()); config.set_key_value("filament_extruder_id", new ConfigOptionInt(extruder_id)); + config.set_key_value("previous_extruder", new ConfigOptionInt(extruder_id)); + config.set_key_value("next_extruder", new ConfigOptionInt(0)); _writeln(file, this->placeholder_parser_process("end_filament_gcode", end_gcode, extruder_id, &config)); } } @@ -3581,8 +3593,13 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) // Append the filament start G-code. const std::string &start_filament_gcode = m_config.start_filament_gcode.get_at(extruder_id); if (! start_filament_gcode.empty()) { - // Process the start_filament_gcode for the filament. - gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id); + DynamicConfig config; + config.set_key_value("previous_extruder", new ConfigOptionInt((int)extruder_id)); + config.set_key_value("next_extruder", new ConfigOptionInt((int)extruder_id)); + config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(print_z)); + // Process the start_filament_gcode for the new filament. + gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id, &config); check_add_eol(gcode); } gcode += m_writer.toolchange(extruder_id); @@ -3601,7 +3618,12 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) unsigned int old_extruder_id = m_writer.extruder()->id(); const std::string &end_filament_gcode = m_config.end_filament_gcode.get_at(old_extruder_id); if (! end_filament_gcode.empty()) { - gcode += placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id); + DynamicConfig config; + config.set_key_value("previous_extruder", new ConfigOptionInt((int)(m_writer.extruder() != nullptr ? m_writer.extruder()->id() : -1))); + config.set_key_value("next_extruder", new ConfigOptionInt((int)extruder_id)); + config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(print_z)); + gcode += placeholder_parser_process("end_filament_gcode", end_filament_gcode, old_extruder_id, &config); check_add_eol(gcode); } } @@ -3648,8 +3670,13 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) // Append the filament start G-code. const std::string &start_filament_gcode = m_config.start_filament_gcode.get_at(extruder_id); if (! start_filament_gcode.empty()) { + DynamicConfig config; + config.set_key_value("previous_extruder", new ConfigOptionInt((int)(m_writer.extruder() != nullptr ? m_writer.extruder()->id() : -1))); + config.set_key_value("next_extruder", new ConfigOptionInt((int)extruder_id)); + config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(print_z)); // Process the start_filament_gcode for the new filament. - gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id); + gcode += this->placeholder_parser_process("start_filament_gcode", start_filament_gcode, extruder_id, &config); check_add_eol(gcode); } // Set the new extruder to the operating temperature.