Fix of git #3293: More efficient GCode export

This fixes two problems of repeatedly copying data from the C++ layer
to perl, by factoring the copying out of an inner loop.
This commit is contained in:
bubnikv 2016-06-01 20:58:05 +02:00
parent ab9e3b718c
commit bb9c3dd9ce
2 changed files with 40 additions and 13 deletions

View file

@ -393,6 +393,10 @@ sub make_perimeters {
for my $i (0 .. ($self->layer_count - 2)) {
my $layerm = $self->get_layer($i)->get_region($region_id);
my $upper_layerm = $self->get_layer($i+1)->get_region($region_id);
my $upper_layerm_polygons = [ map $_->p, @{$upper_layerm->slices} ];
# Filter upper layer polygons in intersection_ppl by their bounding boxes?
# my $upper_layerm_poly_bboxes= [ map $_->bounding_box, @{$upper_layerm_polygons} ];
my $total_loop_length = sum(map $_->length, @$upper_layerm_polygons) // 0;
my $perimeter_spacing = $layerm->flow(FLOW_ROLE_PERIMETER)->scaled_spacing;
my $ext_perimeter_flow = $layerm->flow(FLOW_ROLE_EXTERNAL_PERIMETER);
@ -415,12 +419,11 @@ sub make_perimeters {
# check whether a portion of the upper slices falls inside the critical area
my $intersection = intersection_ppl(
[ map $_->p, @{$upper_layerm->slices} ],
$upper_layerm_polygons,
$critical_area,
);
# only add an additional loop if at least 30% of the slice loop would benefit from it
my $total_loop_length = sum(map $_->length, map $_->p, @{$upper_layerm->slices}) // 0;
my $total_intersection_length = sum(map $_->length, @$intersection) // 0;
last unless $total_intersection_length > $total_loop_length*0.3;