Optimization in Polyline instantiation

This commit is contained in:
Alessandro Ranellucci 2013-07-05 14:29:57 +02:00
parent 27c421c27f
commit 8061cc6e30
14 changed files with 40 additions and 45 deletions

View file

@ -12,26 +12,26 @@ BEGIN {
use Slic3r;
{
my $polygon = Slic3r::Polygon->new([
my $polygon = Slic3r::Polygon->new(
[5,0], [10,0], [15,0], [20,0], [20,10], [20,30], [0,0],
]);
);
$polygon->merge_continuous_lines;
is scalar(@$polygon), 3, 'merge_continuous_lines';
}
{
my $polyline = Slic3r::Polyline->new([
my $polyline = Slic3r::Polyline->new(
[0,0],[1,0],[2,0],[2,1],[2,2],[1,2],[0,2],[0,1],[0,0],
]);
);
$polyline = $polyline->simplify(1);
is_deeply $polyline, [ [0, 0], [2, 0], [2, 2], [0, 2], [0, 0] ], 'Douglas-Peucker';
}
{
my $polyline = Slic3r::Polyline->new([
my $polyline = Slic3r::Polyline->new(
[0,0],[0.5,0.5],[1,0],[1.25,-0.25],[1.5,.5],
]);
);
$polyline->scale(100);
$polyline = $polyline->simplify(25);
is_deeply $polyline, [ [0, 0], [50, 50], [125, -25], [150, 50] ], 'Douglas-Peucker';
@ -69,7 +69,7 @@ use Slic3r;
[197.307,292.831], [199.808,313.1906], [191.5298,315.0787], [187.3082,299.8172], [186.4201,295.3766],
[180.595,296.0487], [161.7854,297.4248], [156.8058,297.6214], [154.3395,317.8592],
];
my $polygon = Slic3r::Polygon->new($gear);
my $polygon = Slic3r::Polygon->new(@$gear);
$polygon->merge_continuous_lines;
note sprintf "original points: %d\nnew points: %d", scalar(@$gear), scalar(@$polygon);
ok @$polygon < @$gear, 'gear was simplified using merge_continuous_lines';
@ -114,7 +114,7 @@ use Slic3r;
[3368.3,7868.6],[3409.2,7889.5],[3553.8,7963.2],[3596,7981.4],
];
my $polygon = Slic3r::Polygon->new($circle);
my $polygon = Slic3r::Polygon->new(@$circle);
$polygon->merge_continuous_lines;
note sprintf "original points: %d\nnew points: %d", scalar(@$circle), scalar(@$polygon);
ok @$polygon >= @$circle/3, 'circle was simplified using merge_continuous_lines';

View file

@ -103,7 +103,7 @@ is_deeply $intersection, [ [120, 120], [180, 160] ], 'internal lines are preserv
], 'tangent line is clipped to square with hole';
}
{
my $polyline = Slic3r::Polyline->new([ [50, 180], [250, 180], [250, 150], [150, 150], [150, 120], [120, 120], [120, 50] ]);
my $polyline = Slic3r::Polyline->new([50, 180], [250, 180], [250, 150], [150, 150], [150, 120], [120, 120], [120, 50]);
is_deeply [ map $_, $polyline->clip_with_expolygon($expolygon) ], [
[ [100, 180], [200, 180] ],
[ [200, 150], [160, 150] ],

View file

@ -21,7 +21,7 @@ use Slic3r::Geometry qw(scale);
foreach my $point (@$points) {
@$point = map scale $_, @$point;
}
my $polyline = Slic3r::Polyline->new($points);
my $polyline = Slic3r::Polyline->new(@$points);
my $serialized = $polyline->serialize;
my $deserialized = Slic3r::Polyline->deserialize($serialized);
is scalar(@$deserialized), scalar(@$points), 'number of deserialized points';