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

master
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 {
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');

View File

@ -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);
}

View File

@ -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