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
4 changed files with 14 additions and 5 deletions
|
@ -62,6 +62,17 @@ sub is_valid {
|
||||||
&& (!first { $_->is_counter_clockwise } $self->holes);
|
&& (!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 {
|
sub boost_polygon {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return Boost::Geometry::Utils::polygon(@$self);
|
return Boost::Geometry::Utils::polygon(@$self);
|
||||||
|
|
|
@ -97,8 +97,6 @@ sub first_point {
|
||||||
return $self->polyline->[0];
|
return $self->polyline->[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
sub is_printable { 1 }
|
|
||||||
|
|
||||||
sub is_perimeter {
|
sub is_perimeter {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->role == EXTR_ROLE_PERIMETER
|
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 {
|
sub is_printable {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($width) = @_;
|
my ($width) = @_;
|
||||||
|
|
|
@ -360,8 +360,8 @@ sub detect_surfaces_type {
|
||||||
[ map @$_, @$clip_surfaces ],
|
[ map @$_, @$clip_surfaces ],
|
||||||
1,
|
1,
|
||||||
);
|
);
|
||||||
return grep $_->contour->is_printable($layerm->perimeter_flow->scaled_width),
|
return map Slic3r::Surface->new(expolygon => $_, surface_type => $result_type),
|
||||||
map Slic3r::Surface->new(expolygon => $_, surface_type => $result_type),
|
grep $_->is_printable($layerm->perimeter_flow->scaled_width),
|
||||||
@$expolygons;
|
@$expolygons;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue