|
@@ -12,7 +12,7 @@ BEGIN {
|
|
|
use Getopt::Long qw(:config no_auto_abbrev);
|
|
|
use PDF::API2;
|
|
|
use Slic3r;
|
|
|
-use Slic3r::Geometry qw(unscale X Y);
|
|
|
+use Slic3r::Geometry qw(scale unscale X Y);
|
|
|
|
|
|
use constant mm => 25.4 / 72;
|
|
|
|
|
@@ -31,16 +31,21 @@ my %opt = ();
|
|
|
# prepare config
|
|
|
my $config = Slic3r::Config->new;
|
|
|
$config->set('layer_height', $opt{layer_height}) if $opt{layer_height};
|
|
|
+ $config->set('print_center', [0,0]);
|
|
|
+
|
|
|
+ # read model
|
|
|
+ my $model = Slic3r::Model->read_from_file(my $input_file = $ARGV[0]);
|
|
|
|
|
|
# init print object
|
|
|
my $sprint = Slic3r::Print::Simple->new;
|
|
|
$sprint->apply_config($config);
|
|
|
- $sprint->set_model(Slic3r::Model->read_from_file(my $input_file = $ARGV[0]));
|
|
|
+ $sprint->set_model($model);
|
|
|
my $print = $sprint->_print;
|
|
|
|
|
|
# compute sizes
|
|
|
my $bb = $print->bounding_box;
|
|
|
- my $mediabox = [ map unscale($_)/mm, @{$bb->size} ];
|
|
|
+ my $size = $bb->size;
|
|
|
+ my $mediabox = [ map unscale($_)/mm, @{$size} ];
|
|
|
|
|
|
# init PDF
|
|
|
my $pdf = PDF::API2->new();
|
|
@@ -48,20 +53,27 @@ my %opt = ();
|
|
|
|
|
|
# slice and build output geometry
|
|
|
$_->slice for @{$print->objects};
|
|
|
- foreach my $layer (@{ $print->objects->[0]->layers }) {
|
|
|
- my $page = $pdf->page();
|
|
|
- $page->mediabox(@$mediabox);
|
|
|
- my $content = $page->gfx;
|
|
|
- $content->fillcolor($color, 1);
|
|
|
+ foreach my $object (@{ $print->objects }) {
|
|
|
+ my $shift = $object->_shifted_copies->[0];
|
|
|
+ $shift->translate(map $_/2, @$size);
|
|
|
+
|
|
|
+ foreach my $layer (@{ $object->layers }) {
|
|
|
+ my $page = $pdf->page();
|
|
|
+ $page->mediabox(@$mediabox);
|
|
|
+ my $content = $page->gfx;
|
|
|
+ $content->fillcolor($color, 1);
|
|
|
|
|
|
- foreach my $expolygon (@{$layer->slices}) {
|
|
|
- $content->poly(map { unscale($_->x)/mm, unscale($_->y)/mm } @{$expolygon->contour}); #)
|
|
|
- $content->close;
|
|
|
- foreach my $hole (@{$expolygon->holes}) {
|
|
|
- $content->poly(map { unscale($_->x)/mm, unscale($_->y)/mm } @$hole); #)
|
|
|
+ foreach my $expolygon (@{$layer->slices}) {
|
|
|
+ $expolygon = $expolygon->clone;
|
|
|
+ $expolygon->translate(@$shift);
|
|
|
+ $content->poly(map { unscale($_->x)/mm, unscale($_->y)/mm } @{$expolygon->contour}); #)
|
|
|
$content->close;
|
|
|
+ foreach my $hole (@{$expolygon->holes}) {
|
|
|
+ $content->poly(map { unscale($_->x)/mm, unscale($_->y)/mm } @$hole); #)
|
|
|
+ $content->close;
|
|
|
+ }
|
|
|
+ $content->fill; # non-zero by default
|
|
|
}
|
|
|
- $content->fill; # non-zero by default
|
|
|
}
|
|
|
}
|
|
|
|