mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-08-07 22:14:00 -06:00
Ported regular_points() to XS and renamed it to equally_spaced_points()
This commit is contained in:
parent
6bb425e88d
commit
885ab5844e
8 changed files with 45 additions and 34 deletions
|
@ -80,37 +80,4 @@ sub align_to_origin {
|
|||
return $self->translate(-$bb->x_min, -$bb->y_min);
|
||||
}
|
||||
|
||||
# this method returns a collection of points picked on the polygon contour
|
||||
# so that they are evenly spaced according to the input distance
|
||||
# (find a better name!)
|
||||
sub regular_points {
|
||||
my $self = shift;
|
||||
my ($distance) = @_;
|
||||
|
||||
my @my_points = @$self;
|
||||
my @points = ($my_points[0]->clone);
|
||||
my $len = 0;
|
||||
|
||||
for (my $i = 1; $i <= $#my_points; $i++) {
|
||||
my $point = $my_points[$i];
|
||||
my $segment_length = $point->distance_to($my_points[$i-1]);
|
||||
$len += $segment_length;
|
||||
next if $len < $distance;
|
||||
|
||||
if ($len == $distance) {
|
||||
push @points, $point;
|
||||
$len = 0;
|
||||
next;
|
||||
}
|
||||
|
||||
my $take = $segment_length - ($len - $distance); # how much we take of this segment
|
||||
my $new_point = Slic3r::Geometry::point_along_segment($my_points[$i-1], $point, $take);
|
||||
push @points, Slic3r::Point->new(@$new_point);
|
||||
$i--;
|
||||
$len = -$take;
|
||||
}
|
||||
|
||||
return @points;
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -451,7 +451,7 @@ sub generate_toolpaths {
|
|||
}
|
||||
|
||||
# apply a pattern to the loop
|
||||
my @positions = map Slic3r::Polygon->new(@$_)->split_at_first_point->regular_points($circle_distance), @external_loops;
|
||||
my @positions = map @{Slic3r::Polygon->new(@$_)->equally_spaced_points($circle_distance)}, @external_loops;
|
||||
@loops0 = @{diff(
|
||||
[ @external_loops ],
|
||||
[ map { my $c = $circle->clone; $c->translate(@$_); $c } @positions ],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue