From bcc061176c55bc19e2f5d88082e9eb1dc8a31f32 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Sun, 27 Oct 2013 16:59:18 +0100 Subject: [PATCH] New option to use G10/G11 for firmware-controlled retraction. #1494 --- README.md | 3 ++- lib/Slic3r/Config.pm | 13 +++++++++++++ lib/Slic3r/GCode.pm | 6 +++++- lib/Slic3r/GUI/Tab.pm | 2 +- slic3r.pl | 3 ++- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2844b4281..86f7e7f1b 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,8 @@ The author of the Silk icon set is Mark James. (+/-, default: 0) --gcode-flavor The type of G-code to generate (reprap/teacup/makerware/sailfish/mach3/no-extrusion, default: reprap) - --use-relative-e-distances Enable this to get relative E values + --use-relative-e-distances Enable this to get relative E values (default: no) + --use-firmware-retraction Enable firmware-controlled retraction using G10/G11 (default: no) --gcode-arcs Use G2/G3 commands for native arcs (experimental, not supported by all firmwares) --g0 Use G0 commands for retraction (experimental, not supported by all diff --git a/lib/Slic3r/Config.pm b/lib/Slic3r/Config.pm index a3cb4bfca..ca6d5159a 100644 --- a/lib/Slic3r/Config.pm +++ b/lib/Slic3r/Config.pm @@ -86,6 +86,13 @@ our $Options = { type => 'bool', default => 0, }, + 'use_firmware_retraction' => { + label => 'Use firmware retraction', + tooltip => 'This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin.', + cli => 'use-firmware-retraction!', + type => 'bool', + default => 0, + }, 'extrusion_axis' => { label => 'Extrusion axis', tooltip => 'Use this option to set the axis letter associated to your printer\'s extruder (usually E but some printers use A).', @@ -1391,6 +1398,12 @@ sub validate { die "Invalid value for --gcode-flavor\n" if !first { $_ eq $self->gcode_flavor } @{$Options->{gcode_flavor}{values}}; + die "--use-firmware-retraction is only supported by Marlin firmware\n" + if $self->use_firmware_retraction && $self->gcode_flavor ne 'reprap'; + + die "--use-firmware-retraction is not compatible with --wipe\n" + if $self->use_firmware_retraction && first {$_} @{$self->wipe}; + # --print-center die "Invalid value for --print-center\n" if !ref $self->print_center diff --git a/lib/Slic3r/GCode.pm b/lib/Slic3r/GCode.pm index 61eb3a711..b147e9173 100644 --- a/lib/Slic3r/GCode.pm +++ b/lib/Slic3r/GCode.pm @@ -504,6 +504,8 @@ sub retract { $self->speed('retract'); $gcode .= $self->G1(undef, undef, $retract->[2] - $retracted, $comment); } + } elsif ($self->config->use_firmware_retraction) { + $gcode .= "G10 ; retract\n"; } else { $self->speed('retract'); $gcode .= $self->G1(@$retract); @@ -546,7 +548,9 @@ sub unretract { my $to_unretract = $self->extruder->retracted + $self->extruder->restart_extra; if ($to_unretract) { $self->speed('retract'); - if ($self->config->extrusion_axis) { + if ($self->config->use_firmware_retraction) { + $gcode .= "G11 ; unretract\n"; + } elsif ($self->config->extrusion_axis) { # use G1 instead of G0 because G0 will blend the restart with the previous travel move $gcode .= sprintf "G1 E%.5f F%.3f", $self->extruder->extrude($to_unretract), diff --git a/lib/Slic3r/GUI/Tab.pm b/lib/Slic3r/GUI/Tab.pm index 1cb0a0fdc..5ac982915 100644 --- a/lib/Slic3r/GUI/Tab.pm +++ b/lib/Slic3r/GUI/Tab.pm @@ -689,7 +689,7 @@ sub build { }, { title => 'Advanced', - options => [qw(vibration_limit)], + options => [qw(use_firmware_retraction vibration_limit)], }, ]); diff --git a/slic3r.pl b/slic3r.pl index 5d7980169..719d6a14a 100755 --- a/slic3r.pl +++ b/slic3r.pl @@ -202,7 +202,8 @@ $j (+/-, default: $config->{z_offset}) --gcode-flavor The type of G-code to generate (reprap/teacup/makerware/sailfish/mach3/no-extrusion, default: $config->{gcode_flavor}) - --use-relative-e-distances Enable this to get relative E values + --use-relative-e-distances Enable this to get relative E values (default: no) + --use-firmware-retraction Enable firmware-controlled retraction using G10/G11 (default: no) --gcode-arcs Use G2/G3 commands for native arcs (experimental, not supported by all firmwares) --g0 Use G0 commands for retraction (experimental, not supported by all