diff --git a/MANIFEST b/MANIFEST index c319935b9..36389aef1 100644 --- a/MANIFEST +++ b/MANIFEST @@ -81,6 +81,7 @@ t/shells.t t/slice.t t/skirt_brim.t t/support.t +t/svg.t t/vibrationlimit.t utils/amf-to-stl.pl utils/file_info.pl diff --git a/lib/Slic3r/Print.pm b/lib/Slic3r/Print.pm index c2b59a20c..d17774318 100644 --- a/lib/Slic3r/Print.pm +++ b/lib/Slic3r/Print.pm @@ -488,13 +488,15 @@ sub export_svg { $self->init_extruders; $_->slice for @{$self->objects}; - $self->arrange_objects; - my $output_file = $self->expanded_output_filepath($params{output_file}); - $output_file =~ s/\.gcode$/.svg/i; + my $fh = $params{output_fh}; + if ($params{output_file}) { + my $output_file = $self->expanded_output_filepath($params{output_file}); + $output_file =~ s/\.gcode$/.svg/i; + Slic3r::open(\$fh, ">", $output_file) or die "Failed to open $output_file for writing\n"; + print "Exporting to $output_file..." unless $params{quiet}; + } - Slic3r::open(\my $fh, ">", $output_file) or die "Failed to open $output_file for writing\n"; - print "Exporting to $output_file..."; my $print_size = $self->size; print $fh sprintf <<"EOF", unscale($print_size->[X]), unscale($print_size->[Y]); @@ -563,7 +565,7 @@ EOF print $fh "\n"; close $fh; - print "Done.\n"; + print "Done.\n" unless $params{quiet}; } sub make_skirt { diff --git a/t/svg.t b/t/svg.t new file mode 100644 index 000000000..9e2a8dcb1 --- /dev/null +++ b/t/svg.t @@ -0,0 +1,23 @@ +use Test::More tests => 1; +use strict; +use warnings; + +BEGIN { + use FindBin; + use lib "$FindBin::Bin/../lib"; +} + +use Slic3r; +use Slic3r::Test; + +{ + my $print = Slic3r::Test::init_print('20mm_cube'); + eval { + my $fh = IO::Scalar->new(\my $gcode); + $print->export_svg(output_fh => $fh, quiet => 1); + $fh->close; + }; + ok !$@, 'successful SVG export'; +} + +__END__