Use Slic3r::Surface::Collection for Layer::Region->slices

This commit is contained in:
Alessandro Ranellucci 2013-07-14 15:03:45 +02:00
parent 5885be881c
commit 7534c1e6d9
4 changed files with 17 additions and 12 deletions

View File

@ -25,7 +25,7 @@ has 'overhang_width' => (is => 'lazy');
# collection of surfaces generated by slicing the original geometry
# divided by type top/bottom/internal
has 'slices' => (is => 'rw', default => sub { [] });
has 'slices' => (is => 'rw', default => sub { Slic3r::Surface::Collection->new });
# collection of polygons or polylines representing thin walls contained
# in the original geometry
@ -89,7 +89,8 @@ sub make_surfaces {
my ($loops) = @_;
return if !@$loops;
$self->slices([ _merge_loops($loops) ]);
$self->slices->clear;
$self->slices->append(_merge_loops($loops));
# detect thin walls by offsetting slices by half extrusion inwards
if ($Slic3r::Config->thin_walls) {

View File

@ -305,8 +305,12 @@ sub _simplify_slices {
my ($distance) = @_;
foreach my $layer (map @{$_->layers}, @{$self->objects}) {
@$_ = map $_->simplify($distance), @$_
for $layer->slices, (map $_->slices, @{$layer->regions});
$layer->slices([ map $_->simplify($distance), @{$layer->slices} ]);
foreach my $layerm (@{$layer->regions}) {
my @new = map $_->simplify($distance), @{$layerm->slices};
$layerm->slices->clear;
$layerm->slices->append(@new);
}
}
}

View File

@ -232,9 +232,12 @@ sub slice {
[ map $_->expolygon->holes, @upper_surfaces, @lower_surfaces, ],
);
@{$layerm->slices} = map Slic3r::Surface->new
$layerm->slices->clear;
$layerm->slices->append(
map Slic3r::Surface->new
(expolygon => $_, surface_type => S_TYPE_INTERNAL),
@$diff;
@$diff
);
}
# update layer slices after repairing the single regions
@ -418,7 +421,8 @@ sub detect_surfaces_type {
);
# save surfaces to layer
@{$layerm->slices} = (@bottom, @top, @internal);
$layerm->slices->clear;
$layerm->slices->append(@bottom, @top, @internal);
Slic3r::debugf " layer %d has %d bottom, %d top and %d internal surfaces\n",
$layerm->id, scalar(@bottom), scalar(@top), scalar(@internal);

View File

@ -42,10 +42,6 @@ use Slic3r::Test;
$self->init_extruders;
$_->slice for @{$self->objects};
$_->make_perimeters for @{$self->objects};
foreach my $layer (map @{$_->layers}, @{$self->objects}) {
@$_ = map $_->simplify(&Slic3r::SCALED_RESOLUTION), @$_
for $layer->slices, (map $_->slices, @{$layer->regions});
}
$_->detect_surfaces_type for @{$self->objects};
$_->prepare_fill_surfaces for map @{$_->regions}, map @{$_->layers}, @{$self->objects};
$_->process_external_surfaces for map @{$_->regions}, map @{$_->layers}, @{$self->objects};