Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/xs/t
diff options
context:
space:
mode:
authorAlessandro Ranellucci <aar@cpan.org>2015-01-03 17:03:53 +0300
committerAlessandro Ranellucci <aar@cpan.org>2015-01-03 17:03:53 +0300
commitd8be67c28bca470bcc0cb334d3073d122c296404 (patch)
tree7c82c9001e9985a7956b748ae8dcc46db4b8bcc9 /xs/t
parent69da8b09997c58c3f47d1e676fe578f68cbb96e9 (diff)
Bugfix: Douglas-Peucker used perpendicular distance instead of shortest distance, thus clipping more than it should. #2474
Diffstat (limited to 'xs/t')
-rw-r--r--xs/t/03_point.t19
-rw-r--r--xs/t/09_polyline.t18
2 files changed, 34 insertions, 3 deletions
diff --git a/xs/t/03_point.t b/xs/t/03_point.t
index 0ec9df552..d983fafc9 100644
--- a/xs/t/03_point.t
+++ b/xs/t/03_point.t
@@ -4,7 +4,7 @@ use strict;
use warnings;
use Slic3r::XS;
-use Test::More tests => 15;
+use Test::More tests => 22;
my $point = Slic3r::Point->new(10, 15);
is_deeply [ @$point ], [10, 15], 'point roundtrip';
@@ -31,12 +31,27 @@ ok !$point->coincides_with($point2), 'coincides_with';
}
{
+ my $line = Slic3r::Line->new([0,0], [100,0]);
+ is +Slic3r::Point->new(0,0)->distance_to_line($line), 0, 'distance_to_line()';
+ is +Slic3r::Point->new(100,0)->distance_to_line($line), 0, 'distance_to_line()';
+ is +Slic3r::Point->new(50,0)->distance_to_line($line), 0, 'distance_to_line()';
+ is +Slic3r::Point->new(150,0)->distance_to_line($line), 50, 'distance_to_line()';
+ is +Slic3r::Point->new(0,50)->distance_to_line($line), 50, 'distance_to_line()';
+ is +Slic3r::Point->new(50,50)->distance_to_line($line), 50, 'distance_to_line()';
+}
+
+{
+ my $line = Slic3r::Line->new([50,50], [125,-25]);
+ is +Slic3r::Point->new(100,0)->distance_to_line($line), 0, 'distance_to_line()';
+}
+
+{
my $line = Slic3r::Line->new(
[18335846,18335845],
[18335846,1664160],
);
$point = Slic3r::Point->new(1664161,18335848);
- is $point->distance_to_line($line), 16671685, 'distance_to_line() does not overflow';
+ is $point->perp_distance_to_line($line), 16671685, 'perp_distance_to_line() does not overflow';
}
{
diff --git a/xs/t/09_polyline.t b/xs/t/09_polyline.t
index 5ce8d87cb..99077aad3 100644
--- a/xs/t/09_polyline.t
+++ b/xs/t/09_polyline.t
@@ -4,7 +4,7 @@ use strict;
use warnings;
use Slic3r::XS;
-use Test::More tests => 14;
+use Test::More tests => 16;
my $points = [
[100, 100],
@@ -36,6 +36,14 @@ is_deeply $polyline->pp, [ @$points, @$points ], 'append_polyline';
{
my $polyline = Slic3r::Polyline->new(
+ [0,0], [20,0], [50,0], [80,0], [100,0],
+ );
+ $polyline->simplify(2);
+ is_deeply $polyline->pp, [ [0,0], [100,0] ], 'Douglas-Peucker';
+}
+
+{
+ my $polyline = Slic3r::Polyline->new(
[0,0], [50,50], [100,0], [125,-25], [150,50],
);
$polyline->simplify(25);
@@ -43,6 +51,14 @@ is_deeply $polyline->pp, [ @$points, @$points ], 'append_polyline';
}
{
+ my $polyline = Slic3r::Polyline->new(
+ [0,0], [100,0], [50,10],
+ );
+ $polyline->simplify(25);
+ is_deeply $polyline->pp, [ [0,0], [100,0], [50,10] ], 'Douglas-Peucker uses shortest distance instead of perpendicular distance';
+}
+
+{
my $polyline = Slic3r::Polyline->new(@$points);
is $polyline->length, 100*2, 'length';
$polyline->extend_end(50);