Use Slic3r::ExPolygon::Collection for Layer->slices
This commit is contained in:
parent
7534c1e6d9
commit
13e3a9129c
4 changed files with 21 additions and 4 deletions
|
@ -16,7 +16,7 @@ has 'height' => (is => 'ro', required => 1); # layer height in unscal
|
|||
|
||||
# collection of expolygons generated by slicing the original geometry;
|
||||
# also known as 'islands' (all regions and surface types are merged here)
|
||||
has 'slices' => (is => 'rw');
|
||||
has 'slices' => (is => 'rw', default => sub { Slic3r::ExPolygon::Collection->new });
|
||||
|
||||
# ordered collection of extrusion paths to fill surfaces for support material
|
||||
has 'support_islands' => (is => 'rw');
|
||||
|
@ -80,7 +80,8 @@ sub make_slices {
|
|||
my $self = shift;
|
||||
|
||||
my $slices = union_ex([ map $_->p, map @{$_->slices}, @{$self->regions} ]);
|
||||
$self->slices([ map Slic3r::ExPolygon::XS->new(@$_), @$slices ]);
|
||||
$self->slices->clear;
|
||||
$self->slices->append(map Slic3r::ExPolygon::XS->new(@$_), @$slices);
|
||||
}
|
||||
|
||||
sub make_perimeters {
|
||||
|
|
|
@ -305,7 +305,9 @@ sub _simplify_slices {
|
|||
my ($distance) = @_;
|
||||
|
||||
foreach my $layer (map @{$_->layers}, @{$self->objects}) {
|
||||
$layer->slices([ map $_->simplify($distance), @{$layer->slices} ]);
|
||||
my @new = map $_->simplify($distance), @{$layer->slices};
|
||||
$layer->slices->clear;
|
||||
$layer->slices->append(@new);
|
||||
foreach my $layerm (@{$layer->regions}) {
|
||||
my @new = map $_->simplify($distance), @{$layerm->slices};
|
||||
$layerm->slices->clear;
|
||||
|
|
|
@ -4,7 +4,7 @@ use strict;
|
|||
use warnings;
|
||||
|
||||
use Slic3r::XS;
|
||||
use Test::More tests => 11;
|
||||
use Test::More tests => 13;
|
||||
|
||||
use constant PI => 4 * atan2(1, 1);
|
||||
|
||||
|
@ -80,6 +80,11 @@ isa_ok $expolygon->[0][0], 'Slic3r::Point', 'Perl polygon points are blessed';
|
|||
my $collection2 = Slic3r::ExPolygon::Collection->new($expolygon, $expolygon2);
|
||||
is_deeply [ @$collection ], [ @$collection2 ],
|
||||
'expolygon collection with XS expolygons';
|
||||
|
||||
$collection->clear;
|
||||
is scalar(@$collection), 0, 'clear collection';
|
||||
$collection->append($expolygon);
|
||||
is scalar(@$collection), 1, 'append to collection';
|
||||
}
|
||||
|
||||
__END__
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
~ExPolygonCollection();
|
||||
ExPolygonCollection* clone()
|
||||
%code{% const char* CLASS = "Slic3r::ExPolygon::Collection"; RETVAL = new ExPolygonCollection(*THIS); %};
|
||||
void clear()
|
||||
%code{% THIS->expolygons.clear(); %};
|
||||
void scale(double factor);
|
||||
void translate(double x, double y);
|
||||
void rotate(double angle, Point* center);
|
||||
|
@ -45,5 +47,12 @@ ExPolygonCollection::arrayref()
|
|||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
void
|
||||
ExPolygonCollection::append(...)
|
||||
CODE:
|
||||
for (unsigned int i = 1; i < items; i++) {
|
||||
THIS->expolygons.push_back(*(ExPolygon *)SvIV((SV*)SvRV( ST(i) )));
|
||||
}
|
||||
|
||||
%}
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue