mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-11-26 12:21:05 -07:00
Rewrote Fill2.pm to C++, deleted Perl infills for good.
Removed dependency on Perl Math::PlanePath module. Fixed compilation with Visual Studio and SLIC3R_DEBUG: Visual Studio older than 2015 does not support the prinf type specifier %zu. Use %Iu instead. C++11 move semantics enabled.
This commit is contained in:
parent
3a31d37d35
commit
95ede7c4b8
49 changed files with 628 additions and 1803 deletions
|
|
@ -544,8 +544,8 @@ sub process_layer {
|
|||
}
|
||||
|
||||
# process infill
|
||||
# $layerm->fills is a collection of ExtrusionPath::Collection objects, each one containing
|
||||
# the ExtrusionPath objects of a certain infill "group" (also called "surface"
|
||||
# $layerm->fills is a collection of Slic3r::ExtrusionPath::Collection objects (C++ class ExtrusionEntityCollection),
|
||||
# each one containing the ExtrusionPath objects of a certain infill "group" (also called "surface"
|
||||
# throughout the code). We can redefine the order of such Collections but we have to
|
||||
# do each one completely at once.
|
||||
foreach my $fill (@{$layerm->fills}) {
|
||||
|
|
|
|||
|
|
@ -14,19 +14,6 @@ use Slic3r::Surface ':types';
|
|||
# If enabled, phases of prepare_infill will be written into SVG files to an "out" directory.
|
||||
our $SLIC3R_DEBUG_SLICE_PROCESSING = 0;
|
||||
|
||||
# TODO: lazy
|
||||
sub fill_maker {
|
||||
my $self = shift;
|
||||
return Slic3r::Fill->new(bounding_box => $self->bounding_box);
|
||||
}
|
||||
|
||||
# Vojtech's implementation: Create the C++ filler.
|
||||
# TODO: lazy
|
||||
sub fill_maker2 {
|
||||
my $self = shift;
|
||||
return Slic3r::Fill2->new(bounding_box => $self->bounding_box);
|
||||
}
|
||||
|
||||
sub region_volumes {
|
||||
my $self = shift;
|
||||
return [ map $self->get_region_volumes($_), 0..($self->region_count - 1) ];
|
||||
|
|
@ -617,12 +604,12 @@ sub infill {
|
|||
thread_cb => sub {
|
||||
my $q = shift;
|
||||
while (defined (my $i = $q->dequeue)) {
|
||||
$self->get_layer($i)->make_fill;
|
||||
$self->get_layer($i)->make_fills;
|
||||
}
|
||||
},
|
||||
no_threads_cb => sub {
|
||||
foreach my $layer (@{$self->layers}) {
|
||||
$layer->make_fill;
|
||||
$layer->make_fills;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
@ -678,14 +665,7 @@ sub _support_material {
|
|||
);
|
||||
} else {
|
||||
# New supports, C++ implementation.
|
||||
return Slic3r::Print::SupportMaterial2->new(
|
||||
print_config => $self->print->config,
|
||||
object_config => $self->config,
|
||||
first_layer_flow => $first_layer_flow,
|
||||
flow => $self->support_material_flow,
|
||||
interface_flow => $self->support_material_flow(FLOW_ROLE_SUPPORT_MATERIAL_INTERFACE),
|
||||
soluble_interface => ($self->config->support_material_contact_distance == 0),
|
||||
);
|
||||
return Slic3r::Print::SupportMaterial2->new($self);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -761,10 +761,13 @@ sub generate_toolpaths {
|
|||
# Allocate the fillers exclusively in the worker threads! Don't allocate them at the main thread,
|
||||
# as Perl copies the C++ pointers by default, so then the C++ objects are shared between threads!
|
||||
my %fillers = (
|
||||
interface => $object->fill_maker2->filler('rectilinear'),
|
||||
support => $object->fill_maker2->filler($pattern),
|
||||
interface => Slic3r::Filler->new_from_type('rectilinear'),
|
||||
support => Slic3r::Filler->new_from_type($pattern),
|
||||
);
|
||||
|
||||
my $bounding_box = $object->bounding_box;
|
||||
$fillers{interface}->set_bounding_box($object->bounding_box);
|
||||
$fillers{support}->set_bounding_box($object->bounding_box);
|
||||
|
||||
# interface and contact infill
|
||||
if (@$interface || @$contact_infill) {
|
||||
$fillers{interface}->set_angle($interface_angle);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue