mirror of https://github.com/vitalif/Slic3r
Use support material speed for skirt and brim instead of perimeter speed so that perimeter speed can be set on a per-region basis
parent
58ffaca2df
commit
0ddcefe956
|
@ -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');
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue