mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-25 07:34:03 -06:00
Ported intersect_expolygons() and subtract_expolygons() to XS
This commit is contained in:
parent
5f81292f3f
commit
761f261a68
11 changed files with 95 additions and 29 deletions
|
@ -1,4 +1,7 @@
|
|||
#include "ExtrusionEntity.hpp"
|
||||
#include "ExtrusionEntityCollection.hpp"
|
||||
#include "ExPolygonCollection.hpp"
|
||||
#include "ClipperUtils.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
|
@ -26,6 +29,36 @@ ExtrusionPath::last_point() const
|
|||
return new Point(this->polyline.points.back());
|
||||
}
|
||||
|
||||
ExtrusionEntityCollection*
|
||||
ExtrusionPath::intersect_expolygons(ExPolygonCollection* collection) const
|
||||
{
|
||||
// perform clipping
|
||||
Polylines clipped;
|
||||
intersection(this->polyline, *collection, clipped);
|
||||
return this->_inflate_collection(clipped);
|
||||
}
|
||||
|
||||
ExtrusionEntityCollection*
|
||||
ExtrusionPath::subtract_expolygons(ExPolygonCollection* collection) const
|
||||
{
|
||||
// perform clipping
|
||||
Polylines clipped;
|
||||
diff(this->polyline, *collection, clipped);
|
||||
return this->_inflate_collection(clipped);
|
||||
}
|
||||
|
||||
ExtrusionEntityCollection*
|
||||
ExtrusionPath::_inflate_collection(const Polylines &polylines) const
|
||||
{
|
||||
ExtrusionEntityCollection* retval = new ExtrusionEntityCollection();
|
||||
for (Polylines::const_iterator it = polylines.begin(); it != polylines.end(); ++it) {
|
||||
ExtrusionPath* path = this->clone();
|
||||
path->polyline = *it;
|
||||
retval->entities.push_back(path);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
ExtrusionLoop*
|
||||
ExtrusionLoop::clone() const
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue