From 67aefdccc7dc56c159c48e7abe60045bcee23c3f Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Wed, 4 Sep 2013 00:10:53 +0200 Subject: [PATCH] Fixed --avoid-crossing-perimeters and --support-material after the xsdata merge --- lib/Slic3r/Fill/Honeycomb.pm | 2 +- lib/Slic3r/GCode/MotionPlanner.pm | 2 +- lib/Slic3r/Print.pm | 8 +++---- lib/Slic3r/Print/Object.pm | 36 +++++++++++++++---------------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/lib/Slic3r/Fill/Honeycomb.pm b/lib/Slic3r/Fill/Honeycomb.pm index 11e98ba8c5..eabbf861f2 100644 --- a/lib/Slic3r/Fill/Honeycomb.pm +++ b/lib/Slic3r/Fill/Honeycomb.pm @@ -82,7 +82,7 @@ sub fill_surface { # we were requested to complete each loop; # in this case we don't try to make more continuous paths @paths = map $_->split_at_first_point, - @{intersection($surface->expolygon, \@polygons)}; + @{intersection([ $surface->p ], \@polygons)}; } else { # consider polygons as polylines without re-appending the initial point: diff --git a/lib/Slic3r/GCode/MotionPlanner.pm b/lib/Slic3r/GCode/MotionPlanner.pm index 71a178ecc2..f24becfa40 100644 --- a/lib/Slic3r/GCode/MotionPlanner.pm +++ b/lib/Slic3r/GCode/MotionPlanner.pm @@ -78,7 +78,7 @@ sub BUILD { # lines of outer polygons connect visible points for my $i (0 .. $#outer) { - foreach my $line ($outer[$i]->lines) { + foreach my $line (@{$outer[$i]->lines}) { my $dist = $line->length; $edges->{$line->a}{$line->b} = $dist; $edges->{$line->b}{$line->a} = $dist; diff --git a/lib/Slic3r/Print.pm b/lib/Slic3r/Print.pm index 4ac8363fce..8848964f3f 100644 --- a/lib/Slic3r/Print.pm +++ b/lib/Slic3r/Print.pm @@ -584,8 +584,8 @@ sub make_skirt { if (@{ $object->support_layers }) { my @support_layers = map $object->support_layers->[$_], 0..min($Slic3r::Config->skirt_height-1, $#{$object->support_layers}); push @layer_points, - (map @{$_->unpack->polyline}, map @{$_->support_fills->paths}, grep $_->support_fills, @support_layers), - (map @{$_->unpack->polyline}, map @{$_->support_interface_fills->paths}, grep $_->support_interface_fills, @support_layers); + (map @{$_->polyline}, map @{$_->support_fills}, grep $_->support_fills, @support_layers), + (map @{$_->polyline}, map @{$_->support_interface_fills}, grep $_->support_interface_fills, @support_layers); } push @points, map move_points($_, @layer_points), @{$object->copies}; } @@ -650,10 +650,10 @@ sub make_brim { if (@{ $object->support_layers }) { my $support_layer0 = $object->support_layers->[0]; push @object_islands, - (map $_->unpack->polyline->grow($grow_distance), @{$support_layer0->support_fills->paths}) + (map $_->polyline->grow($grow_distance), @{$support_layer0->support_fills}) if $support_layer0->support_fills; push @object_islands, - (map $_->unpack->polyline->grow($grow_distance), @{$support_layer0->support_interface_fills->paths}) + (map $_->polyline->grow($grow_distance), @{$support_layer0->support_interface_fills}) if $support_layer0->support_interface_fills; } foreach my $copy (@{$object->copies}) { diff --git a/lib/Slic3r/Print/Object.pm b/lib/Slic3r/Print/Object.pm index a0bd215101..06c9d1b065 100644 --- a/lib/Slic3r/Print/Object.pm +++ b/lib/Slic3r/Print/Object.pm @@ -1094,21 +1094,21 @@ sub generate_support_material { my @loops = @loops0; for my $i (2..$contact_loops) { my $d = ($i-1) * $flow->scaled_spacing; - push @loops, offset2(\@loops0, -$d -0.5*$flow->scaled_spacing, +0.5*$flow->scaled_spacing); + push @loops, @{offset2(\@loops0, -$d -0.5*$flow->scaled_spacing, +0.5*$flow->scaled_spacing)}; } # clip such loops to the side oriented towards the object @loops = map Slic3r::Polyline->new(@$_), @{ Boost::Geometry::Utils::multi_polygon_multi_linestring_intersection( - [ offset_ex([ map @$_, @$overhang ], +scale 3) ], - [ map Slic3r::Polygon->new(@$_)->split_at_first_point, @loops ], + [ map $_->pp, @{offset_ex([ map @$_, @$overhang ], +scale 3)} ], + [ map Slic3r::Polygon->new(@$_)->split_at_first_point->pp, @loops ], ) }; # add the contact infill area to the interface area - $contact_infill = [ offset2(\@loops0, -($contact_loops + 0.5) * $flow->scaled_spacing, +0.5*$flow->scaled_spacing) ]; + $contact_infill = offset2(\@loops0, -($contact_loops + 0.5) * $flow->scaled_spacing, +0.5*$flow->scaled_spacing); # transform loops into ExtrusionPath objects - @loops = map Slic3r::ExtrusionPath->pack( + @loops = map Slic3r::ExtrusionPath->new( polyline => $_, role => EXTR_ROLE_SUPPORTMATERIAL, flow_spacing => $flow->spacing, @@ -1123,9 +1123,9 @@ sub generate_support_material { # steal some space from support $interface{$layer_id} = intersection( - [ offset([ map @$_, $interface{$layer_id}, $contact_infill ], scale 3) ], + offset([ map @$_, $interface{$layer_id}, $contact_infill ], scale 3), [ map @$_, $interface{$layer_id}, $support{$layer_id}, $contact_infill ], - undef, 1, + 1, ); $support{$layer_id} = diff( $support{$layer_id}, @@ -1135,14 +1135,14 @@ sub generate_support_material { my @paths = (); foreach my $expolygon (@{union_ex($interface{$layer_id})}) { my @p = $fillers{interface}->fill_surface( - Slic3r::Surface->new(expolygon => $expolygon), + Slic3r::Surface->new(expolygon => $expolygon, surface_type => S_TYPE_INTERNAL), density => $interface_density, flow_spacing => $flow->spacing, complete => 1, ); my $params = shift @p; - push @paths, map Slic3r::ExtrusionPath->pack( + push @paths, map Slic3r::ExtrusionPath->new( polyline => Slic3r::Polyline->new(@$_), role => EXTR_ROLE_SUPPORTMATERIAL, height => undef, @@ -1160,7 +1160,7 @@ sub generate_support_material { my $flow_spacing = $flow->spacing; # TODO: use offset2_ex() - my $to_infill = union_ex($support{$layer_id}, undef, 1); + my $to_infill = union_ex($support{$layer_id}, 1); my @paths = (); # base flange @@ -1172,7 +1172,7 @@ sub generate_support_material { } else { # draw a perimeter all around support infill # TODO: use brim ordering algorithm - push @paths, map Slic3r::ExtrusionPath->pack( + push @paths, map Slic3r::ExtrusionPath->new( polyline => $_->split_at_first_point, role => EXTR_ROLE_SUPPORTMATERIAL, height => undef, @@ -1180,19 +1180,19 @@ sub generate_support_material { ), map @$_, @$to_infill; # TODO: use offset2_ex() - $to_infill = [ offset_ex([ map @$_, @$to_infill ], -$flow->scaled_spacing) ]; + $to_infill = offset_ex([ map @$_, @$to_infill ], -$flow->scaled_spacing); } foreach my $expolygon (@$to_infill) { my @p = $filler->fill_surface( - Slic3r::Surface->new(expolygon => $expolygon), + Slic3r::Surface->new(expolygon => $expolygon, surface_type => S_TYPE_INTERNAL), density => $density, flow_spacing => $flow_spacing, complete => 1, ); my $params = shift @p; - push @paths, map Slic3r::ExtrusionPath->pack( + push @paths, map Slic3r::ExtrusionPath->new( polyline => Slic3r::Polyline->new(@$_), role => EXTR_ROLE_SUPPORTMATERIAL, height => undef, @@ -1221,11 +1221,11 @@ sub generate_support_material { my ($layer_id, $result) = @_; my $layer = $self->support_layers->[$layer_id]; - my $interface_collection = Slic3r::ExtrusionPath::Collection->new(paths => [ @{$result->{contact}}, @{$result->{interface}} ]); - $layer->support_interface_fills($interface_collection) if @{$interface_collection->paths} > 0; + my $interface_collection = Slic3r::ExtrusionPath::Collection->new(@{$result->{contact}}, @{$result->{interface}}); + $layer->support_interface_fills($interface_collection) if @$interface_collection > 0; - my $support_collection = Slic3r::ExtrusionPath::Collection->new(paths => $result->{support}); - $layer->support_fills($support_collection) if @{$support_collection->paths} > 0; + my $support_collection = Slic3r::ExtrusionPath::Collection->new(@{$result->{support}}); + $layer->support_fills($support_collection) if @$support_collection > 0; # TODO: use a Slic3r::ExPolygon::Collection $layer->support_islands($result->{islands});