mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Do perimeters one island at time instead of doing all holes before all contours
This commit is contained in:
		
							parent
							
								
									dc049dfa1e
								
							
						
					
					
						commit
						97c65bac90
					
				
					 1 changed files with 15 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -242,7 +242,21 @@ sub make_perimeters {
 | 
			
		|||
        )};
 | 
			
		||||
        
 | 
			
		||||
        my @loops = ();
 | 
			
		||||
        
 | 
			
		||||
        foreach my $polynode (@nodes) {
 | 
			
		||||
            # if this is an external contour find all holes belonging to this contour(s)
 | 
			
		||||
            # and prepend them
 | 
			
		||||
            if ($is_contour && $depth == 0) {
 | 
			
		||||
                # $polynode is the outermost loop of an island
 | 
			
		||||
                my @holes = ();
 | 
			
		||||
                for (my $i = 0; $i <= $#$holes_pt; $i++) {
 | 
			
		||||
                    if ($polynode->{outer}->encloses_point($holes_pt->[$i]{outer}->first_point)) {
 | 
			
		||||
                        push @holes, splice @$holes_pt, $i, 1;  # remove from candidates to reduce complexity
 | 
			
		||||
                        $i--;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                push @loops, reverse map $traverse->([$_], 0), @holes;
 | 
			
		||||
            }
 | 
			
		||||
            push @loops, $traverse->($polynode->{children}, $depth+1, $is_contour);
 | 
			
		||||
            
 | 
			
		||||
            # return ccw contours and cw holes
 | 
			
		||||
| 
						 | 
				
			
			@ -272,10 +286,7 @@ sub make_perimeters {
 | 
			
		|||
    };
 | 
			
		||||
    
 | 
			
		||||
    # order loops from inner to outer (in terms of object slices)
 | 
			
		||||
    my @loops = (
 | 
			
		||||
        (reverse $traverse->($holes_pt, 0)),
 | 
			
		||||
        $traverse->($contours_pt, 0, 1),
 | 
			
		||||
    );
 | 
			
		||||
    my @loops = $traverse->($contours_pt, 0, 1);
 | 
			
		||||
    
 | 
			
		||||
    # if brim will be printed, reverse the order of perimeters so that
 | 
			
		||||
    # we continue inwards after having finished the brim
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue