Give priority to infill extruder if it was used last. #940
This commit is contained in:
parent
107f48d894
commit
ab3d1ac820
1 changed files with 15 additions and 6 deletions
|
@ -851,7 +851,7 @@ sub write_gcode {
|
||||||
if ($gcodegen->multiple_extruders) {
|
if ($gcodegen->multiple_extruders) {
|
||||||
my $last_extruder = $gcodegen->extruder;
|
my $last_extruder = $gcodegen->extruder;
|
||||||
my $best_region_id = first { $self->regions->[$_]->extruders->{perimeter} eq $last_extruder } @region_ids;
|
my $best_region_id = first { $self->regions->[$_]->extruders->{perimeter} eq $last_extruder } @region_ids;
|
||||||
@region_ids = ($best_region_id, grep $_ != $best_region_id, @region_ids);
|
@region_ids = ($best_region_id, grep $_ != $best_region_id, @region_ids) if $best_region_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $region_id (@region_ids) {
|
foreach my $region_id (@region_ids) {
|
||||||
|
@ -889,14 +889,14 @@ sub write_gcode {
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $island (@islands) {
|
foreach my $island (@islands) {
|
||||||
# extrude perimeters
|
my $extrude_perimeters = sub {
|
||||||
if (@{ $island->{perimeters} }) {
|
next if !@{ $island->{perimeters} };
|
||||||
$gcode .= $gcodegen->set_extruder($region->extruders->{perimeter});
|
$gcode .= $gcodegen->set_extruder($region->extruders->{perimeter});
|
||||||
$gcode .= $gcodegen->extrude($_, 'perimeter') for @{ $island->{perimeters} };
|
$gcode .= $gcodegen->extrude($_, 'perimeter') for @{ $island->{perimeters} };
|
||||||
}
|
};
|
||||||
|
|
||||||
# extrude fills
|
my $extrude_fills = sub {
|
||||||
if (@{ $island->{fills} }) {
|
next if !@{ $island->{fills} };
|
||||||
$gcode .= $gcodegen->set_extruder($region->extruders->{infill});
|
$gcode .= $gcodegen->set_extruder($region->extruders->{infill});
|
||||||
for my $fill (@{ $island->{fills} }) {
|
for my $fill (@{ $island->{fills} }) {
|
||||||
if ($fill->isa('Slic3r::ExtrusionPath::Collection')) {
|
if ($fill->isa('Slic3r::ExtrusionPath::Collection')) {
|
||||||
|
@ -906,6 +906,15 @@ sub write_gcode {
|
||||||
$gcode .= $gcodegen->extrude($fill, 'fill') ;
|
$gcode .= $gcodegen->extrude($fill, 'fill') ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
# give priority to infill if we were already using its extruder
|
||||||
|
if ($gcodegen->multiple_extruders && $region->extruders->{infill} eq $gcodegen->extruder) {
|
||||||
|
$extrude_fills->();
|
||||||
|
$extrude_perimeters->();
|
||||||
|
} else {
|
||||||
|
$extrude_perimeters->();
|
||||||
|
$extrude_fills->();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue