New separate options for retraction length to be used when switching tools

This commit is contained in:
Alessandro Ranellucci 2012-08-22 19:11:45 +02:00
parent 075213c731
commit 9e682924c7
6 changed files with 58 additions and 17 deletions

View file

@ -607,6 +607,26 @@ END
deserialize => $deserialize_comma,
default => [0],
},
'retract_length_toolchange' => {
label => 'Length',
tooltip => 'When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder).',
sidetext => 'mm (zero to disable)',
cli => 'retract-length-toolchange=f@',
type => 'f',
serialize => $serialize_comma,
deserialize => $deserialize_comma,
default => [3],
},
'retract_restart_extra_toolchange' => {
label => 'Extra length on restart',
tooltip => 'When the retraction is compensated after changing tool, the extruder will push this additional amount of filament.',
sidetext => 'mm',
cli => 'retract-restart-extra-toolchange=f@',
type => 'f',
serialize => $serialize_comma,
deserialize => $deserialize_comma,
default => [0],
},
# cooling options
'cooling' => {

View file

@ -7,6 +7,7 @@ use constant OPTIONS => [qw(
extruder_offset
nozzle_diameter filament_diameter extrusion_multiplier temperature first_layer_temperature
retract_length retract_lift retract_speed retract_restart_extra retract_before_travel
retract_length_toolchange retract_restart_extra_toolchange
)];
has $_ => (is => 'ro', required => 1) for @{&OPTIONS};

View file

@ -196,12 +196,15 @@ sub retract {
my $self = shift;
my %params = @_;
return "" unless $self->extruder->retract_length > 0
&& !$self->extruder->retracted;
my ($length, $restart_extra) = $params{toolchange}
? ($self->extruder->retract_length_toolchange, $self->extruder->retract_restart_extra_toolchange)
: ($self->extruder->retract_length, $self->extruder->retract_restart_extra);
return "" unless $length > 0 && !$self->extruder->retracted;
# prepare moves
$self->speed('retract');
my $retract = [undef, undef, -$self->extruder->retract_length, "retract"];
my $retract = [undef, undef, -$length, "retract"];
my $lift = ($self->extruder->retract_lift == 0 || defined $params{move_z})
? undef
: [undef, $self->z + $self->extruder->retract_lift, 0, 'lift plate during retraction'];
@ -231,7 +234,7 @@ sub retract {
$gcode .= $self->G1(@$lift);
}
}
$self->extruder->retracted($self->extruder->retract_length + $self->extruder->retract_restart_extra);
$self->extruder->retracted($length + $restart_extra);
$self->lifted($self->extruder->retract_lift) if $lift;
# reset extrusion distance during retracts
@ -378,7 +381,7 @@ sub set_tool {
return "" if $self->extruder_idx == $tool;
$self->extruder_idx($tool);
return $self->retract
return $self->retract(toolchange => 1)
. (sprintf "T%d%s\n", $tool, ($Slic3r::Config->gcode_comments ? ' ; change tool' : ''))
. $self->reset_e;
}

View file

@ -583,7 +583,8 @@ sub build {
$self->_build_extruder_pages;
}
sub _extruder_options { qw(nozzle_diameter extruder_offset retract_length retract_lift retract_speed retract_restart_extra retract_before_travel) }
sub _extruder_options { qw(nozzle_diameter extruder_offset retract_length retract_lift retract_speed retract_restart_extra retract_before_travel
retract_length_toolchange retract_restart_extra_toolchange) }
sub config {
my $self = shift;
@ -619,6 +620,13 @@ sub _build_extruder_pages {
qw(retract_length retract_lift retract_speed retract_restart_extra retract_before_travel)
],
},
{
title => 'Retraction when tool is disabled (advanced settings for multi-extruder setups)',
options => [
map "${_}#${extruder_idx}",
qw(retract_length_toolchange retract_restart_extra_toolchange)
],
},
]);
$self->{extruder_pages}[$extruder_idx]{disabled} = 0;
}