diff --git a/t/thin.t b/t/thin.t index 950c4ee75..0b3843a10 100644 --- a/t/thin.t +++ b/t/thin.t @@ -1,4 +1,4 @@ -use Test::More tests => 16; +use Test::More tests => 21; use strict; use warnings; @@ -144,4 +144,29 @@ if (0) { ok unscale($res->[0]->length) >= (200-100 - (120-100)) - epsilon, 'medial axis has reasonable length'; } +{ + # GH #2474 + my $expolygon = Slic3r::ExPolygon->new(Slic3r::Polygon->new( + [91294454,31032190],[11294481,31032190],[11294481,29967810],[44969182,29967810],[89909960,29967808],[91294454,29967808] + )); + my $polylines = $expolygon->medial_axis(1871238, 500000); + + is scalar(@$polylines), 1, 'medial axis is a single polyline'; + my $polyline = $polylines->[0]; + + my $expected_y = $expolygon->bounding_box->center->y; #;; + ok abs(sum(map $_->y, @$polyline) / @$polyline - $expected_y) < scaled_epsilon, #,, + 'medial axis is horizontal and is centered'; + + # order polyline from left to right + $polyline->reverse if $polyline->first_point->x > $polyline->last_point->x; + + my $polyline_bb = $polyline->bounding_box; + is $polyline->first_point->x, $polyline_bb->x_min, 'expected x_min'; + is $polyline->last_point->x, $polyline_bb->x_max, 'expected x_max'; + + is_deeply [ map $_->x, @$polyline ], [ sort map $_->x, @$polyline ], + 'medial axis is not self-overlapping'; +} + __END__