|
| v0.14.0
|
Go to the documentation of this file.
37 #define CLIPPER_VERSION "6.2.6"
77 typedef signed long long cInt;
97 return a.X == b.
X &&
a.Y == b.
Y;
101 return a.X != b.
X ||
a.Y != b.
Y;
106 typedef std::vector< IntPoint >
Path;
112 std::ostream&
operator <<(std::ostream &s,
const IntPoint &p);
126 typedef void (*ZFillCallback)(IntPoint& e1bot, IntPoint& e1top, IntPoint& e2bot, IntPoint& e2top, IntPoint& pt);
134 typedef std::vector< PolyNode* >
PolyNodes;
202 struct IntersectNode;
225 virtual void Clear();
232 virtual void Reset();
285 void ZFillFunction(ZFillCallback zFillFunc);
304 ZFillCallback m_ZFill;
361 ClipperOffset(
double miterLimit = 2.0,
double roundPrecision = 0.25);
394 virtual const char*
what()
const throw() {
return m_descr.c_str();}
void OpenPathsFromPolyTree(PolyTree &polytree, Paths &paths)
static const cInt loRange
IntPoint(cInt x=0, cInt y=0)
void DoSquare(int j, int k)
bool PopScanbeam(cInt &Y)
std::vector< IntPoint > Path
bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl)
void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt)
std::vector< Path > Paths
std::vector< OutRec * > PolyOutList
void IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &pt)
void InsertEdgeIntoAEL(TEdge *edge, TEdge *startEdge)
void DisposeIntersectNodes()
PolyFillType m_ClipFillType
void PreserveCollinear(bool value)
void AddChild(PolyNode &child)
void AddPath(const Path &path, JoinType joinType, EndType endType)
std::vector< IntersectNode * > IntersectList
TEdge * ProcessBound(TEdge *E, bool IsClockwise)
void FixupFirstLefts2(OutRec *InnerOutRec, OutRec *OuterOutRec)
std::vector< PolyNode * > PolyNodes
void SetWindingCount(TEdge &edge)
bool Execute(ClipType clipType, Paths &solution, PolyFillType fillType=pftEvenOdd)
void AddEdgeToSEL(TEdge *edge)
void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2)
void InsertLocalMinimaIntoAEL(const cInt botY)
void Execute(Paths &solution, double delta)
void ProcessHorizontal(TEdge *horzEdge)
void BuildIntersectList(const cInt topY)
double Area(const Path &poly)
void InsertScanbeam(const cInt Y)
bool Orientation(const Path &poly)
bool ProcessIntersections(const cInt topY)
void CleanPolygon(const Path &in_poly, Path &out_poly, double distance=1.415)
OutPt * AddOutPt(TEdge *e, const IntPoint &pt)
virtual bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed)
bool LocalMinimaPending()
void DeleteFromAEL(TEdge *e)
friend bool operator==(const IntPoint &a, const IntPoint &b)
void UpdateEdgeIntoAEL(TEdge *&e)
bool IsTopHorz(const cInt XPos)
void ReverseSolution(bool value)
void DoMiter(int j, int k, double r)
unsigned long long ulong64
Clipper(int initOptions=0)
Path & operator<<(Path &poly, const IntPoint &p)
static const cInt hiRange
void DisposeOutRec(PolyOutList::size_type index)
void FixupFirstLefts1(OutRec *OldOutRec, OutRec *NewOutRec)
void MinkowskiSum(const Path &pattern, const Path &path, Paths &solution, bool pathIsClosed)
void AddGhostJoin(OutPt *op, const IntPoint offPt)
void MinkowskiDiff(const Path &poly1, const Path &poly2, Paths &solution)
static constexpr double delta
void FixupOutPolyline(OutRec &outrec)
bool IsContributing(const TEdge &edge) const
std::vector< LocalMinimum > MinimaList
void ClosedPathsFromPolyTree(const PolyTree &polytree, Paths &paths)
void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType=pftEvenOdd)
DoublePoint(double x=0, double y=0)
void ReversePath(Path &p)
OutPt * GetLastOutPt(TEdge *e)
PolyNode * GetNext() const
std::list< cInt > MaximaList
void DisposeLocalMinimaList()
void DeleteFromSEL(TEdge *e)
void FixupFirstLefts3(OutRec *OldOutRec, OutRec *NewOutRec)
PolyFillType m_SubjFillType
TEdge * AddBoundsToLML(TEdge *e, bool IsClosed)
bool FixupIntersectionOrder()
void FixHoleLinkage(OutRec &outrec)
MinimaList::iterator m_CurrentLM
bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)
std::priority_queue< cInt > ScanbeamList
OutPt * AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt)
PolyNode * GetFirst() const
bool PopLocalMinima(cInt Y, const LocalMinimum *&locMin)
void CleanPolygons(const Paths &in_polys, Paths &out_polys, double distance=1.415)
void DoRound(int j, int k)
void OffsetPoint(int j, int &k, JoinType jointype)
std::vector< Join * > JoinList
int PointInPolygon(const IntPoint &pt, const Path &path)
IntersectList m_IntersectList
void PolyTreeToPaths(const PolyTree &polytree, Paths &paths)
void FixupOutPolygon(OutRec &outrec)
virtual const char * what() const
FTensor::Index< 'j', 3 > j
std::vector< TEdge * > EdgeList
ClipperOffset(double miterLimit=2.0, double roundPrecision=0.25)
void StrictlySimple(bool value)
bool IsEvenOddAltFillType(const TEdge &edge) const
virtual bool ExecuteInternal()
bool PopEdgeFromSEL(TEdge *&edge)
void DoOffset(double delta)
OutRec * GetOutRec(int idx)
PolyNode * GetNextSiblingUp() const
void BuildResult2(PolyTree &polytree)
void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2)
std::vector< DoublePoint > m_normals
bool IsEvenOddFillType(const TEdge &edge) const
bool JoinPoints(Join *j, OutRec *outRec1, OutRec *outRec2)
void ProcessHorizontals()
virtual ~clipperException()
void AddPaths(const Paths &paths, JoinType joinType, EndType endType)
void ReversePaths(Paths &p)
void SetHoleState(TEdge *e, OutRec *outrec)
void AppendPolygon(TEdge *e1, TEdge *e2)
FTensor::Index< 'k', 3 > k
void ProcessEdgesAtTopOfScanbeam(const cInt topY)
void ProcessIntersectList()
friend bool operator!=(const IntPoint &a, const IntPoint &b)
void BuildResult(Paths &polys)
clipperException(const char *description)
void AddJoin(OutPt *op1, OutPt *op2, const IntPoint offPt)
void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType=pftEvenOdd)