mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-05-29 17:44:36 +08:00
Ported union() to XS
This commit is contained in:
parent
fa07c512b4
commit
94ca28644e
@ -25,17 +25,6 @@ sub safety_offset_ex {
|
|||||||
@{Math::Clipper::ex_int_offset(_convert($polygons), $factor // (scale 1e-05), 100000, JT_MITER, 2)};
|
@{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 {
|
sub union_pt {
|
||||||
my ($polygons, $jointype, $safety_offset) = @_;
|
my ($polygons, $jointype, $safety_offset) = @_;
|
||||||
$jointype = PFT_NONZERO unless defined $jointype;
|
$jointype = PFT_NONZERO unless defined $jointype;
|
||||||
|
@ -271,11 +271,14 @@ void xor_ex(Slic3r::Polygons &subject, Slic3r::Polygons &clip, Slic3r::ExPolygon
|
|||||||
_clipper(ClipperLib::ctXor, subject, clip, retval, safety_offset);
|
_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;
|
Slic3r::Polygons p;
|
||||||
_clipper(ClipperLib::ctUnion, subject, p, retval, safety_offset);
|
_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)
|
void simplify_polygons(Slic3r::Polygons &subject, Slic3r::Polygons &retval)
|
||||||
{
|
{
|
||||||
|
@ -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,
|
void xor_ex(Slic3r::Polygons &subject, Slic3r::Polygons &clip, Slic3r::ExPolygons &retval,
|
||||||
bool safety_offset = false);
|
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);
|
void simplify_polygons(Slic3r::Polygons &subject, Slic3r::Polygons &retval);
|
||||||
|
|
||||||
|
@ -110,12 +110,21 @@ xor_ex(subject, clip, safety_offset = false)
|
|||||||
OUTPUT:
|
OUTPUT:
|
||||||
RETVAL
|
RETVAL
|
||||||
|
|
||||||
|
Polygons
|
||||||
|
union(subject, safety_offset = false)
|
||||||
|
Polygons subject
|
||||||
|
bool safety_offset
|
||||||
|
CODE:
|
||||||
|
union_(subject, RETVAL, safety_offset);
|
||||||
|
OUTPUT:
|
||||||
|
RETVAL
|
||||||
|
|
||||||
ExPolygons
|
ExPolygons
|
||||||
union_ex(subject, safety_offset = false)
|
union_ex(subject, safety_offset = false)
|
||||||
Polygons subject
|
Polygons subject
|
||||||
bool safety_offset
|
bool safety_offset
|
||||||
CODE:
|
CODE:
|
||||||
union_ex(subject, RETVAL, safety_offset);
|
union_(subject, RETVAL, safety_offset);
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
RETVAL
|
RETVAL
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user