diff options
author | Alessandro Ranellucci <aar@cpan.org> | 2015-01-03 17:03:53 +0300 |
---|---|---|
committer | Alessandro Ranellucci <aar@cpan.org> | 2015-01-03 17:03:53 +0300 |
commit | d8be67c28bca470bcc0cb334d3073d122c296404 (patch) | |
tree | 7c82c9001e9985a7956b748ae8dcc46db4b8bcc9 /xs/t | |
parent | 69da8b09997c58c3f47d1e676fe578f68cbb96e9 (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.t | 19 | ||||
-rw-r--r-- | xs/t/09_polyline.t | 18 |
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); |