Optimize concentric loops
This commit is contained in:
parent
78f1527ab7
commit
cd1a39397b
@ -3,7 +3,7 @@ use Moo;
|
||||
|
||||
extends 'Slic3r::Fill::Base';
|
||||
|
||||
use Slic3r::Geometry qw(scale unscale X);
|
||||
use Slic3r::Geometry qw(scale unscale X nearest_point_index);
|
||||
use Slic3r::Geometry::Clipper qw(offset offset2 union_pt traverse_pt PFT_EVENODD);
|
||||
|
||||
sub fill_surface {
|
||||
@ -36,9 +36,17 @@ sub fill_surface {
|
||||
|
||||
# generate paths from the outermost to the innermost, to avoid
|
||||
# adhesion problems of the first central tiny loops
|
||||
my @paths = map Slic3r::Polygon->new(@$_)->split_at_first_point,
|
||||
@loops = map Slic3r::Polygon->new(@$_),
|
||||
reverse traverse_pt( union_pt(\@loops, PFT_EVENODD) );
|
||||
|
||||
# order paths using a nearest neighbor search
|
||||
my @paths = ();
|
||||
my $last_pos = [0,0];
|
||||
foreach my $loop (@loops) {
|
||||
push @paths, $loop->split_at_index(nearest_point_index($last_pos, $loop));
|
||||
$last_pos = $paths[-1][-1];
|
||||
}
|
||||
|
||||
# clip the paths to avoid the extruder to get exactly on the first point of the loop
|
||||
my $clip_length = scale $flow_spacing * &Slic3r::LOOP_CLIPPING_LENGTH_OVER_SPACING;
|
||||
$_->clip_end($clip_length) for @paths;
|
||||
|
@ -12,7 +12,7 @@ our @EXPORT_OK = qw(
|
||||
point_is_on_left_of_segment polyline_lines polygon_lines nearest_point
|
||||
point_along_segment polygon_segment_having_point polygon_has_subsegment
|
||||
polygon_has_vertex polyline_length can_connect_points deg2rad rad2deg
|
||||
rotate_points move_points clip_segment_polygon
|
||||
rotate_points move_points clip_segment_polygon nearest_point_index
|
||||
sum_vectors multiply_vector subtract_vectors dot perp polygon_points_visibility
|
||||
line_intersection bounding_box bounding_box_intersect same_point same_line
|
||||
longest_segment angle3points three_points_aligned line_direction
|
||||
|
Loading…
Reference in New Issue
Block a user