diff --git a/MANIFEST b/MANIFEST index 83d89ef251..45612a57bc 100644 --- a/MANIFEST +++ b/MANIFEST @@ -59,6 +59,7 @@ t/custom_gcode.t t/dynamic.t t/fill.t t/geometry.t +t/layers.t t/loops.t t/polyclip.t t/retraction.t diff --git a/t/layers.t b/t/layers.t new file mode 100644 index 0000000000..3d381788a9 --- /dev/null +++ b/t/layers.t @@ -0,0 +1,58 @@ +use Test::More tests => 4; +use strict; +use warnings; + +BEGIN { + use FindBin; + use lib "$FindBin::Bin/../lib"; +} + +use List::Util qw(first); +use Slic3r; +use Slic3r::Test qw(_eq); + +my $config = Slic3r::Config->new_from_defaults; + +my $test = sub { + my ($conf) = @_; + $conf ||= $config; + + my $print = Slic3r::Test::init_print('20mm_cube', config => $conf); + + my @z = (); + my @increments = (); + Slic3r::Test::GCodeReader->new(gcode => Slic3r::Test::gcode($print))->parse(sub { + my ($self, $cmd, $args, $info) = @_; + + if ($info->{dist_Z}) { + push @z, 1*$args->{Z}; + push @increments, $info->{dist_Z}; + } + }); + + fail 'wrong first layer height' + if $z[0] ne $config->get_value('first_layer_height') + $config->z_offset; + + fail 'wrong second layer height' + if $z[1] ne $config->get_value('first_layer_height') + $config->get_value('layer_height') + $config->z_offset; + + fail 'wrong layer height' + if first { !_eq($_, $config->layer_height) } @increments[1..$#increments]; + + 1; +}; + +$config->set('layer_height', 0.3); +$config->set('first_layer_height', 0.2); +ok $test->(), "absolute first layer height"; + +$config->set('first_layer_height', '60%'); +ok $test->(), "relative first layer height"; + +$config->set('z_offset', 0.9); +ok $test->(), "positive Z offset"; + +$config->set('z_offset', -0.8); +ok $test->(), "negative Z offset"; + +__END__