mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-13 17:58:03 -06:00
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:
parent
58ffaca2df
commit
0ddcefe956
3 changed files with 10 additions and 8 deletions
|
@ -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');
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue