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:
authorAlessandro Ranellucci <aar@cpan.org>2013-07-26 22:17:33 +0400
committerAlessandro Ranellucci <aar@cpan.org>2013-07-26 22:17:33 +0400
commit6bd480361278144c7aff28baa8ddf46721405932 (patch)
tree227cc8ed8419fadc9c1cf6cbb0e4cde5bcca925c
parent0a8872ca6ccac7ce61be31b03b723a4dab8fa65d (diff)
Failing test case about spurious infill in hollow objects, caused by shells being correctly generated even for hollow objects - however sometimes we don't want that
-rw-r--r--lib/Slic3r/Print/Object.pm2
-rw-r--r--lib/Slic3r/Test.pm1
-rw-r--r--lib/Slic3r/TriangleMesh.pm10
-rw-r--r--t/shells.t22
4 files changed, 33 insertions, 2 deletions
diff --git a/lib/Slic3r/Print/Object.pm b/lib/Slic3r/Print/Object.pm
index 1c21206d0..6ab3b40de 100644
--- a/lib/Slic3r/Print/Object.pm
+++ b/lib/Slic3r/Print/Object.pm
@@ -616,7 +616,7 @@ sub discover_horizontal_shells {
my $margin = 3 * $layerm->solid_infill_flow->scaled_width; # require at least this size
my $too_narrow = diff_ex(
[ map @$_, @$new_internal_solid ],
- [ offset([ offset([ map @$_, @$new_internal_solid ], -$margin) ], +$margin) ],
+ [ offset2([ map @$_, @$new_internal_solid ], -$margin, +$margin) ],
1,
);
diff --git a/lib/Slic3r/Test.pm b/lib/Slic3r/Test.pm
index b7a1972fd..29859b264 100644
--- a/lib/Slic3r/Test.pm
+++ b/lib/Slic3r/Test.pm
@@ -63,6 +63,7 @@ sub model {
vertices => $vertices,
facets => $facets,
);
+ $mesh->scale_xyz($params{scale_xyz}) if $params{scale_xyz};
$mesh->scale($params{scale}) if $params{scale};
my $model = Slic3r::Model->new;
diff --git a/lib/Slic3r/TriangleMesh.pm b/lib/Slic3r/TriangleMesh.pm
index be43be1de..d6d5dc919 100644
--- a/lib/Slic3r/TriangleMesh.pm
+++ b/lib/Slic3r/TriangleMesh.pm
@@ -301,6 +301,16 @@ sub scale {
}
}
+sub scale_xyz {
+ my $self = shift;
+ my ($versor) = @_;
+
+ # transform vertex coordinates
+ foreach my $vertex (@{$self->vertices}) {
+ $vertex->[$_] *= $versor->[$_] for X,Y,Z;
+ }
+}
+
sub move {
my $self = shift;
my (@shift) = @_;
diff --git a/t/shells.t b/t/shells.t
index 56a3ca595..4867dbab6 100644
--- a/t/shells.t
+++ b/t/shells.t
@@ -1,4 +1,4 @@
-use Test::More tests => 3;
+use Test::More tests => 4;
use strict;
use warnings;
@@ -68,4 +68,24 @@ use Slic3r::Test;
"correct number of top solid shells is generated in V-shaped object";
}
+{
+ my $config = Slic3r::Config->new_from_defaults;
+ $config->set('perimeters', 0);
+ $config->set('fill_density', 0);
+ $config->set('cooling', 0); # prevent speed alteration
+ $config->set('first_layer_speed', '100%'); # prevent speed alteration
+ $config->set('extrusion_width', 0.2);
+ $config->set('bottom_solid_layers', 3);
+ $config->set('top_solid_layers', 0);
+
+ my $print = Slic3r::Test::init_print('V', scale_xyz => [2,1,1], config => $config);
+ my %layers = (); # Z => 1
+ Slic3r::GCode::Reader->new(gcode => Slic3r::Test::gcode($print))->parse(sub {
+ my ($self, $cmd, $args, $info) = @_;
+ $layers{$self->Z} = 1 if $info->{extruding};
+ });
+ is scalar(keys %layers), 3,
+ "shells are not extended into void if fill density is 0";
+}
+
__END__