Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Sheldrake <boards@sheldrake.net>2013-02-16 18:12:18 +0400
committerMike Sheldrake <boards@sheldrake.net>2013-02-16 18:51:24 +0400
commitf46226b32fa860fced3952640abf157cd6642d20 (patch)
treeb995954623521b8d137e0a85d10ce056c85ff0f6 /t/combineinfill.t
parentc9b506fa02bf037126e8e47e69b476c554ad2b70 (diff)
regression test for combined infill #834
Guards against issue of slightly off-vertical walls triggering extra infill on layers that should be empty when combining infill.
Diffstat (limited to 't/combineinfill.t')
-rw-r--r--t/combineinfill.t71
1 files changed, 71 insertions, 0 deletions
diff --git a/t/combineinfill.t b/t/combineinfill.t
new file mode 100644
index 000000000..8c1ba9e77
--- /dev/null
+++ b/t/combineinfill.t
@@ -0,0 +1,71 @@
+use Test::More tests => 3;
+use strict;
+use warnings;
+
+BEGIN {
+ use FindBin;
+ use lib "$FindBin::Bin/../lib";
+}
+
+use List::Util qw(first);
+use Slic3r;
+use Slic3r::Test;
+
+{
+ my $config = Slic3r::Config->new_from_defaults;
+ $config->set('skirts', 0);
+ $config->set('solid_layers', 0);
+ $config->set('bottom_solid_layers', 0);
+ $config->set('top_solid_layers', 0);
+ $config->set('infill_every_layers', 6);
+ $config->set('layer_height', 0.06);
+
+ my $test = sub {
+ my ($shift) = @_;
+
+ my $self = Slic3r::Test::init_print('20mm_cube', config => $config);
+
+ $shift /= &Slic3r::SCALING_FACTOR;
+
+ # Put a slope on the box's sides by shifting x and y coords by $tilt * (z / boxheight).
+ # The test here is to put such a slight slope on the walls that it should
+ # not trigger any extra fill on fill layers that should be empty when
+ # combine infill is enabled.
+ $_->[0] += $shift * ($_->[2] / (20 / &Slic3r::SCALING_FACTOR)), for @{$self->objects->[0]->meshes->[0]->vertices};
+ $_->[1] += $shift * ($_->[2] / (20 / &Slic3r::SCALING_FACTOR)), for @{$self->objects->[0]->meshes->[0]->vertices};
+
+ # copy of Print::export_gcode() up to the point
+ # after fill surfaces are combined
+ $self->init_extruders;
+ $_->slice(keep_meshes => 1) for @{$self->objects};
+ $_->make_perimeters for @{$self->objects};
+ foreach my $layer (map @{$_->layers}, @{$self->objects}) {
+ $_->simplify(&Slic3r::SCALED_RESOLUTION)
+ for @{$layer->slices}, (map $_->expolygon, map @{$_->slices}, @{$layer->regions});
+ }
+ $_->detect_surfaces_type for @{$self->objects};
+ $_->prepare_fill_surfaces for map @{$_->regions}, map @{$_->layers}, @{$self->objects};
+ $_->process_bridges for map @{$_->regions}, map @{$_->layers}, @{$self->objects};
+ $_->discover_horizontal_shells for @{$self->objects};
+ $_->combine_infill for @{$self->objects};
+
+ # Only layers with id % 6 == 0 should have fill.
+ my $spurious_infill = 0;
+ foreach my $layer (map @{$_->layers}, @{$self->objects}) {
+ ++$spurious_infill if ($layer->id % 6 && grep @{$_->fill_surfaces} > 0, @{$layer->regions});
+ }
+
+ $spurious_infill -= scalar(@{$self->objects->[0]->layers} - 1) % 6;
+
+ fail "spurious fill surfaces found on layers that should have none (walls " . sprintf("%.4f", Slic3r::Geometry::rad2deg(atan2($shift, 20/&Slic3r::SCALING_FACTOR))) . " degrees off vertical)"
+ unless $spurious_infill == 0;
+ 1;
+ };
+
+ # Test with mm skew offsets for the top of the 20mm-high box
+ for my $shift (0, 0.0001, 1) {
+ ok $test->($shift), "no spurious fill surfaces with box walls " . sprintf("%.4f",Slic3r::Geometry::rad2deg(atan2($shift, 20))) . " degrees off of vertical";
+ }
+}
+
+__END__