Allow to use config options in start/end G-code

This commit is contained in:
Alessandro Ranellucci 2012-03-03 23:29:08 +01:00
parent f2032686da
commit d0807aa807
3 changed files with 27 additions and 14 deletions

View File

@ -619,4 +619,23 @@ sub validate {
$Slic3r::solid_infill_speed ||= $Slic3r::infill_speed;
}
sub replace_options {
my $class = shift;
my ($string, $more_variables) = @_;
if ($more_variables) {
my $variables = join '|', keys %$more_variables;
$string =~ s/\[($variables)\]/$more_variables->{$1}/eg;
}
# build a regexp to match the available options
my $options = join '|',
grep !$Slic3r::Config::Options->{$_}{multiline},
keys %$Slic3r::Config::Options;
# use that regexp to search and replace option names with option values
$string =~ s/\[($options)\]/Slic3r::Config->serialize($1)/eg;
return $string;
}
1;

View File

@ -592,7 +592,7 @@ sub export_gcode {
printf $fh "M104 %s%d ; set temperature\n",
($Slic3r::gcode_flavor eq 'mach3' ? 'P' : 'S'), $Slic3r::first_layer_temperature
if $Slic3r::first_layer_temperature;
print $fh "$Slic3r::start_gcode\n";
printf $fh "%s\n", Slic3r::Config->replace_options($Slic3r::start_gcode);
printf $fh "M109 %s%d ; wait for temperature to be reached\n",
($Slic3r::gcode_flavor eq 'mach3' ? 'P' : 'S'), $Slic3r::first_layer_temperature
if $Slic3r::first_layer_temperature && $Slic3r::gcode_flavor ne 'makerbot';
@ -720,7 +720,7 @@ sub export_gcode {
print $fh $extruder->retract;
print $fh $extruder->set_fan(0);
print $fh "M501 ; reset acceleration\n" if $Slic3r::acceleration;
print $fh "$Slic3r::end_gcode\n";
printf $fh "%s\n", Slic3r::Config->replace_options($Slic3r::end_gcode);
printf $fh "; filament used = %.1fmm (%.1fcm3)\n",
$self->total_extrusion_length, $self->total_extrusion_volume;

View File

@ -163,19 +163,13 @@ sub expanded_output_filepath {
# file directory and append the specified filename format
$path ||= (fileparse($self->input_file))[1] . $Slic3r::output_filename_format;
my $input_basename = basename($self->input_file);
$path =~ s/\[input_filename\]/$input_basename/g;
$input_basename =~ s/\.(?:stl|amf(?:\.xml)?)$//i;
$path =~ s/\[input_filename_base\]/$input_basename/g;
my $input_filename = my $input_filename_base = basename($self->input_file);
$input_filename_base =~ s/\.(?:stl|amf(?:\.xml)?)$//i;
# build a regexp to match the available options
my $options = join '|',
grep !$Slic3r::Config::Options->{$_}{multiline},
keys %$Slic3r::Config::Options;
# use that regexp to search and replace option names with option values
$path =~ s/\[($options)\]/Slic3r::Config->serialize($1)/eg;
return $path;
return Slic3r::Config->replace_options($path, {
input_filename => $input_filename,
input_filename_base => $input_filename_base,
});
}
1;