diff --git a/README.markdown b/README.markdown index f335450a..bf7ff336 100644 --- a/README.markdown +++ b/README.markdown @@ -153,6 +153,17 @@ The author of the Silk icon set is Mark James. --first-layer-speed Speed of print moves for bottom layer, expressed either as an absolute value or as a percentage over normal speeds (default: 30%) + Acceleration options: + --perimeter-acceleration + Overrides firmware's default acceleration for perimeters. (mm/s^2, set zero + to disable; default: 0) + --infill-acceleration + Overrides firmware's default acceleration for infill. (mm/s^2, set zero + to disable; default: 0) + --default-acceleration + Acceleration will be reset to this value after the specific settings above + have been applied. (mm/s^2, set zero to disable; default: 130) + Accuracy options: --layer-height Layer height in mm (default: 0.4) --first-layer-height Layer height for first layer (mm or %, default: 100%) diff --git a/lib/Slic3r/Config.pm b/lib/Slic3r/Config.pm index 90f98136..a310361d 100644 --- a/lib/Slic3r/Config.pm +++ b/lib/Slic3r/Config.pm @@ -6,7 +6,7 @@ use utf8; use List::Util qw(first); # cemetery of old config settings -our @Ignore = qw(duplicate_x duplicate_y multiply_x multiply_y support_material_tool); +our @Ignore = qw(duplicate_x duplicate_y multiply_x multiply_y support_material_tool acceleration); my $serialize_comma = sub { join ',', @{$_[0]} }; my $deserialize_comma = sub { [ split /,/, $_[0] ] }; @@ -319,25 +319,29 @@ our $Options = { }, # acceleration options - 'acceleration' => { - label => 'Enable acceleration control', - cli => 'acceleration!', - type => 'bool', + 'default_acceleration' => { + label => 'Default', + tooltip => 'This is the acceleration your printer will be reset to after the role-specific acceleration values are used (perimeter/infill). Set zero to prevent resetting acceleration at all.', + sidetext => 'mm/s²', + cli => 'default-acceleration', + type => 'f', default => 0, }, 'perimeter_acceleration' => { label => 'Perimeters', + tooltip => 'This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters.', sidetext => 'mm/s²', cli => 'perimeter-acceleration', type => 'f', - default => 25, + default => 0, }, 'infill_acceleration' => { label => 'Infill', + tooltip => 'This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill.', sidetext => 'mm/s²', cli => 'infill-acceleration', type => 'f', - default => 50, + default => 0, }, # accuracy options diff --git a/lib/Slic3r/GCode.pm b/lib/Slic3r/GCode.pm index 2bf14155..0b9ff8bc 100644 --- a/lib/Slic3r/GCode.pm +++ b/lib/Slic3r/GCode.pm @@ -323,9 +323,9 @@ sub reset_e { sub set_acceleration { my $self = shift; my ($acceleration) = @_; - return "" unless $Slic3r::Config->acceleration; + return "" if !$acceleration; - return sprintf "M201 E%s%s\n", + return sprintf "M204 S%s%s\n", $acceleration, ($Slic3r::Config->gcode_comments ? ' ; adjust acceleration' : ''); } diff --git a/lib/Slic3r/GUI/Tab.pm b/lib/Slic3r/GUI/Tab.pm index d4479d6b..4bb53035 100644 --- a/lib/Slic3r/GUI/Tab.pm +++ b/lib/Slic3r/GUI/Tab.pm @@ -430,6 +430,10 @@ sub build { title => 'Modifiers', options => [qw(first_layer_speed)], }, + { + title => 'Acceleration control (advanced)', + options => [qw(perimeter_acceleration infill_acceleration default_acceleration)], + }, ]); $self->add_options_page('Skirt and brim', 'box.png', optgroups => [ diff --git a/lib/Slic3r/Print.pm b/lib/Slic3r/Print.pm index fe9f164b..bf67efad 100644 --- a/lib/Slic3r/Print.pm +++ b/lib/Slic3r/Print.pm @@ -748,7 +748,6 @@ sub write_gcode { $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); # skip skirt if we have a large brim if ($layer_id < $Slic3r::Config->skirt_height) { # distribute skirt loops across all extruders @@ -807,7 +806,10 @@ sub write_gcode { # extrude perimeters if (@{ $layerm->perimeters }) { $gcode .= $gcodegen->set_extruder($region->extruders->{perimeter}); + $gcode .= $gcodegen->set_acceleration($Slic3r::Config->perimeter_acceleration); $gcode .= $gcodegen->extrude($_, 'perimeter') for @{ $layerm->perimeters }; + $gcode .= $gcodegen->set_acceleration($Slic3r::Config->default_acceleration) + if $Slic3r::Config->perimeter_acceleration; } # extrude fills @@ -822,6 +824,8 @@ sub write_gcode { $gcode .= $gcodegen->extrude($fill, 'fill') ; } } + $gcode .= $gcodegen->set_acceleration($Slic3r::Config->default_acceleration) + if $Slic3r::Config->infill_acceleration; } } } diff --git a/slic3r.pl b/slic3r.pl index bafd9874..d109f9ff 100755 --- a/slic3r.pl +++ b/slic3r.pl @@ -201,6 +201,17 @@ $j --first-layer-speed Speed of print moves for bottom layer, expressed either as an absolute value or as a percentage over normal speeds (default: $config->{first_layer_speed}) + Acceleration options: + --perimeter-acceleration + Overrides firmware's default acceleration for perimeters. (mm/s^2, set zero + to disable; default: $config->{perimeter_acceleration}) + --infill-acceleration + Overrides firmware's default acceleration for infill. (mm/s^2, set zero + to disable; default: $config->{infill_acceleration}) + --default-acceleration + Acceleration will be reset to this value after the specific settings above + have been applied. (mm/s^2, set zero to disable; default: $config->{travel_speed}) + Accuracy options: --layer-height Layer height in mm (default: $config->{layer_height}) --first-layer-height Layer height for first layer (mm or %, default: $config->{first_layer_height})