Ported union() to XS

This commit is contained in:
Alessandro Ranellucci 2013-08-17 12:24:04 +02:00
parent fa07c512b4
commit 94ca28644e
4 changed files with 16 additions and 14 deletions

View file

@ -25,17 +25,6 @@ sub safety_offset_ex {
@{Math::Clipper::ex_int_offset(_convert($polygons), $factor // (scale 1e-05), 100000, JT_MITER, 2)};
}
sub union {
my ($polygons, $jointype, $safety_offset) = @_;
$jointype = PFT_NONZERO unless defined $jointype;
$clipper->clear;
$clipper->add_subject_polygons(_convert($safety_offset ? safety_offset($polygons) : $polygons));
return [
map Slic3r::Polygon->new(@$_),
@{ $clipper->execute(CT_UNION, $jointype, $jointype) },
];
}
sub union_pt {
my ($polygons, $jointype, $safety_offset) = @_;
$jointype = PFT_NONZERO unless defined $jointype;

View file

@ -271,11 +271,14 @@ void xor_ex(Slic3r::Polygons &subject, Slic3r::Polygons &clip, Slic3r::ExPolygon
_clipper(ClipperLib::ctXor, subject, clip, retval, safety_offset);
}
void union_ex(Slic3r::Polygons &subject, Slic3r::ExPolygons &retval, bool safety_offset)
template <class T>
void union_(Slic3r::Polygons &subject, T &retval, bool safety_offset)
{
Slic3r::Polygons p;
_clipper(ClipperLib::ctUnion, subject, p, retval, safety_offset);
}
template void union_<Slic3r::ExPolygons>(Slic3r::Polygons &subject, Slic3r::ExPolygons &retval, bool safety_offset);
template void union_<Slic3r::Polygons>(Slic3r::Polygons &subject, Slic3r::Polygons &retval, bool safety_offset);
void simplify_polygons(Slic3r::Polygons &subject, Slic3r::Polygons &retval)
{

View file

@ -60,7 +60,8 @@ void intersection(Slic3r::Polygons &subject, Slic3r::Polygons &clip, T &retval,
void xor_ex(Slic3r::Polygons &subject, Slic3r::Polygons &clip, Slic3r::ExPolygons &retval,
bool safety_offset = false);
void union_ex(Slic3r::Polygons &subject, Slic3r::ExPolygons &retval, bool safety_offset = false);
template <class T>
void union_(Slic3r::Polygons &subject, T &retval, bool safety_offset = false);
void simplify_polygons(Slic3r::Polygons &subject, Slic3r::Polygons &retval);

View file

@ -110,12 +110,21 @@ xor_ex(subject, clip, safety_offset = false)
OUTPUT:
RETVAL
Polygons
union(subject, safety_offset = false)
Polygons subject
bool safety_offset
CODE:
union_(subject, RETVAL, safety_offset);
OUTPUT:
RETVAL
ExPolygons
union_ex(subject, safety_offset = false)
Polygons subject
bool safety_offset
CODE:
union_ex(subject, RETVAL, safety_offset);
union_(subject, RETVAL, safety_offset);
OUTPUT:
RETVAL