diff --git a/lib/Slic3r/GCode.pm b/lib/Slic3r/GCode.pm index f83f4ea5fe..d515573c24 100644 --- a/lib/Slic3r/GCode.pm +++ b/lib/Slic3r/GCode.pm @@ -141,7 +141,7 @@ sub extrude { } sub extrude_loop { - my ($self, $loop, $description) = @_; + my ($self, $loop, $description, $speed) = @_; # make a copy; don't modify the orientation of the original loop object otherwise # next copies (if any) would not detect the correct orientation @@ -199,10 +199,10 @@ sub extrude_loop { return '' if !@paths; # apply the small perimeter speed - my $speed = -1; if ($paths[0]->is_perimeter && $loop->length <= &Slic3r::SMALL_PERIMETER_LENGTH) { - $speed = $self->config->get_abs_value('small_perimeter_speed'); + $speed //= $self->config->get_abs_value('small_perimeter_speed'); } + $speed //= -1; # extrude along the path my $gcode = join '', map $self->extrude_path($_, $description, $speed), @paths; @@ -267,7 +267,7 @@ sub extrude_path { # set speed my $F; - if ($path->role == EXTR_ROLE_PERIMETER || $path->role == EXTR_ROLE_SKIRT) { + if ($path->role == EXTR_ROLE_PERIMETER) { $F = $self->config->get_abs_value('perimeter_speed'); } elsif ($path->role == EXTR_ROLE_EXTERNAL_PERIMETER) { $F = $self->config->get_abs_value('external_perimeter_speed'); diff --git a/lib/Slic3r/GCode/Layer.pm b/lib/Slic3r/GCode/Layer.pm index 659ddfe0a2..69cb7b45dd 100644 --- a/lib/Slic3r/GCode/Layer.pm +++ b/lib/Slic3r/GCode/Layer.pm @@ -96,7 +96,7 @@ sub process_layer { my $extruder_id = $extruder_ids[($i/@extruder_ids) % @extruder_ids]; $gcode .= $self->gcodegen->set_extruder($extruder_id) if $layer->id == 0; - $gcode .= $self->gcodegen->extrude_loop($skirt_loops[$i], 'skirt'); + $gcode .= $self->gcodegen->extrude_loop($skirt_loops[$i], 'skirt', $object->config->support_material_speed); } } $self->skirt_done->{$layer->print_z} = 1; @@ -107,7 +107,8 @@ sub process_layer { if (!$self->brim_done) { $gcode .= $self->gcodegen->set_extruder($self->print->objects->[0]->config->support_material_extruder-1); $self->gcodegen->set_shift(@{$self->shift}); - $gcode .= $self->gcodegen->extrude_loop($_, 'brim') for @{$self->print->brim}; + $gcode .= $self->gcodegen->extrude_loop($_, 'brim', $object->config->support_material_speed) + for @{$self->print->brim}; $self->brim_done(1); $self->gcodegen->straight_once(1); } diff --git a/t/skirt_brim.t b/t/skirt_brim.t index 8c616d98a5..b62c9a8bb1 100644 --- a/t/skirt_brim.t +++ b/t/skirt_brim.t @@ -16,7 +16,7 @@ use Slic3r::Test; $config->set('skirts', 1); $config->set('skirt_height', 2); $config->set('perimeters', 0); - $config->set('perimeter_speed', 99); + $config->set('support_material_speed', 99); $config->set('cooling', 0); # to prevent speeds to be altered $config->set('first_layer_speed', '100%'); # to prevent speeds to be altered @@ -33,7 +33,7 @@ use Slic3r::Test; if (defined $self->Z) { $layers_with_skirt{$self->Z} //= 0; $layers_with_skirt{$self->Z} = 1 - if $info->{extruding} && ($args->{F} // $self->F) == $config->perimeter_speed*60; + if $info->{extruding} && ($args->{F} // $self->F) == $config->support_material_speed*60; } }); fail "wrong number of layers with skirt" @@ -50,6 +50,7 @@ use Slic3r::Test; $config->set('top_solid_layers', 0); # to prevent solid shells and their speeds $config->set('bottom_solid_layers', 0); # to prevent solid shells and their speeds $config->set('brim_width', 5); + $config->set('support_material_speed', 99); $config->set('cooling', 0); # to prevent speeds to be altered $config->set('first_layer_speed', '100%'); # to prevent speeds to be altered