mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Fixed --avoid-crossing-perimeters and --support-material after the xsdata merge
This commit is contained in:
		
							parent
							
								
									a49dc603cc
								
							
						
					
					
						commit
						67aefdccc7
					
				
					 4 changed files with 24 additions and 24 deletions
				
			
		|  | @ -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: | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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}) { | ||||
|  |  | |||
|  | @ -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}); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci