mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	New traverse_pt()
This commit is contained in:
		
							parent
							
								
									7953dcfb12
								
							
						
					
					
						commit
						6e216e2fd9
					
				
					 2 changed files with 25 additions and 27 deletions
				
			
		|  | @ -6,9 +6,9 @@ use File::Spec; | |||
| use List::Util qw(max first); | ||||
| use Math::ConvexHull::MonotoneChain qw(convex_hull); | ||||
| use Slic3r::ExtrusionPath ':roles'; | ||||
| use Slic3r::Geometry qw(X Y Z X1 Y1 X2 Y2 MIN PI scale unscale move_points nearest_point chained_path_items); | ||||
| use Slic3r::Geometry qw(X Y Z X1 Y1 X2 Y2 MIN PI scale unscale move_points nearest_point); | ||||
| use Slic3r::Geometry::Clipper qw(diff_ex union_ex union_pt intersection_ex offset | ||||
|     offset2 JT_ROUND JT_SQUARE PFT_EVENODD); | ||||
|     offset2 traverse_pt JT_ROUND JT_SQUARE PFT_EVENODD); | ||||
| use Time::HiRes qw(gettimeofday tv_interval); | ||||
| 
 | ||||
| has 'config'                 => (is => 'rw', default => sub { Slic3r::Config->new_from_defaults }, trigger => 1); | ||||
|  | @ -683,30 +683,11 @@ sub make_brim { | |||
|         push @loops, offset2(\@islands, ($i - 2) * $flow->scaled_spacing, ($i + 1.5) * $flow->scaled_spacing, undef, JT_SQUARE); | ||||
|     } | ||||
|      | ||||
|     # prepare a subroutine to traverse the tree and return inner perimeters first | ||||
|     my $traverse; | ||||
|     $traverse = sub { | ||||
|         my ($loops) = @_; | ||||
|          | ||||
|         # use a nearest neighbor search to order these children | ||||
|         # TODO: supply second argument to chained_path_items() too? | ||||
|         @$loops = @{chained_path_items( | ||||
|             [ map [ ($_->{outer} ? $_->{outer}[0] : $_->{hole}[0]), $_ ], @$loops ], | ||||
|         )}; | ||||
|          | ||||
|         my @polygons = (); | ||||
|         foreach my $loop (@$loops) { | ||||
|             push @polygons, $traverse->($loop->{children}); | ||||
|             push @polygons, Slic3r::ExtrusionLoop->pack( | ||||
|                 polygon         => Slic3r::Polygon->new($loop->{outer} // [ reverse @{$loop->{hole}} ]), | ||||
|                 role            => EXTR_ROLE_SKIRT, | ||||
|                 flow_spacing    => $flow->spacing, | ||||
|             ); | ||||
|         } | ||||
|         return @polygons; | ||||
|     }; | ||||
|      | ||||
|     @{$self->brim} = reverse $traverse->( union_pt(\@loops, PFT_EVENODD) ); | ||||
|     @{$self->brim} = map Slic3r::ExtrusionLoop->pack( | ||||
|         polygon         => Slic3r::Polygon->new($_), | ||||
|         role            => EXTR_ROLE_SKIRT, | ||||
|         flow_spacing    => $flow->spacing, | ||||
|     ), reverse traverse_pt( union_pt(\@loops, PFT_EVENODD) ); | ||||
| } | ||||
| 
 | ||||
| sub write_gcode { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci