Fixed regression causing thin walls to be processed twice, thus producing overlapping straight paths and zigzag. #1035

This commit is contained in:
Alessandro Ranellucci 2013-03-09 17:07:11 +01:00
parent a2702082b2
commit fa41e15c68
3 changed files with 16 additions and 1 deletions

View file

@ -277,6 +277,17 @@ sub make_perimeters {
if ($Slic3r::Config->gap_fill_speed > 0 && $Slic3r::Config->fill_density > 0) {
my $filler = Slic3r::Fill::Rectilinear->new(layer_id => $self->layer->id);
# we should probably use this code to handle thin walls and remove that logic from
# make_surfaces(), but we need to enable dynamic extrusion width before as we can't
# use zigzag for thin walls.
# in the mean time we subtract thin walls from the detected gaps so that we don't
# reprocess them, causing overlapping thin walls and zigzag.
@gaps = @{diff_ex(
[ map @$_, @gaps ],
[ map $_->grow($self->perimeter_flow->scaled_width), @{$self->{thin_walls}} ],
1,
)};
my $w = $self->perimeter_flow->width;
my @widths = (1.5 * $w, $w, 0.5 * $w); # worth trying 0.2 too?
foreach my $width (@widths) {

View file

@ -92,6 +92,11 @@ sub offset {
return map Slic3r::Polygon->new($_), Slic3r::Geometry::Clipper::offset([$self], @_);
}
sub grow {
my $self = shift;
return $self->split_at_first_point->grow(@_);
}
# this method subdivides the polygon segments to that no one of them
# is longer than the length provided
sub subdivide {

View file

@ -84,7 +84,6 @@ sub length {
return $length;
}
# this only applies to polylines
sub grow {
my $self = shift;
return Slic3r::Polygon->new(@$self, CORE::reverse @$self[1..($#$self-1)])->offset(@_);