Some fixed after the recent Slic3r::GCode refactoring

master
Alessandro Ranellucci 2014-05-15 15:54:16 +02:00
parent ee2c1c6127
commit dd1183f19a
3 changed files with 19 additions and 30 deletions

View File

@ -22,8 +22,6 @@ has '_upper_layer_islands' => (is => 'rw');
has 'shift_x' => (is => 'rw', default => sub {0} ); has 'shift_x' => (is => 'rw', default => sub {0} );
has 'shift_y' => (is => 'rw', default => sub {0} ); has 'shift_y' => (is => 'rw', default => sub {0} );
has 'z' => (is => 'rw'); has 'z' => (is => 'rw');
has '_extrusion_axis' => (is => 'rw');
has '_retract_lift' => (is => 'rw');
has 'extruders' => (is => 'ro', default => sub {{}}); has 'extruders' => (is => 'ro', default => sub {{}});
has 'multiple_extruders' => (is => 'rw', default => sub {0}); has 'multiple_extruders' => (is => 'rw', default => sub {0});
has 'extruder' => (is => 'rw'); has 'extruder' => (is => 'rw');
@ -37,13 +35,6 @@ has 'last_pos' => (is => 'rw', default => sub { Slic3r::Point->new(0,0
has 'last_fan_speed' => (is => 'rw', default => sub {0}); has 'last_fan_speed' => (is => 'rw', default => sub {0});
has 'wipe_path' => (is => 'rw'); has 'wipe_path' => (is => 'rw');
sub BUILD {
my ($self) = @_;
$self->_extrusion_axis($self->config->get_extrusion_axis);
$self->_retract_lift($self->config->retract_lift->[0]);
}
sub set_extruders { sub set_extruders {
my ($self, $extruder_ids, $print_config) = @_; my ($self, $extruder_ids, $print_config) = @_;
@ -272,7 +263,7 @@ sub extrude_path {
# calculate extrusion length per distance unit # calculate extrusion length per distance unit
my $e = $self->extruder->e_per_mm3 * $path->mm3_per_mm; my $e = $self->extruder->e_per_mm3 * $path->mm3_per_mm;
$e = 0 if !$self->_extrusion_axis; $e = 0 if !$self->config->get_extrusion_axis;
# set speed # set speed
my $F; my $F;
@ -291,7 +282,7 @@ sub extrude_path {
} elsif ($path->role == EXTR_ROLE_GAPFILL) { } elsif ($path->role == EXTR_ROLE_GAPFILL) {
$F = $self->config->get_abs_value('gap_fill_speed'); $F = $self->config->get_abs_value('gap_fill_speed');
} else { } else {
$F = $speed; $F = $speed // -1;
die "Invalid speed" if $F < 0; # $speed == -1 die "Invalid speed" if $F < 0; # $speed == -1
} }
$F *= 60; # convert mm/sec to mm/min $F *= 60; # convert mm/sec to mm/min
@ -307,7 +298,7 @@ sub extrude_path {
$gcode .= $path->gcode($self->extruder, $e, $F, $gcode .= $path->gcode($self->extruder, $e, $F,
$self->shift_x - $self->extruder->extruder_offset->x, $self->shift_x - $self->extruder->extruder_offset->x,
$self->shift_y - $self->extruder->extruder_offset->y, #,, $self->shift_y - $self->extruder->extruder_offset->y, #,,
$self->_extrusion_axis, $self->config->get_extrusion_axis,
$self->config->gcode_comments ? " ; $description" : ""); $self->config->gcode_comments ? " ; $description" : "");
if ($self->enable_wipe) { if ($self->enable_wipe) {
@ -427,9 +418,9 @@ sub retract {
# prepare moves # prepare moves
my $retract = [undef, undef, -$length, $self->extruder->retract_speed_mm_min, $comment]; my $retract = [undef, undef, -$length, $self->extruder->retract_speed_mm_min, $comment];
my $lift = ($self->_retract_lift == 0 || defined $params{move_z}) && !$self->lifted my $lift = ($self->config->retract_lift->[0] == 0 || defined $params{move_z}) && !$self->lifted
? undef ? undef
: [undef, $self->z + $self->_retract_lift, 0, $self->config->travel_speed*60, 'lift plate during travel']; : [undef, $self->z + $self->config->retract_lift->[0], 0, $self->config->travel_speed*60, 'lift plate during travel'];
# check that we have a positive wipe length # check that we have a positive wipe length
if ($wipe_path) { if ($wipe_path) {
@ -454,17 +445,17 @@ sub retract {
$gcode .= $self->G1(@$retract); $gcode .= $self->G1(@$retract);
} }
if (!$self->lifted) { if (!$self->lifted) {
if (defined $params{move_z} && $self->_retract_lift > 0) { if (defined $params{move_z} && $self->config->retract_lift->[0] > 0) {
my $travel = [undef, $params{move_z} + $self->_retract_lift, 0, $self->config->travel_speed*60, 'move to next layer (' . $self->layer->id . ') and lift']; my $travel = [undef, $params{move_z} + $self->config->retract_lift->[0], 0, $self->config->travel_speed*60, 'move to next layer (' . $self->layer->id . ') and lift'];
$gcode .= $self->G0(@$travel); $gcode .= $self->G0(@$travel);
$self->lifted($self->_retract_lift); $self->lifted($self->config->retract_lift->[0]);
} elsif ($lift) { } elsif ($lift) {
$gcode .= $self->G1(@$lift); $gcode .= $self->G1(@$lift);
} }
} }
$self->extruder->set_retracted($self->extruder->retracted + $length); $self->extruder->set_retracted($self->extruder->retracted + $length);
$self->extruder->set_restart_extra($restart_extra); $self->extruder->set_restart_extra($restart_extra);
$self->lifted($self->_retract_lift) if $lift; $self->lifted($self->config->retract_lift->[0]) if $lift;
# reset extrusion distance during retracts # reset extrusion distance during retracts
# this makes sure we leave sufficient precision in the firmware # this makes sure we leave sufficient precision in the firmware
@ -490,10 +481,10 @@ sub unretract {
if ($to_unretract) { if ($to_unretract) {
if ($self->config->use_firmware_retraction) { if ($self->config->use_firmware_retraction) {
$gcode .= "G11 ; unretract\n"; $gcode .= "G11 ; unretract\n";
} elsif ($self->_extrusion_axis) { } elsif ($self->config->get_extrusion_axis) {
# use G1 instead of G0 because G0 will blend the restart with the previous travel move # use G1 instead of G0 because G0 will blend the restart with the previous travel move
$gcode .= sprintf "G1 %s%.5f F%.3f", $gcode .= sprintf "G1 %s%.5f F%.3f",
$self->_extrusion_axis, $self->config->get_extrusion_axis,
$self->extruder->extrude($to_unretract), $self->extruder->extrude($to_unretract),
$self->extruder->retract_speed_mm_min; $self->extruder->retract_speed_mm_min;
$gcode .= " ; compensate retraction" if $self->config->gcode_comments; $gcode .= " ; compensate retraction" if $self->config->gcode_comments;
@ -511,8 +502,8 @@ sub reset_e {
return "" if $self->config->gcode_flavor =~ /^(?:mach3|makerware|sailfish)$/; return "" if $self->config->gcode_flavor =~ /^(?:mach3|makerware|sailfish)$/;
$self->extruder->set_E(0) if $self->extruder; $self->extruder->set_E(0) if $self->extruder;
return sprintf "G92 %s0%s\n", $self->_extrusion_axis, ($self->config->gcode_comments ? ' ; reset extrusion distance' : '') return sprintf "G92 %s0%s\n", $self->config->get_extrusion_axis, ($self->config->gcode_comments ? ' ; reset extrusion distance' : '')
if $self->_extrusion_axis && !$self->config->use_relative_e_distances; if $self->config->get_extrusion_axis && !$self->config->use_relative_e_distances;
} }
sub set_acceleration { sub set_acceleration {
@ -553,12 +544,12 @@ sub _G0_G1 {
sub _Gx { sub _Gx {
my ($self, $gcode, $e, $F, $comment) = @_; my ($self, $gcode, $e, $F, $comment) = @_;
use XXX; ZZZ "here" if $F =~ /move/i;
$gcode .= sprintf " F%.3f", $F; $gcode .= sprintf " F%.3f", $F;
# output extrusion distance # output extrusion distance
if ($e && $self->_extrusion_axis) { if ($e && $self->config->get_extrusion_axis) {
$gcode .= sprintf " %s%.5f", $self->_extrusion_axis, $self->extruder->extrude($e); $gcode .= sprintf " %s%.5f", $self->config->get_extrusion_axis, $self->extruder->extrude($e);
} }
$gcode .= " ; $comment" if $comment && $self->config->gcode_comments; $gcode .= " ; $comment" if $comment && $self->config->gcode_comments;

View File

@ -123,14 +123,12 @@ sub process_layer {
if ($layer->isa('Slic3r::Layer::Support')) { if ($layer->isa('Slic3r::Layer::Support')) {
if ($layer->support_interface_fills->count > 0) { if ($layer->support_interface_fills->count > 0) {
$gcode .= $self->gcodegen->set_extruder($object->config->support_material_interface_extruder-1); $gcode .= $self->gcodegen->set_extruder($object->config->support_material_interface_extruder-1);
my %params = (speed => $object->config->support_material_speed); $gcode .= $self->gcodegen->extrude_path($_, 'support material interface', $object->config->support_material_speed)
$gcode .= $self->gcodegen->extrude_path($_, 'support material interface', %params)
for @{$layer->support_interface_fills->chained_path_from($self->gcodegen->last_pos, 0)}; for @{$layer->support_interface_fills->chained_path_from($self->gcodegen->last_pos, 0)};
} }
if ($layer->support_fills->count > 0) { if ($layer->support_fills->count > 0) {
$gcode .= $self->gcodegen->set_extruder($object->config->support_material_extruder-1); $gcode .= $self->gcodegen->set_extruder($object->config->support_material_extruder-1);
my %params = (speed => $object->config->support_material_speed); $gcode .= $self->gcodegen->extrude_path($_, 'support material', $object->config->support_material_speed)
$gcode .= $self->gcodegen->extrude_path($_, 'support material', %params)
for @{$layer->support_fills->chained_path_from($self->gcodegen->last_pos, 0)}; for @{$layer->support_fills->chained_path_from($self->gcodegen->last_pos, 0)};
} }
} }

View File

@ -960,7 +960,7 @@ sub write_gcode {
if ($finished_objects > 0) { if ($finished_objects > 0) {
$gcodegen->set_shift(map unscale $copy->[$_], X,Y); $gcodegen->set_shift(map unscale $copy->[$_], X,Y);
print $fh $gcodegen->retract; print $fh $gcodegen->retract;
print $fh $gcodegen->G0(Slic3r::Point->new(0,0), undef, 0, 'move to origin position for next object'); print $fh $gcodegen->G0(Slic3r::Point->new(0,0), undef, 0, $gcodegen->config->travel_speed*60, 'move to origin position for next object');
} }
my $buffer = Slic3r::GCode::CoolingBuffer->new( my $buffer = Slic3r::GCode::CoolingBuffer->new(