Browse Source

Use support material speed for skirt and brim instead of perimeter speed so that perimeter speed can be set on a per-region basis

Alessandro Ranellucci 10 years ago
parent
commit
0ddcefe956
3 changed files with 10 additions and 8 deletions
  1. 4 4
      lib/Slic3r/GCode.pm
  2. 3 2
      lib/Slic3r/GCode/Layer.pm
  3. 3 2
      t/skirt_brim.t

+ 4 - 4
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');

+ 3 - 2
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);
     }

+ 3 - 2
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