From ab2b31672f18947458abb9ce1d05466126c8e1a1 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Tue, 6 Nov 2012 19:54:21 +0100 Subject: [PATCH] Fixed regression causing a long string between copies --- lib/Slic3r/GCode.pm | 10 ++++++++++ lib/Slic3r/Print.pm | 12 ++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/Slic3r/GCode.pm b/lib/Slic3r/GCode.pm index 4579fd4b..492fd190 100644 --- a/lib/Slic3r/GCode.pm +++ b/lib/Slic3r/GCode.pm @@ -47,6 +47,16 @@ my %role_speeds = ( &EXTR_ROLE_SUPPORTMATERIAL => 'perimeter', ); +sub set_shift { + my $self = shift; + my @shift = @_; + + $self->shift_x($shift[X]); + $self->shift_y($shift[Y]); + + $self->last_pos->translate(map -$_, @shift); +} + # this method accepts Z in scaled coordinates sub move_z { my $self = shift; diff --git a/lib/Slic3r/Print.pm b/lib/Slic3r/Print.pm index 5fe70bd2..f342c331 100644 --- a/lib/Slic3r/Print.pm +++ b/lib/Slic3r/Print.pm @@ -744,8 +744,7 @@ sub write_gcode { # extrude skirt if ($skirt_done < $Slic3r::Config->skirt_height) { - $gcodegen->shift_x($shift[X]); - $gcodegen->shift_y($shift[Y]); + $gcodegen->set_shift(@shift); $gcode .= $gcodegen->set_extruder($self->extruders->[0]); # move_z requires extruder $gcode .= $gcodegen->move_z($gcodegen->layer->print_z); $gcode .= $gcodegen->set_acceleration($Slic3r::Config->perimeter_acceleration); @@ -768,8 +767,7 @@ sub write_gcode { if ($layer_id == 0 && !$brim_done) { $gcode .= $gcodegen->move_z($gcodegen->layer->print_z); $gcode .= $gcodegen->set_extruder($self->extruders->[$Slic3r::Config->support_material_extruder-1]); - $gcodegen->shift_x($shift[X]); - $gcodegen->shift_y($shift[Y]); + $gcodegen->set_shift(@shift); $gcode .= $gcodegen->extrude_loop($_, 'brim') for @{$self->brim}; $brim_done = 1; } @@ -778,8 +776,7 @@ sub write_gcode { my ($obj_idx, $copy) = @$obj_copy; my $layer = $self->objects->[$obj_idx]->layers->[$layer_id]; - $gcodegen->shift_x($shift[X] + unscale $copy->[X]); - $gcodegen->shift_y($shift[Y] + unscale $copy->[Y]); + $gcodegen->set_shift(map $shift[$_] + unscale $copy->[$_], X,Y); # extrude support material before other things because it might use a lower Z # and also because we avoid travelling on other things when printing it @@ -879,8 +876,7 @@ sub write_gcode { # this happens before Z goes down to layer 0 again, so that # no collision happens hopefully. if ($finished_objects > 0) { - $gcodegen->shift_x($shift[X] + unscale $copy->[X]); - $gcodegen->shift_y($shift[Y] + unscale $copy->[Y]); + $gcodegen->set_shift(map $shift[$_] + unscale $copy->[$_], X,Y); print $fh $gcodegen->retract; print $fh $gcodegen->G0(Slic3r::Point->new(0,0), undef, 0, 'move to origin position for next object'); }