mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Update t/dynamic.t
This commit is contained in:
		
							parent
							
								
									b0f24a2666
								
							
						
					
					
						commit
						f9e20db156
					
				
					 2 changed files with 28 additions and 15 deletions
				
			
		
							
								
								
									
										41
									
								
								t/dynamic.t
									
										
									
									
									
								
							
							
						
						
									
										41
									
								
								t/dynamic.t
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -2,6 +2,7 @@ use Test::More;
 | 
			
		|||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
 | 
			
		||||
plan skip_all => 'variable-width paths are currently disabled';
 | 
			
		||||
plan tests => 20;
 | 
			
		||||
 | 
			
		||||
BEGIN {
 | 
			
		||||
| 
						 | 
				
			
			@ -26,19 +27,30 @@ sub scale_points (@) { map [scale $_->[X], scale $_->[Y]], @_ }
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    local $Slic3r::Config = Slic3r::Config->new(
 | 
			
		||||
        perimeters      => 3,
 | 
			
		||||
    );
 | 
			
		||||
    my $w = 0.7;
 | 
			
		||||
    local $Slic3r::perimeter_flow = Slic3r::Flow->new(
 | 
			
		||||
    my $perimeter_flow = Slic3r::Flow->new(
 | 
			
		||||
        nozzle_diameter => 0.5,
 | 
			
		||||
        layer_height    => 0.4,
 | 
			
		||||
        width           => $w,
 | 
			
		||||
    );
 | 
			
		||||
    local $Slic3r::Config = Slic3r::Config->new(
 | 
			
		||||
        perimeters      => 3,
 | 
			
		||||
    );
 | 
			
		||||
    
 | 
			
		||||
    my $print = Slic3r::Print->new;
 | 
			
		||||
    my $region = Slic3r::Print::Region->new(
 | 
			
		||||
        print => $print,
 | 
			
		||||
        flows => { perimeter => $perimeter_flow },
 | 
			
		||||
    );
 | 
			
		||||
    push @{$print->regions}, $region;
 | 
			
		||||
    my $object = Slic3r::Print::Object->new(
 | 
			
		||||
        print => $print,
 | 
			
		||||
        size  => [1,1],
 | 
			
		||||
    );
 | 
			
		||||
    my $make_layer = sub {
 | 
			
		||||
        my ($width) = @_;
 | 
			
		||||
        my $layer = Slic3r::Layer->new(
 | 
			
		||||
            object => $object,
 | 
			
		||||
            id => 1,
 | 
			
		||||
            slices => [
 | 
			
		||||
                Slic3r::Surface->new(
 | 
			
		||||
| 
						 | 
				
			
			@ -48,27 +60,28 @@ sub scale_points (@) { map [scale $_->[X], scale $_->[Y]], @_ }
 | 
			
		|||
            ],
 | 
			
		||||
            thin_walls => [],
 | 
			
		||||
        );
 | 
			
		||||
        my $layerm = $layer->region(0);
 | 
			
		||||
        $layer->make_perimeters;
 | 
			
		||||
        return $layer;
 | 
			
		||||
        return $layerm;
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    my %widths = (
 | 
			
		||||
        1   * $w => { perimeters => 1, gaps => 0 },
 | 
			
		||||
        1.3 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $Slic3r::perimeter_flow->clone(width => 0.2 * $w)->spacing },
 | 
			
		||||
        1.5 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $Slic3r::perimeter_flow->clone(width => 0.5 * $w)->spacing },
 | 
			
		||||
        2   * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $Slic3r::perimeter_flow->spacing },
 | 
			
		||||
        2.5 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $Slic3r::perimeter_flow->clone(width => 1.5 * $w)->spacing },
 | 
			
		||||
        1.3 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $perimeter_flow->clone(width => 0.2 * $w)->spacing },
 | 
			
		||||
        1.5 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $perimeter_flow->clone(width => 0.5 * $w)->spacing },
 | 
			
		||||
        2   * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $perimeter_flow->spacing },
 | 
			
		||||
        2.5 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $perimeter_flow->clone(width => 1.5 * $w)->spacing },
 | 
			
		||||
        3   * $w => { perimeters => 2, gaps => 0 },
 | 
			
		||||
        4   * $w => { perimeters => 2, gaps => 1, gap_flow_spacing => $Slic3r::perimeter_flow->spacing },
 | 
			
		||||
        4   * $w => { perimeters => 2, gaps => 1, gap_flow_spacing => $perimeter_flow->spacing },
 | 
			
		||||
    );
 | 
			
		||||
    
 | 
			
		||||
    foreach my $width (sort keys %widths) {
 | 
			
		||||
        my $layer = $make_layer->($width);
 | 
			
		||||
        is scalar @{$layer->perimeters}, $widths{$width}{perimeters}, 'right number of perimeters';
 | 
			
		||||
        is scalar @{$layer->thin_fills} ? 1 : 0, $widths{$width}{gaps},
 | 
			
		||||
        my $layerm = $make_layer->($width);
 | 
			
		||||
        is scalar @{$layerm->perimeters}, $widths{$width}{perimeters}, 'right number of perimeters';
 | 
			
		||||
        is scalar @{$layerm->thin_fills} ? 1 : 0, $widths{$width}{gaps},
 | 
			
		||||
            ($widths{$width}{gaps} ? 'gaps were filled' : 'no gaps detected');  # TODO: we should check the exact number of gaps, but we need a better medial axis algorithm
 | 
			
		||||
        
 | 
			
		||||
        my @gaps = map $_->unpack, @{$layer->thin_fills};
 | 
			
		||||
        my @gaps = map $_->unpack, @{$layerm->thin_fills};
 | 
			
		||||
        if (@gaps) {
 | 
			
		||||
            ok +(!first { abs($_->flow_spacing - $widths{$width}{gap_flow_spacing}) > epsilon } @gaps),
 | 
			
		||||
                'flow spacing was dynamically adjusted';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue