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:
parent
7f23e72a10
commit
04d2231901
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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) = @_;
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user