mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-23 22:54:08 -06:00
Code refactored to allow for multiple infill types
This commit is contained in:
parent
bfd1d0e1dd
commit
33d7b8c7cf
5 changed files with 230 additions and 157 deletions
|
@ -1,6 +1,60 @@
|
|||
package Slic3r::Fill;
|
||||
use Moo;
|
||||
|
||||
use Slic3r::Fill::Base;
|
||||
use Slic3r::Fill::Rectilinear;
|
||||
|
||||
has 'print' => (is => 'ro', required => 1);
|
||||
has 'fillers' => (is => 'rw', default => sub { {} });
|
||||
|
||||
our %FillTypes = (
|
||||
rectilinear => 'Slic3r::Fill::Rectilinear',
|
||||
);
|
||||
|
||||
sub BUILD {
|
||||
my $self = shift;
|
||||
$self->fillers->{$_} ||= $FillTypes{$_}->new(print => $self->print)
|
||||
for ('rectilinear', $Slic3r::fill_type);
|
||||
}
|
||||
|
||||
sub make_fill {
|
||||
my $self = shift;
|
||||
my ($layer) = @_;
|
||||
|
||||
my $max_print_dimension = $self->print->max_length * sqrt(2);
|
||||
for (values %{$self->fillers}) {
|
||||
$_->layer($layer);
|
||||
$_->max_print_dimension($max_print_dimension);
|
||||
}
|
||||
|
||||
printf "Filling layer %d:\n", $layer->id;
|
||||
foreach my $surface_collection (@{ $layer->fill_surfaces }) {
|
||||
my @path_collection = ();
|
||||
|
||||
SURFACE: foreach my $surface (@{ $surface_collection->surfaces }) {
|
||||
Slic3r::debugf " Processing surface %s:\n", $surface->id;
|
||||
|
||||
my $filler = $Slic3r::fill_type;
|
||||
my $density = $Slic3r::fill_density;
|
||||
next SURFACE unless $density > 0;
|
||||
|
||||
# force 100% density and rectilinear fill for external surfaces
|
||||
if ($surface->surface_type ne 'internal') {
|
||||
$density = 1;
|
||||
$filler = 'rectilinear';
|
||||
}
|
||||
|
||||
push @path_collection, $self->fillers->{$filler}->fill_surface($surface,
|
||||
density => $density,
|
||||
);
|
||||
}
|
||||
|
||||
# save into layer
|
||||
push @{ $layer->fills }, Slic3r::ExtrusionPath::Collection->new(
|
||||
paths => [ map Slic3r::ExtrusionPath->cast([ @$_ ]), @path_collection ],
|
||||
);
|
||||
$layer->fills->[-1]->cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue