37#define CLIPPER_VERSION "6.4.2"
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;
106typedef std::vector< IntPoint >
Path;
296 typedef std::list<cInt> MaximaList;
298 TEdge *m_SortedEdges;
299 bool m_ExecuteLocked;
302 bool m_ReverseOutput;
303 bool m_UsingPolyTree;
308 void SetWindingCount(TEdge& edge);
309 bool IsEvenOddFillType(
const TEdge& edge)
const;
310 bool IsEvenOddAltFillType(
const TEdge& edge)
const;
311 void InsertLocalMinimaIntoAEL(
const cInt botY);
312 void InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge);
313 void AddEdgeToSEL(TEdge *edge);
314 bool PopEdgeFromSEL(TEdge *&edge);
316 void DeleteFromSEL(TEdge *
e);
317 void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2);
318 bool IsContributing(
const TEdge& edge)
const;
319 bool IsTopHorz(
const cInt XPos);
320 void DoMaxima(TEdge *
e);
321 void ProcessHorizontals();
322 void ProcessHorizontal(TEdge *horzEdge);
323 void AddLocalMaxPoly(TEdge *e1, TEdge *e2,
const IntPoint &pt);
324 OutPt* AddLocalMinPoly(TEdge *e1, TEdge *e2,
const IntPoint &pt);
325 OutRec* GetOutRec(
int idx);
326 void AppendPolygon(TEdge *e1, TEdge *e2);
327 void IntersectEdges(TEdge *e1, TEdge *e2,
IntPoint &pt);
328 OutPt* AddOutPt(TEdge *
e,
const IntPoint &pt);
329 OutPt* GetLastOutPt(TEdge *
e);
330 bool ProcessIntersections(
const cInt topY);
331 void BuildIntersectList(
const cInt topY);
332 void ProcessIntersectList();
333 void ProcessEdgesAtTopOfScanbeam(
const cInt topY);
334 void BuildResult(
Paths& polys);
335 void BuildResult2(
PolyTree& polytree);
336 void SetHoleState(TEdge *
e, OutRec *outrec);
337 void DisposeIntersectNodes();
338 bool FixupIntersectionOrder();
339 void FixupOutPolygon(OutRec &outrec);
340 void FixupOutPolyline(OutRec &outrec);
341 bool IsHole(TEdge *
e);
342 bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl);
343 void FixHoleLinkage(OutRec &outrec);
344 void AddJoin(OutPt *op1, OutPt *op2,
const IntPoint offPt);
346 void ClearGhostJoins();
347 void AddGhostJoin(OutPt *op,
const IntPoint offPt);
348 bool JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2);
349 void JoinCommonEdges();
350 void DoSimplePolygons();
351 void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec);
352 void FixupFirstLefts2(OutRec* InnerOutRec, OutRec* OuterOutRec);
353 void FixupFirstLefts3(OutRec* OldOutRec, OutRec* NewOutRec);
355 void SetZ(
IntPoint& pt, TEdge& e1, TEdge& e2);
376 std::vector<DoublePoint> m_normals;
377 double m_delta, m_sinA, m_sin, m_cos;
378 double m_miterLim, m_StepsPerRad;
382 void FixOrientations();
383 void DoOffset(
double delta);
384 void OffsetPoint(
int j,
int& k,
JoinType jointype);
385 void DoSquare(
int j,
int k);
386 void DoMiter(
int j,
int k,
double r);
387 void DoRound(
int j,
int k);
396 virtual const char*
what()
const throw() {
return m_descr.c_str();}
const cJSON *const b
Definition: cJSON.h:251
int index
Definition: cJSON.h:168
const char *const string
Definition: cJSON.h:170
Definition: clipper.hpp:221
bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)
TEdge * ProcessBound(TEdge *E, bool IsClockwise)
void DisposeLocalMinimaList()
void UpdateEdgeIntoAEL(TEdge *&e)
std::priority_queue< cInt > ScanbeamList
Definition: clipper.hpp:258
TEdge * AddBoundsToLML(TEdge *e, bool IsClosed)
virtual bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed)
ScanbeamList m_Scanbeam
Definition: clipper.hpp:259
EdgeList m_edges
Definition: clipper.hpp:252
void DeleteFromAEL(TEdge *e)
bool PreserveCollinear()
Definition: clipper.hpp:229
MinimaList m_MinimaList
Definition: clipper.hpp:249
bool m_HasOpenPaths
Definition: clipper.hpp:254
void PreserveCollinear(bool value)
Definition: clipper.hpp:230
bool m_PreserveCollinear
Definition: clipper.hpp:253
void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2)
MinimaList::iterator m_CurrentLM
Definition: clipper.hpp:248
void InsertScanbeam(const cInt Y)
bool PopScanbeam(cInt &Y)
std::vector< LocalMinimum > MinimaList
Definition: clipper.hpp:247
PolyOutList m_PolyOuts
Definition: clipper.hpp:255
bool LocalMinimaPending()
void DisposeOutRec(PolyOutList::size_type index)
bool m_UseFullRange
Definition: clipper.hpp:251
bool PopLocalMinima(cInt Y, const LocalMinimum *&locMin)
TEdge * m_ActiveEdges
Definition: clipper.hpp:256
Definition: clipper.hpp:361
void AddPath(const Path &path, JoinType joinType, EndType endType)
void AddPaths(const Paths &paths, JoinType joinType, EndType endType)
double MiterLimit
Definition: clipper.hpp:370
void Execute(PolyTree &solution, double delta)
ClipperOffset(double miterLimit=2.0, double roundPrecision=0.25)
double ArcTolerance
Definition: clipper.hpp:371
void Execute(Paths &solution, double delta)
Definition: clipper.hpp:264
virtual bool ExecuteInternal()
bool Execute(ClipType clipType, Paths &solution, PolyFillType fillType=pftEvenOdd)
bool Execute(ClipType clipType, Paths &solution, PolyFillType subjFillType, PolyFillType clipFillType)
void ReverseSolution(bool value)
Definition: clipper.hpp:282
bool StrictlySimple()
Definition: clipper.hpp:283
bool Execute(ClipType clipType, PolyTree &polytree, PolyFillType subjFillType, PolyFillType clipFillType)
void ZFillFunction(ZFillCallback zFillFunc)
void StrictlySimple(bool value)
Definition: clipper.hpp:284
bool Execute(ClipType clipType, PolyTree &polytree, PolyFillType fillType=pftEvenOdd)
bool ReverseSolution()
Definition: clipper.hpp:281
Clipper(int initOptions=0)
Definition: clipper.hpp:137
Path Contour
Definition: clipper.hpp:141
PolyNodes Childs
Definition: clipper.hpp:142
PolyNode * Parent
Definition: clipper.hpp:143
virtual ~PolyNode()
Definition: clipper.hpp:140
PolyNode * GetNext() const
Definition: clipper.hpp:161
~PolyTree()
Definition: clipper.hpp:163
PolyNode * GetFirst() const
Definition: clipper.hpp:392
virtual const char * what() const
Definition: clipper.hpp:396
clipperException(const char *description)
Definition: clipper.hpp:394
virtual ~clipperException()
Definition: clipper.hpp:395
Definition: clipper.hpp:62
unsigned long long ulong64
Definition: clipper.hpp:81
EdgeSide
Definition: clipper.hpp:200
@ esLeft
Definition: clipper.hpp:200
@ esRight
Definition: clipper.hpp:200
InitOptions
Definition: clipper.hpp:129
@ ioReverseSolution
Definition: clipper.hpp:129
@ ioPreserveCollinear
Definition: clipper.hpp:129
@ ioStrictlySimple
Definition: clipper.hpp:129
void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType=pftEvenOdd)
void PolyTreeToPaths(const PolyTree &polytree, Paths &paths)
ClipType
Definition: clipper.hpp:64
@ ctXor
Definition: clipper.hpp:64
@ ctIntersection
Definition: clipper.hpp:64
@ ctUnion
Definition: clipper.hpp:64
@ ctDifference
Definition: clipper.hpp:64
double Area(const Path &poly)
std::vector< Path > Paths
Definition: clipper.hpp:107
void CleanPolygons(const Paths &in_polys, Paths &out_polys, double distance=1.415)
PolyType
Definition: clipper.hpp:65
@ ptClip
Definition: clipper.hpp:65
@ ptSubject
Definition: clipper.hpp:65
static cInt const hiRange
Definition: clipper.hpp:79
signed long long cInt
Definition: clipper.hpp:77
void MinkowskiDiff(const Path &poly1, const Path &poly2, Paths &solution)
std::vector< Join * > JoinList
Definition: clipper.hpp:212
signed long long long64
Definition: clipper.hpp:80
bool Orientation(const Path &poly)
void ClosedPathsFromPolyTree(const PolyTree &polytree, Paths &paths)
std::vector< TEdge * > EdgeList
Definition: clipper.hpp:211
void(* ZFillCallback)(IntPoint &e1bot, IntPoint &e1top, IntPoint &e2bot, IntPoint &e2top, IntPoint &pt)
Definition: clipper.hpp:126
std::vector< OutRec * > PolyOutList
Definition: clipper.hpp:210
PolyFillType
Definition: clipper.hpp:70
@ pftNegative
Definition: clipper.hpp:70
@ pftPositive
Definition: clipper.hpp:70
@ pftEvenOdd
Definition: clipper.hpp:70
@ pftNonZero
Definition: clipper.hpp:70
std::vector< IntersectNode * > IntersectList
Definition: clipper.hpp:213
void OpenPathsFromPolyTree(PolyTree &polytree, Paths &paths)
void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType=pftEvenOdd)
JoinType
Definition: clipper.hpp:130
@ jtSquare
Definition: clipper.hpp:130
@ jtMiter
Definition: clipper.hpp:130
@ jtRound
Definition: clipper.hpp:130
void ReversePath(Path &p)
static cInt const loRange
Definition: clipper.hpp:78
EndType
Definition: clipper.hpp:131
@ etOpenButt
Definition: clipper.hpp:131
@ etOpenRound
Definition: clipper.hpp:131
@ etClosedLine
Definition: clipper.hpp:131
@ etClosedPolygon
Definition: clipper.hpp:131
@ etOpenSquare
Definition: clipper.hpp:131
int PointInPolygon(const IntPoint &pt, const Path &path)
std::vector< PolyNode * > PolyNodes
Definition: clipper.hpp:134
void MinkowskiSum(const Path &pattern, const Path &path, Paths &solution, bool pathIsClosed)
Path & operator<<(Path &poly, const IntPoint &p)
Definition: clipper.hpp:109
void ReversePaths(Paths &p)
void CleanPolygon(const Path &in_poly, Path &out_poly, double distance=1.415)
std::vector< IntPoint > Path
Definition: clipper.hpp:106
const std::string paths
Definition: RawConsts.hpp:34
static const double e
Definition: exprtk.hpp:758
x y * z
Definition: exprtk.hpp:9663
T value(details::expression_node< T > *n)
Definition: exprtk.hpp:12955
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x(y+z)
Definition: clipper.hpp:117
DoublePoint(double x=0, double y=0)
Definition: clipper.hpp:120
double Y
Definition: clipper.hpp:119
double X
Definition: clipper.hpp:118
DoublePoint(IntPoint ip)
Definition: clipper.hpp:121
Definition: clipper.hpp:85
cInt X
Definition: clipper.hpp:86
friend bool operator==(const IntPoint &a, const IntPoint &b)
Definition: clipper.hpp:95
cInt Y
Definition: clipper.hpp:87
cInt Z
Definition: clipper.hpp:89
friend bool operator!=(const IntPoint &a, const IntPoint &b)
Definition: clipper.hpp:99
IntPoint(cInt x=0, cInt y=0, cInt z=0)
Definition: clipper.hpp:90
Definition: clipper.hpp:197
cInt top
Definition: clipper.hpp:197
cInt right
Definition: clipper.hpp:197
cInt left
Definition: clipper.hpp:197
cInt bottom
Definition: clipper.hpp:197