Implemented split_at_index() and split_at_first_point() for Polygon
This commit is contained in:
parent
62e5bd0ee7
commit
0d07a2e4e6
@ -16,6 +16,8 @@ namespace Slic3r {
|
|||||||
class Polygon : public MultiPoint {
|
class Polygon : public MultiPoint {
|
||||||
public:
|
public:
|
||||||
Lines lines();
|
Lines lines();
|
||||||
|
Polyline* split_at_index(int index);
|
||||||
|
Polyline* split_at_first_point();
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<Polygon> Polygons;
|
typedef std::vector<Polygon> Polygons;
|
||||||
@ -31,6 +33,25 @@ Polygon::lines()
|
|||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Polyline*
|
||||||
|
Polygon::split_at_index(int index)
|
||||||
|
{
|
||||||
|
Polyline* poly = new Polyline;
|
||||||
|
for (int i = index; i < this->points.size(); i++) {
|
||||||
|
poly->points.push_back( this->points[i] );
|
||||||
|
}
|
||||||
|
for (int i = 0; i < index; i++) {
|
||||||
|
poly->points.push_back( this->points[i] );
|
||||||
|
}
|
||||||
|
return poly;
|
||||||
|
}
|
||||||
|
|
||||||
|
Polyline*
|
||||||
|
Polygon::split_at_first_point()
|
||||||
|
{
|
||||||
|
return this->split_at_index(0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -4,7 +4,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
use Slic3r::XS;
|
use Slic3r::XS;
|
||||||
use Test::More tests => 4;
|
use Test::More tests => 6;
|
||||||
|
|
||||||
my $square = [ # ccw
|
my $square = [ # ccw
|
||||||
[100, 100],
|
[100, 100],
|
||||||
@ -27,4 +27,7 @@ is_deeply [ map $_->pp, @$lines ], [
|
|||||||
[ [100, 200], [100, 100] ],
|
[ [100, 200], [100, 100] ],
|
||||||
], 'polygon lines';
|
], 'polygon lines';
|
||||||
|
|
||||||
|
is_deeply $polygon->split_at_first_point->pp, $square, 'split_at_first_point';
|
||||||
|
is_deeply $polygon->split_at_index(2)->pp, [ @$square[2,3,0,1] ], 'split_at_index';
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
@ -16,6 +16,10 @@
|
|||||||
void scale(double factor);
|
void scale(double factor);
|
||||||
void translate(double x, double y);
|
void translate(double x, double y);
|
||||||
Lines lines();
|
Lines lines();
|
||||||
|
Polyline* split_at_index(int index)
|
||||||
|
%code{% const char* CLASS = "Slic3r::Polyline"; RETVAL = THIS->split_at_index(index); %};
|
||||||
|
Polyline* split_at_first_point()
|
||||||
|
%code{% const char* CLASS = "Slic3r::Polyline"; RETVAL = THIS->split_at_first_point(); %};
|
||||||
%{
|
%{
|
||||||
|
|
||||||
Polygon*
|
Polygon*
|
||||||
|
Loading…
Reference in New Issue
Block a user