~ubuntu-branches/ubuntu/utopic/slic3r/utopic

« back to all changes in this revision

Viewing changes to t/dynamic.t

  • Committer: Package Import Robot
  • Author(s): Chow Loong Jin
  • Date: 2014-06-17 01:27:26 UTC
  • Revision ID: package-import@ubuntu.com-20140617012726-2wrs4zdo251nr4vg
Tags: upstream-1.1.4+dfsg
ImportĀ upstreamĀ versionĀ 1.1.4+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
use Test::More;
 
2
use strict;
 
3
use warnings;
 
4
 
 
5
plan skip_all => 'variable-width paths are currently disabled';
 
6
plan tests => 20;
 
7
 
 
8
BEGIN {
 
9
    use FindBin;
 
10
    use lib "$FindBin::Bin/../lib";
 
11
}
 
12
 
 
13
use List::Util qw(first);
 
14
use Slic3r;
 
15
use Slic3r::Geometry qw(X Y scale epsilon);
 
16
use Slic3r::Surface ':types';
 
17
 
 
18
sub scale_points (@) { map [scale $_->[X], scale $_->[Y]], @_ }
 
19
 
 
20
{
 
21
    my $square = Slic3r::ExPolygon->new([
 
22
        scale_points [0,0], [10,0], [10,10], [0,10],
 
23
    ]);
 
24
    
 
25
    my @offsets = @{$square->noncollapsing_offset_ex(- scale 5)};
 
26
    is scalar @offsets, 1, 'non-collapsing offset';
 
27
}
 
28
 
 
29
{
 
30
    local $Slic3r::Config = Slic3r::Config->new(
 
31
        perimeters      => 3,
 
32
    );
 
33
    my $w = 0.7;
 
34
    my $perimeter_flow = Slic3r::Flow->new(
 
35
        nozzle_diameter => 0.5,
 
36
        layer_height    => 0.4,
 
37
        width           => $w,
 
38
    );
 
39
    
 
40
    my $print = Slic3r::Print->new;
 
41
    my $region = Slic3r::Print::Region->new(
 
42
        print => $print,
 
43
        flows => { perimeter => $perimeter_flow },
 
44
    );
 
45
    push @{$print->regions}, $region;
 
46
    my $object = Slic3r::Print::Object->new(
 
47
        print => $print,
 
48
        size  => [1,1],
 
49
    );
 
50
    my $make_layer = sub {
 
51
        my ($width) = @_;
 
52
        my $layer = Slic3r::Layer->new(
 
53
            object => $object,
 
54
            id => 1,
 
55
            slices => [
 
56
                Slic3r::Surface->new(
 
57
                    surface_type    => S_TYPE_INTERNAL,
 
58
                    expolygon       => Slic3r::ExPolygon->new([ scale_points [0,0], [50,0], [50,$width], [0,$width] ]),
 
59
                ),
 
60
            ],
 
61
            thin_walls => [],
 
62
        );
 
63
        my $layerm = $layer->region(0);
 
64
        $layer->make_perimeters;
 
65
        return $layerm;
 
66
    };
 
67
    
 
68
    my %widths = (
 
69
        1   * $w => { perimeters => 1, gaps => 0 },
 
70
        1.3 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $perimeter_flow->clone(width => 0.2 * $w)->spacing },
 
71
        1.5 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $perimeter_flow->clone(width => 0.5 * $w)->spacing },
 
72
        2   * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $perimeter_flow->spacing },
 
73
        2.5 * $w => { perimeters => 1, gaps => 1, gap_flow_spacing => $perimeter_flow->clone(width => 1.5 * $w)->spacing },
 
74
        3   * $w => { perimeters => 2, gaps => 0 },
 
75
        4   * $w => { perimeters => 2, gaps => 1, gap_flow_spacing => $perimeter_flow->spacing },
 
76
    );
 
77
    
 
78
    foreach my $width (sort keys %widths) {
 
79
        my $layerm = $make_layer->($width);
 
80
        is scalar @{$layerm->perimeters}, $widths{$width}{perimeters}, 'right number of perimeters';
 
81
        is scalar @{$layerm->thin_fills} ? 1 : 0, $widths{$width}{gaps},
 
82
            ($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
 
83
        
 
84
        my @gaps = map $_, @{$layerm->thin_fills};
 
85
        if (@gaps) {
 
86
            ok +(!first { abs($_->flow_spacing - $widths{$width}{gap_flow_spacing}) > epsilon } @gaps),
 
87
                'flow spacing was dynamically adjusted';
 
88
        }
 
89
    }
 
90
}
 
91
 
 
92
__END__