Permalink
Browse files

Use bridge speed for first solid layer above sparse infill. Includes …

…unit test. #1792
  • Loading branch information...
1 parent 344a517 commit a344d68257f4333daec3658d09c0a6d353f7ed32 @alexrj committed Mar 1, 2014
Showing with 24 additions and 8 deletions.
  1. +1 −1 lib/Slic3r/GCode.pm
  2. +23 −7 t/shells.t
View
2 lib/Slic3r/GCode.pm
@@ -76,7 +76,7 @@ my %role_speeds = (
&EXTR_ROLE_SOLIDFILL => 'solid_infill',
&EXTR_ROLE_TOPSOLIDFILL => 'top_solid_infill',
&EXTR_ROLE_BRIDGE => 'bridge',
- &EXTR_ROLE_INTERNALBRIDGE => 'solid_infill',
+ &EXTR_ROLE_INTERNALBRIDGE => 'bridge',
&EXTR_ROLE_SKIRT => 'perimeter',
&EXTR_ROLE_GAPFILL => 'gap_fill',
);
View
30 t/shells.t
@@ -18,6 +18,7 @@ use Slic3r::Test;
$config->set('perimeters', 0);
$config->set('solid_infill_speed', 99);
$config->set('top_solid_infill_speed', 99);
+ $config->set('bridge_speed', 72);
$config->set('first_layer_speed', '100%');
$config->set('cooling', 0);
@@ -27,19 +28,25 @@ use Slic3r::Test;
my $print = Slic3r::Test::init_print('20mm_cube', config => $config);
- my %layers_with_shells = (); # Z => $count
+ my %z = (); # Z => 1
+ my %layers_with_solid_infill = (); # Z => $count
+ my %layers_with_bridge_infill = (); # Z => $count
Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub {
my ($self, $cmd, $args, $info) = @_;
if ($self->Z > 0) {
- $layers_with_shells{$self->Z} //= 0;
- $layers_with_shells{$self->Z} = 1
- if $info->{extruding}
- && $info->{dist_XY} > 0
- && ($args->{F} // $self->F) == $config->solid_infill_speed*60;
+ $z{ $self->Z } = 1;
+ if ($info->{extruding} && $info->{dist_XY} > 0) {
+ my $F = $args->{F} // $self->F;
+ $layers_with_solid_infill{$self->Z} = 1
+ if $F == $config->solid_infill_speed*60;
+ $layers_with_bridge_infill{$self->Z} = 1
+ if $F == $config->bridge_speed*60;
+ }
}
});
- my @shells = @layers_with_shells{sort { $a <=> $b } keys %layers_with_shells};
+ my @z = sort { $a <=> $b } keys %z;
+ my @shells = map $layers_with_solid_infill{$_} || $layers_with_bridge_infill{$_}, @z;
fail "insufficient number of bottom solid layers"
unless !defined(first { !$_ } @shells[0..$config->bottom_solid_layers-1]);
fail "excessive number of bottom solid layers"
@@ -48,9 +55,17 @@ use Slic3r::Test;
unless !defined(first { !$_ } @shells[-$config->top_solid_layers..-1]);
fail "excessive number of top solid layers"
unless scalar(grep $_, @shells[($#shells/2)..$#shells]) == $config->top_solid_layers;
+ if ($config->top_solid_layers > 0) {
+ fail "unexpected solid infill speed in first solid layer over sparse infill"
+ if $layers_with_solid_infill{ $z[-$config->top_solid_layers] };
+ die "bridge speed not used in first solid layer over sparse infill"
+ if !$layers_with_bridge_infill{ $z[-$config->top_solid_layers] };
+ }
1;
};
+ $config->set('top_solid_layers', 3);
+ $config->set('bottom_solid_layers', 3);
ok $test->(), "proper number of shells is applied";
$config->set('top_solid_layers', 0);
@@ -69,6 +84,7 @@ use Slic3r::Test;
$config->set('bottom_solid_layers', 0);
$config->set('top_solid_layers', 3);
$config->set('cooling', 0);
+ $config->set('bridge_speed', 99);
$config->set('solid_infill_speed', 99);
$config->set('top_solid_infill_speed', 99);
$config->set('first_layer_speed', '100%');

0 comments on commit a344d68

Please sign in to comment.