mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Prevent superfluous extra perimeters added when a region has an acute angle
This commit is contained in:
		
							parent
							
								
									06fc1d1044
								
							
						
					
					
						commit
						ea0e136b45
					
				
					 3 changed files with 41 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
use Test::More tests => 5;
 | 
			
		||||
use Test::More tests => 6;
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -139,4 +139,33 @@ use Slic3r::Test;
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    my $config = Slic3r::Config->new_from_defaults;
 | 
			
		||||
    $config->set('skirts', 0);
 | 
			
		||||
    $config->set('perimeters', 3);
 | 
			
		||||
    $config->set('layer_height', 0.4);
 | 
			
		||||
    $config->set('first_layer_height', 0.35);
 | 
			
		||||
    $config->set('extra_perimeters', 1);
 | 
			
		||||
    $config->set('cooling', 0);                     # to prevent speeds from being altered
 | 
			
		||||
    $config->set('first_layer_speed', '100%');      # to prevent speeds from being altered
 | 
			
		||||
    $config->set('perimeter_speed', 99);
 | 
			
		||||
    $config->set('external_perimeter_speed', 99);
 | 
			
		||||
    $config->set('small_perimeter_speed', 99);
 | 
			
		||||
    
 | 
			
		||||
    my $print = Slic3r::Test::init_print('ipadstand', config => $config);
 | 
			
		||||
    my %perimeters = ();  # z => number of loops
 | 
			
		||||
    my $in_loop = 0;
 | 
			
		||||
    Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub {
 | 
			
		||||
        my ($self, $cmd, $args, $info) = @_;
 | 
			
		||||
        
 | 
			
		||||
        if ($info->{extruding} && $info->{dist_XY} > 0 && ($args->{F} // $self->F) == $config->perimeter_speed*60) {
 | 
			
		||||
            $perimeters{$self->Z}++ if !$in_loop;
 | 
			
		||||
            $in_loop = 1;
 | 
			
		||||
        } else {
 | 
			
		||||
            $in_loop = 0;
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    ok !(grep { $_ % $config->perimeters } values %perimeters), 'no superfluous extra perimeters';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue