Refactoring: use the clone() method for inflating Surface objects

This commit is contained in:
Alessandro Ranellucci 2013-03-29 19:18:06 +01:00
parent e563c62094
commit 1b79b1cb20
4 changed files with 21 additions and 32 deletions

View file

@ -89,13 +89,7 @@ sub make_fill {
1,
);
push @surfaces, map Slic3r::Surface->new(
expolygon => $_,
surface_type => $group->[0]->surface_type,
bridge_angle => $group->[0]->bridge_angle,
thickness => $group->[0]->thickness,
thickness_layers => $group->[0]->thickness_layers,
), @$union;
push @surfaces, map $group->[0]->clone(expolygon => $_), @$union;
}
}

View file

@ -514,10 +514,7 @@ sub process_external_surfaces {
# subtract the new top surfaces from the other non-top surfaces and re-add them
my @other = grep $_->surface_type != S_TYPE_TOP && $_->surface_type != S_TYPE_BOTTOM, @{$self->fill_surfaces};
foreach my $group (Slic3r::Surface->group(@other)) {
push @new_surfaces, map Slic3r::Surface->new(
expolygon => $_,
surface_type => $group->[0]->surface_type,
), @{diff_ex(
push @new_surfaces, map $group->[0]->clone(expolygon => $_), @{diff_ex(
[ map $_->p, @$group ],
[ map $_->p, @new_surfaces ],
)};

View file

@ -543,10 +543,8 @@ sub bridge_over_infill {
my @new_surfaces = ();
# subtract the area from all types of surfaces
foreach my $group (Slic3r::Surface->group(@{$lower_layerm->fill_surfaces})) {
push @new_surfaces, map Slic3r::Surface->new(
expolygon => $_,
surface_type => $group->[0]->surface_type,
), @{diff_ex(
push @new_surfaces, map $group->[0]->clone(expolygon => $_),
@{diff_ex(
[ map $_->p, @$group ],
[ map @$_, @$to_bridge ],
)};
@ -669,8 +667,7 @@ sub discover_horizontal_shells {
[ map @$_, @$internal_solid, @$internal ],
1,
);
push @$neighbor_fill_surfaces, Slic3r::Surface->new
(expolygon => $_, surface_type => $s->[0]->surface_type, bridge_angle => $s->[0]->bridge_angle)
push @$neighbor_fill_surfaces, $s->[0]->clone(expolygon => $_)
for @$solid_surfaces;
}
}

View file

@ -34,6 +34,17 @@ sub new {
$self;
}
sub clone {
my $self = shift;
my %p = @_;
return (ref $self)->new(
(map { $_ => $self->$_ } qw(surface_type thickness thickness_layers bridge_angle)),
expolygon => ($p{expolygon} ? delete $p{expolygon} : $self->expolygon->clone),
%p,
);
}
sub expolygon { $_[0][S_EXPOLYGON] }
sub surface_type { $_[0][S_SURFACE_TYPE] = $_[1] if defined $_[1]; $_[0][S_SURFACE_TYPE] }
sub thickness { $_[0][S_THICKNESS] }
@ -85,22 +96,12 @@ sub group {
sub offset {
my $self = shift;
return map $self->_inflate_expolygon($_), $self->expolygon->offset_ex(@_);
return map $self->clone(expolygon => $_), $self->expolygon->offset_ex(@_);
}
sub simplify {
my $self = shift;
return map $self->_inflate_expolygon($_), $self->expolygon->simplify(@_);
}
sub _inflate_expolygon {
my $self = shift;
my ($expolygon) = @_;
return (ref $self)->new(
expolygon => $expolygon,
map { $_ => $self->$_ } qw(surface_type thickness thickness_layers bridge_angle),
);
return map $self->clone(expolygon => $_), $self->expolygon->simplify(@_);
}
sub p {