Bugfix: is_printable() wasn't discarding narrow ring-shaped top/bottom surfaces because it was only considering the contour. This caused extra shell material even in hollow prints. #1049

This commit is contained in:
Alessandro Ranellucci 2013-03-30 11:22:12 +01:00
parent 7f23e72a10
commit 04d2231901
4 changed files with 14 additions and 5 deletions

View File

@ -62,6 +62,17 @@ sub is_valid {
&& (!first { $_->is_counter_clockwise } $self->holes);
}
# returns false if the expolygon is too tight to be printed
sub is_printable {
my $self = shift;
my ($width) = @_;
# try to get an inwards offset
# for a distance equal to half of the extrusion width;
# if no offset is possible, then expolygon is not printable.
return Slic3r::Geometry::Clipper::offset($self, -$width / 2) ? 1 : 0;
}
sub boost_polygon {
my $self = shift;
return Boost::Geometry::Utils::polygon(@$self);

View File

@ -97,8 +97,6 @@ sub first_point {
return $self->polyline->[0];
}
sub is_printable { 1 }
sub is_perimeter {
my $self = shift;
return $self->role == EXTR_ROLE_PERIMETER

View File

@ -128,7 +128,7 @@ sub subdivide {
}
}
# returns false if the polyline is too tight to be printed
# returns false if the polygon is too tight to be printed
sub is_printable {
my $self = shift;
my ($width) = @_;

View File

@ -360,8 +360,8 @@ sub detect_surfaces_type {
[ map @$_, @$clip_surfaces ],
1,
);
return grep $_->contour->is_printable($layerm->perimeter_flow->scaled_width),
map Slic3r::Surface->new(expolygon => $_, surface_type => $result_type),
return map Slic3r::Surface->new(expolygon => $_, surface_type => $result_type),
grep $_->is_printable($layerm->perimeter_flow->scaled_width),
@$expolygons;
};