mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-19 11:23:42 +00:00
Customizable speed for small perimeters. #60
This commit is contained in:
@@ -80,6 +80,11 @@ our $Options = {
|
||||
type => 'f',
|
||||
aliases => [qw(perimeter_feed_rate)],
|
||||
},
|
||||
'small_perimeter_speed' => {
|
||||
label => 'Small perimeters (mm/s)',
|
||||
cli => 'small-perimeter-speed=i',
|
||||
type => 'f',
|
||||
},
|
||||
'infill_speed' => {
|
||||
label => 'Infill (mm/s)',
|
||||
cli => 'infill-speed=i',
|
||||
@@ -424,6 +429,7 @@ sub validate {
|
||||
if $Slic3r::skirt_height < 1;
|
||||
|
||||
# legacy with existing config files
|
||||
$Slic3r::small_perimeter_speed ||= $Slic3r::perimeter_speed;
|
||||
$Slic3r::bridge_speed ||= $Slic3r::infill_speed;
|
||||
$Slic3r::solid_infill_speed ||= $Slic3r::infill_speed;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,10 @@ has 'perimeter_speed' => (
|
||||
is => 'ro',
|
||||
default => sub { $Slic3r::perimeter_speed * 60 }, # mm/min
|
||||
);
|
||||
has 'small_perimeter_speed' => (
|
||||
is => 'ro',
|
||||
default => sub { $Slic3r::small_perimeter_speed * 60 }, # mm/min
|
||||
);
|
||||
has 'infill_speed' => (
|
||||
is => 'ro',
|
||||
default => sub { $Slic3r::infill_speed * 60 }, # mm/min
|
||||
@@ -124,6 +128,7 @@ sub extrude {
|
||||
# extrude arc or line
|
||||
$self->print_feed_rate(
|
||||
$path->role =~ /^(perimeter|skirt)$/o ? $self->perimeter_speed
|
||||
: $path->role eq 'small-perimeter' ? $self->small_perimeter_speed
|
||||
: $path->role eq 'fill' ? $self->infill_speed
|
||||
: $path->role eq 'solid-fill' ? $self->solid_infill_speed
|
||||
: $path->role eq 'bridge' ? $self->bridge_speed
|
||||
|
||||
@@ -25,7 +25,7 @@ sub new {
|
||||
},
|
||||
print_speed => {
|
||||
title => 'Print speed',
|
||||
options => [qw(perimeter_speed infill_speed solid_infill_speed bridge_speed)],
|
||||
options => [qw(perimeter_speed small_perimeter_speed infill_speed solid_infill_speed bridge_speed)],
|
||||
},
|
||||
speed => {
|
||||
title => 'Other speed settings',
|
||||
|
||||
@@ -71,6 +71,11 @@ sub make_perimeter {
|
||||
push @{ $layer->perimeters }, Slic3r::ExtrusionLoop->cast($contour, role => 'perimeter');
|
||||
}
|
||||
}
|
||||
|
||||
# detect small perimeters by checking their area
|
||||
for (@{ $layer->perimeters }) {
|
||||
$_->role('small-perimeter') if $_->polygon->area < $Slic3r::small_perimeter_area;
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -40,4 +40,9 @@ sub is_valid {
|
||||
return @{$self->points} >= 3;
|
||||
}
|
||||
|
||||
sub polygon {
|
||||
my $self = shift;
|
||||
return Slic3r::Polygon->new($self->points);
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user