Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlessandro Ranellucci <aar@cpan.org>2011-11-07 18:58:47 +0400
committerAlessandro Ranellucci <aar@cpan.org>2011-11-07 18:58:47 +0400
commitb4e268efad9b7b37ff7a5a2aaef8f26a21cd1d39 (patch)
treee6b4cd0170e781e7c3d2d5c3f484903fd6b809f8 /lib
parent71a44e253c9abed7f6cfdb250ae99059481d19f0 (diff)
New --retract-lift option to lift Z while doing travel moves. #25
Diffstat (limited to 'lib')
-rw-r--r--lib/Slic3r.pm1
-rw-r--r--lib/Slic3r/Config.pm4
-rw-r--r--lib/Slic3r/Extruder.pm21
-rw-r--r--lib/Slic3r/GUI/SkeinPanel.pm2
4 files changed, 25 insertions, 3 deletions
diff --git a/lib/Slic3r.pm b/lib/Slic3r.pm
index 256085e8e..380da3d94 100644
--- a/lib/Slic3r.pm
+++ b/lib/Slic3r.pm
@@ -75,6 +75,7 @@ our $retract_length = 1; # mm
our $retract_restart_extra = 0; # mm
our $retract_speed = 40; # mm/sec
our $retract_before_travel = 2; # mm
+our $retract_lift = 0; # mm
# skirt options
our $skirts = 1;
diff --git a/lib/Slic3r/Config.pm b/lib/Slic3r/Config.pm
index 8db8a2dd4..aa640bdc0 100644
--- a/lib/Slic3r/Config.pm
+++ b/lib/Slic3r/Config.pm
@@ -116,6 +116,10 @@ our $Options = {
label => 'Minimum travel after retraction (mm)',
type => 'f',
},
+ 'retract_lift' => {
+ label => 'Lift Z (mm)',
+ type => 'f',
+ },
# skirt options
'skirts' => {
diff --git a/lib/Slic3r/Extruder.pm b/lib/Slic3r/Extruder.pm
index 42fe15a63..704a3d5a2 100644
--- a/lib/Slic3r/Extruder.pm
+++ b/lib/Slic3r/Extruder.pm
@@ -8,6 +8,7 @@ has 'flow_ratio' => (is => 'rw', default => sub {1});
has 'extrusion_distance' => (is => 'rw', default => sub {0} );
has 'retracted' => (is => 'rw', default => sub {1} ); # this spits out some plastic at start
+has 'lifted' => (is => 'rw', default => sub {0} );
has 'last_pos' => (is => 'rw', default => sub { [0,0] } );
has 'last_f' => (is => 'rw', default => sub {0});
has 'dec' => (is => 'ro', default => sub { 3 } );
@@ -43,7 +44,7 @@ sub move_z {
my $gcode = "";
- $gcode .= $self->retract;
+ $gcode .= $self->retract(dont_lift => 1);
$gcode .= $self->G1(undef, $z, 0, 'move to next layer');
return $gcode;
@@ -119,12 +120,19 @@ sub extrude {
sub retract {
my $self = shift;
+ my %params = @_;
+
return "" unless $Slic3r::retract_length > 0
&& !$self->retracted;
$self->retracted(1);
my $gcode = $self->G1(undef, undef, -$Slic3r::retract_length, "retract");
+ unless ($params{dont_lift} || $Slic3r::retract_lift == 0) {
+ $gcode .= $self->G1(undef, $self->z + $Slic3r::retract_lift, 0, 'lift plate during retraction');
+ $self->lifted(1);
+ }
+
# reset extrusion distance during retracts
# this makes sure we leave sufficient precision in the firmware
if (!$Slic3r::use_relative_e_distances) {
@@ -138,8 +146,17 @@ sub retract {
sub unretract {
my $self = shift;
$self->retracted(0);
- return $self->G1(undef, undef, ($Slic3r::retract_length + $Slic3r::retract_restart_extra),
+ my $gcode = "";
+
+ if ($self->lifted) {
+ $gcode .= $self->G1(undef, $self->z - $Slic3r::retract_lift, 0, 'restore layer Z');
+ $self->lifted(0);
+ }
+
+ $gcode .= $self->G1(undef, undef, ($Slic3r::retract_length + $Slic3r::retract_restart_extra),
"compensate retraction");
+
+ return $gcode;
}
sub G1 {
diff --git a/lib/Slic3r/GUI/SkeinPanel.pm b/lib/Slic3r/GUI/SkeinPanel.pm
index f45382985..ab338498d 100644
--- a/lib/Slic3r/GUI/SkeinPanel.pm
+++ b/lib/Slic3r/GUI/SkeinPanel.pm
@@ -37,7 +37,7 @@ sub new {
),
retract => Slic3r::GUI::OptionsGroup->new($self,
title => 'Retraction',
- options => [qw(retract_length retract_speed retract_restart_extra retract_before_travel)],
+ options => [qw(retract_length retract_lift retract_speed retract_restart_extra retract_before_travel)],
),
skirt => Slic3r::GUI::OptionsGroup->new($self,
title => 'Skirt',