From aae9625a13eac2e7a1166133b666c6cf2980cc33 Mon Sep 17 00:00:00 2001
From: Alessandro Ranellucci <aar@cpan.org>
Date: Tue, 26 Mar 2013 15:47:40 +0100
Subject: [PATCH] Bugfix: solid-infill-below-area wasn't ignored when
 fill_density = 0, causing solid layers here and there. #1049

---
 lib/Slic3r/Layer/Region.pm |  2 +-
 t/fill.t                   | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/lib/Slic3r/Layer/Region.pm b/lib/Slic3r/Layer/Region.pm
index c6f10e872..6aec785ae 100644
--- a/lib/Slic3r/Layer/Region.pm
+++ b/lib/Slic3r/Layer/Region.pm
@@ -462,7 +462,7 @@ sub prepare_fill_surfaces {
     }
         
     # turn too small internal regions into solid regions according to the user setting
-    {
+    if ($Slic3r::Config->fill_density > 0) {
         my $min_area = scale scale $Slic3r::Config->solid_infill_below_area; # scaling an area requires two calls!
         my @small = grep $_->surface_type == S_TYPE_INTERNAL && $_->expolygon->contour->area <= $min_area, @{$self->fill_surfaces};
         $_->surface_type(S_TYPE_INTERNALSOLID) for @small;
diff --git a/t/fill.t b/t/fill.t
index b5ebd5dcf..cbffd7dab 100644
--- a/t/fill.t
+++ b/t/fill.t
@@ -95,4 +95,22 @@ sub scale_points (@) { map [scale $_->[X], scale $_->[Y]], @_ }
     ok Slic3r::Test::gcode($print), 'successful hilbertcurve infill generation';
 }
 
+{
+    my $config = Slic3r::Config->new_from_defaults;
+    $config->set('skirts', 0);
+    $config->set('perimeters', 0);
+    $config->set('fill_density', 0);
+    $config->set('top_solid_layers', 0);
+    $config->set('bottom_solid_layers', 0);
+    $config->set('solid_infill_below_area', 20000000);
+    
+    my $print = Slic3r::Test::init_print('20mm_cube', config => $config);
+    Slic3r::Test::GCodeReader->new(gcode => Slic3r::Test::gcode($print))->parse(sub {
+        my ($self, $cmd, $args, $info) = @_;
+        
+        fail "solid_infill_below_area should be ignored when fill_density is 0"
+            if $info->{extruding};
+    });
+}
+
 __END__