From 5509afa82aa8170d5eab542c35e0b1fcb8097ab0 Mon Sep 17 00:00:00 2001 From: Joseph Lenox Date: Mon, 5 Nov 2018 19:50:29 -0600 Subject: [PATCH] #4569 Added new gcode placeholder, [filament_extruder_id] that is only valid in filament start/end gcode and refers to which position this filament is loaded in. --- lib/Slic3r/Print/GCode.pm | 6 ++++++ xs/src/libslic3r/PrintGCode.cpp | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/lib/Slic3r/Print/GCode.pm b/lib/Slic3r/Print/GCode.pm index ef6515473..d559a5ea2 100644 --- a/lib/Slic3r/Print/GCode.pm +++ b/lib/Slic3r/Print/GCode.pm @@ -160,7 +160,10 @@ sub export { $self->_print_first_layer_temperature(0) if $include_start_extruder_temp; printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($self->config->start_gcode)); + my $filament_extruder = 0; foreach my $start_gcode (@{ $self->config->start_filament_gcode }) { # process filament gcode in order + $gcodegen->placeholder_parser->set("filament_extruder_id", $filament_extruder); + $filament_extruder++; printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($start_gcode)); } $self->_print_first_layer_temperature(1) @@ -303,7 +306,10 @@ sub export { # write end commands to file print $fh $gcodegen->retract; # TODO: process this retract through PressureRegulator in order to discharge fully print $fh $gcodegen->writer->set_fan(0); + my $filament_extruder = 0; foreach my $end_gcode (@{ $self->config->end_filament_gcode }) { # Process filament-specific gcode in extruder order. + $gcodegen->placeholder_parser->set("filament_extruder_id", $filament_extruder); + $filament_extruder++; printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($end_gcode)); } printf $fh "%s\n", Slic3r::ConditionalGCode::apply_math($gcodegen->placeholder_parser->process($self->config->end_gcode)); diff --git a/xs/src/libslic3r/PrintGCode.cpp b/xs/src/libslic3r/PrintGCode.cpp index 0af21863c..2f9e65e46 100644 --- a/xs/src/libslic3r/PrintGCode.cpp +++ b/xs/src/libslic3r/PrintGCode.cpp @@ -131,7 +131,9 @@ PrintGCode::output() // Apply gcode math to start gcode fh << apply_math(gcodegen.placeholder_parser->process(config.start_gcode.value)); + auto filament_extruder {0U}; for(const auto& start_gcode : config.start_filament_gcode.values) { + gcodegen.placeholder_parser->set("filament_extruder", filament_extruder++); fh << apply_math(gcodegen.placeholder_parser->process(start_gcode)); } @@ -278,7 +280,10 @@ PrintGCode::output() // Write end commands to file. fh << gcodegen.retract(); // TODO: process this retract through PressureRegulator in order to discharge fully + + auto filament_extruder {0U}; for(const auto& end_gcode : config.end_filament_gcode.values) { + gcodegen.placeholder_parser->set("filament_extruder", filament_extruder++); fh << apply_math(gcodegen.placeholder_parser->process(end_gcode)); }