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

This commit is contained in:
Alessandro Ranellucci 2014-05-18 17:02:18 +02:00
parent 58ffaca2df
commit 0ddcefe956
3 changed files with 10 additions and 8 deletions

View file

@ -141,7 +141,7 @@ sub extrude {
} }
sub extrude_loop { 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 # make a copy; don't modify the orientation of the original loop object otherwise
# next copies (if any) would not detect the correct orientation # next copies (if any) would not detect the correct orientation
@ -199,10 +199,10 @@ sub extrude_loop {
return '' if !@paths; return '' if !@paths;
# apply the small perimeter speed # apply the small perimeter speed
my $speed = -1;
if ($paths[0]->is_perimeter && $loop->length <= &Slic3r::SMALL_PERIMETER_LENGTH) { 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 # extrude along the path
my $gcode = join '', map $self->extrude_path($_, $description, $speed), @paths; my $gcode = join '', map $self->extrude_path($_, $description, $speed), @paths;
@ -267,7 +267,7 @@ sub extrude_path {
# set speed # set speed
my $F; 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'); $F = $self->config->get_abs_value('perimeter_speed');
} elsif ($path->role == EXTR_ROLE_EXTERNAL_PERIMETER) { } elsif ($path->role == EXTR_ROLE_EXTERNAL_PERIMETER) {
$F = $self->config->get_abs_value('external_perimeter_speed'); $F = $self->config->get_abs_value('external_perimeter_speed');

View file

@ -96,7 +96,7 @@ sub process_layer {
my $extruder_id = $extruder_ids[($i/@extruder_ids) % @extruder_ids]; my $extruder_id = $extruder_ids[($i/@extruder_ids) % @extruder_ids];
$gcode .= $self->gcodegen->set_extruder($extruder_id) $gcode .= $self->gcodegen->set_extruder($extruder_id)
if $layer->id == 0; 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; $self->skirt_done->{$layer->print_z} = 1;
@ -107,7 +107,8 @@ sub process_layer {
if (!$self->brim_done) { if (!$self->brim_done) {
$gcode .= $self->gcodegen->set_extruder($self->print->objects->[0]->config->support_material_extruder-1); $gcode .= $self->gcodegen->set_extruder($self->print->objects->[0]->config->support_material_extruder-1);
$self->gcodegen->set_shift(@{$self->shift}); $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->brim_done(1);
$self->gcodegen->straight_once(1); $self->gcodegen->straight_once(1);
} }

View file

@ -16,7 +16,7 @@ use Slic3r::Test;
$config->set('skirts', 1); $config->set('skirts', 1);
$config->set('skirt_height', 2); $config->set('skirt_height', 2);
$config->set('perimeters', 0); $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('cooling', 0); # to prevent speeds to be altered
$config->set('first_layer_speed', '100%'); # 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) { if (defined $self->Z) {
$layers_with_skirt{$self->Z} //= 0; $layers_with_skirt{$self->Z} //= 0;
$layers_with_skirt{$self->Z} = 1 $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" 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('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('bottom_solid_layers', 0); # to prevent solid shells and their speeds
$config->set('brim_width', 5); $config->set('brim_width', 5);
$config->set('support_material_speed', 99);
$config->set('cooling', 0); # to prevent speeds to be altered $config->set('cooling', 0); # to prevent speeds to be altered
$config->set('first_layer_speed', '100%'); # to prevent speeds to be altered $config->set('first_layer_speed', '100%'); # to prevent speeds to be altered