clipper.hpp | clipper.hpp | |||
---|---|---|---|---|
/************************************************************************** ***** | /************************************************************************** ***** | |||
* * | * * | |||
* Author : Angus Johnson * | * Author : Angus Johnson * | |||
* Version : 4.7.6 | * Version : 4.8.0 | |||
* | * | |||
* Date : 11 April 2012 | * Date : 30 April 2012 | |||
* | * | |||
* Website : http://www.angusj.com * | * Website : http://www.angusj.com * | |||
* Copyright : Angus Johnson 2010-2012 * | * Copyright : Angus Johnson 2010-2012 * | |||
* * | * * | |||
* License: * | * License: * | |||
* Use, modification & distribution is subject to Boost Software License Ver 1. * | * Use, modification & distribution is subject to Boost Software License Ver 1. * | |||
* http://www.boost.org/LICENSE_1_0.txt * | * http://www.boost.org/LICENSE_1_0.txt * | |||
* * | * * | |||
* Attributions: * | * Attributions: * | |||
* The code in this library is an extension of Bala Vatti's clipping algorit hm: * | * The code in this library is an extension of Bala Vatti's clipping algorit hm: * | |||
* "A generic solution to polygon clipping" * | * "A generic solution to polygon clipping" * | |||
skipping to change at line 90 | skipping to change at line 90 | |||
void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, | void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys, | |||
double delta, JoinType jointype = jtSquare, double MiterLimit = 2); | double delta, JoinType jointype = jtSquare, double MiterLimit = 2); | |||
void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys); | void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys); | |||
void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys); | void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys); | |||
void SimplifyPolygons(Polygons &polys); | void SimplifyPolygons(Polygons &polys); | |||
void ReversePoints(Polygon& p); | void ReversePoints(Polygon& p); | |||
void ReversePoints(Polygons& p); | void ReversePoints(Polygons& p); | |||
//used internally ... | //used internally ... | |||
enum EdgeSide { esLeft, esRight }; | enum EdgeSide { esNeither = 0, esLeft = 1, esRight = 2, esBoth = 3 }; | |||
enum IntersectProtects { ipNone = 0, ipLeft = 1, ipRight = 2, ipBoth = 3 }; | enum IntersectProtects { ipNone = 0, ipLeft = 1, ipRight = 2, ipBoth = 3 }; | |||
struct TEdge { | struct TEdge { | |||
long64 xbot; | long64 xbot; | |||
long64 ybot; | long64 ybot; | |||
long64 xcurr; | long64 xcurr; | |||
long64 ycurr; | long64 ycurr; | |||
long64 xtop; | long64 xtop; | |||
long64 ytop; | long64 ytop; | |||
double dx; | double dx; | |||
skipping to change at line 145 | skipping to change at line 145 | |||
struct OutPt; //forward declaration | struct OutPt; //forward declaration | |||
struct OutRec { | struct OutRec { | |||
int idx; | int idx; | |||
bool isHole; | bool isHole; | |||
OutRec *FirstLeft; | OutRec *FirstLeft; | |||
OutRec *AppendLink; | OutRec *AppendLink; | |||
OutPt *pts; | OutPt *pts; | |||
OutPt *bottomPt; | OutPt *bottomPt; | |||
TEdge *bottomE1; | OutPt *bottomFlag; | |||
TEdge *bottomE2; | EdgeSide sides; | |||
}; | }; | |||
struct OutPt { | struct OutPt { | |||
int idx; | int idx; | |||
IntPoint pt; | IntPoint pt; | |||
OutPt *next; | OutPt *next; | |||
OutPt *prev; | OutPt *prev; | |||
}; | }; | |||
struct JoinRec { | struct JoinRec { | |||
skipping to change at line 262 | skipping to change at line 262 | |||
void ProcessHorizontal(TEdge *horzEdge); | void ProcessHorizontal(TEdge *horzEdge); | |||
void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); | void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); | |||
void AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); | void AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt); | |||
void AppendPolygon(TEdge *e1, TEdge *e2); | void AppendPolygon(TEdge *e1, TEdge *e2); | |||
void DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt); | void DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt); | |||
void DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt); | void DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt); | |||
void DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt); | void DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt); | |||
void IntersectEdges(TEdge *e1, TEdge *e2, | void IntersectEdges(TEdge *e1, TEdge *e2, | |||
const IntPoint &pt, IntersectProtects protects); | const IntPoint &pt, IntersectProtects protects); | |||
OutRec* CreateOutRec(); | OutRec* CreateOutRec(); | |||
void AddOutPt(TEdge *e, TEdge *altE, const IntPoint &pt); | void AddOutPt(TEdge *e, const IntPoint &pt); | |||
void DisposeBottomPt(OutRec &outRec); | ||||
void DisposeAllPolyPts(); | void DisposeAllPolyPts(); | |||
void DisposeOutRec(PolyOutList::size_type index, bool ignorePts = false); | void DisposeOutRec(PolyOutList::size_type index); | |||
bool ProcessIntersections(const long64 botY, const long64 topY); | bool ProcessIntersections(const long64 botY, const long64 topY); | |||
void AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt); | void AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt); | |||
void BuildIntersectList(const long64 botY, const long64 topY); | void BuildIntersectList(const long64 botY, const long64 topY); | |||
void ProcessIntersectList(); | void ProcessIntersectList(); | |||
void ProcessEdgesAtTopOfScanbeam(const long64 topY); | void ProcessEdgesAtTopOfScanbeam(const long64 topY); | |||
void BuildResult(Polygons& polys); | void BuildResult(Polygons& polys); | |||
void BuildResultEx(ExPolygons& polys); | void BuildResultEx(ExPolygons& polys); | |||
void SetHoleState(TEdge *e, OutRec *OutRec); | void SetHoleState(TEdge *e, OutRec *OutRec); | |||
void DisposeIntersectNodes(); | void DisposeIntersectNodes(); | |||
bool FixupIntersections(); | bool FixupIntersections(); | |||
End of changes. 5 change blocks. | ||||
9 lines changed or deleted | 10 lines changed or added | |||