mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-15 14:45:52 +08:00
Updated Clipper to 6.4.0
This commit is contained in:
parent
d47f6d30af
commit
11585b88d5
597
xs/src/clipper.cpp
Normal file → Executable file
597
xs/src/clipper.cpp
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
64
xs/src/clipper.hpp
Normal file → Executable file
64
xs/src/clipper.hpp
Normal file → Executable file
@ -1,8 +1,8 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* *
|
* *
|
||||||
* Author : Angus Johnson *
|
* Author : Angus Johnson *
|
||||||
* Version : 6.2.9 *
|
* Version : 6.4.0 *
|
||||||
* Date : 16 February 2015 *
|
* Date : 2 July 2015 *
|
||||||
* Website : http://www.angusj.com *
|
* Website : http://www.angusj.com *
|
||||||
* Copyright : Angus Johnson 2010-2015 *
|
* Copyright : Angus Johnson 2010-2015 *
|
||||||
* *
|
* *
|
||||||
@ -220,20 +220,27 @@ class ClipperBase
|
|||||||
public:
|
public:
|
||||||
ClipperBase();
|
ClipperBase();
|
||||||
virtual ~ClipperBase();
|
virtual ~ClipperBase();
|
||||||
bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed);
|
virtual bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed);
|
||||||
bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed);
|
bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed);
|
||||||
virtual void Clear();
|
virtual void Clear();
|
||||||
IntRect GetBounds();
|
IntRect GetBounds();
|
||||||
bool PreserveCollinear() const {return m_PreserveCollinear;};
|
bool PreserveCollinear() {return m_PreserveCollinear;};
|
||||||
void PreserveCollinear(bool value) {m_PreserveCollinear = value;};
|
void PreserveCollinear(bool value) {m_PreserveCollinear = value;};
|
||||||
protected:
|
protected:
|
||||||
void DisposeLocalMinimaList();
|
void DisposeLocalMinimaList();
|
||||||
TEdge* AddBoundsToLML(TEdge *e, bool IsClosed);
|
TEdge* AddBoundsToLML(TEdge *e, bool IsClosed);
|
||||||
void PopLocalMinima();
|
|
||||||
virtual void Reset();
|
virtual void Reset();
|
||||||
TEdge* ProcessBound(TEdge* E, bool IsClockwise);
|
TEdge* ProcessBound(TEdge* E, bool IsClockwise);
|
||||||
TEdge* DescendToMin(TEdge *&E);
|
void InsertScanbeam(const cInt Y);
|
||||||
void AscendToMax(TEdge *&E, bool Appending, bool IsClosed);
|
bool PopScanbeam(cInt &Y);
|
||||||
|
bool LocalMinimaPending();
|
||||||
|
bool PopLocalMinima(cInt Y, const LocalMinimum *&locMin);
|
||||||
|
OutRec* CreateOutRec();
|
||||||
|
void DisposeAllOutRecs();
|
||||||
|
void DisposeOutRec(PolyOutList::size_type index);
|
||||||
|
void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2);
|
||||||
|
void DeleteFromAEL(TEdge *e);
|
||||||
|
void UpdateEdgeIntoAEL(TEdge *&e);
|
||||||
|
|
||||||
typedef std::vector<LocalMinimum> MinimaList;
|
typedef std::vector<LocalMinimum> MinimaList;
|
||||||
MinimaList::iterator m_CurrentLM;
|
MinimaList::iterator m_CurrentLM;
|
||||||
@ -241,8 +248,13 @@ protected:
|
|||||||
|
|
||||||
bool m_UseFullRange;
|
bool m_UseFullRange;
|
||||||
EdgeList m_edges;
|
EdgeList m_edges;
|
||||||
bool m_PreserveCollinear;
|
bool m_PreserveCollinear;
|
||||||
bool m_HasOpenPaths;
|
bool m_HasOpenPaths;
|
||||||
|
PolyOutList m_PolyOuts;
|
||||||
|
TEdge *m_ActiveEdges;
|
||||||
|
|
||||||
|
typedef std::priority_queue<cInt> ScanbeamList;
|
||||||
|
ScanbeamList m_Scanbeam;
|
||||||
};
|
};
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -250,7 +262,6 @@ class Clipper : public virtual ClipperBase
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Clipper(int initOptions = 0);
|
Clipper(int initOptions = 0);
|
||||||
~Clipper();
|
|
||||||
bool Execute(ClipType clipType,
|
bool Execute(ClipType clipType,
|
||||||
Paths &solution,
|
Paths &solution,
|
||||||
PolyFillType fillType = pftEvenOdd);
|
PolyFillType fillType = pftEvenOdd);
|
||||||
@ -265,28 +276,23 @@ public:
|
|||||||
PolyTree &polytree,
|
PolyTree &polytree,
|
||||||
PolyFillType subjFillType,
|
PolyFillType subjFillType,
|
||||||
PolyFillType clipFillType);
|
PolyFillType clipFillType);
|
||||||
bool ReverseSolution() const { return m_ReverseOutput; };
|
bool ReverseSolution() { return m_ReverseOutput; };
|
||||||
void ReverseSolution(bool value) {m_ReverseOutput = value;};
|
void ReverseSolution(bool value) {m_ReverseOutput = value;};
|
||||||
bool StrictlySimple() const {return m_StrictSimple;};
|
bool StrictlySimple() {return m_StrictSimple;};
|
||||||
void StrictlySimple(bool value) {m_StrictSimple = value;};
|
void StrictlySimple(bool value) {m_StrictSimple = value;};
|
||||||
//set the callback function for z value filling on intersections (otherwise Z is 0)
|
//set the callback function for z value filling on intersections (otherwise Z is 0)
|
||||||
#ifdef use_xyz
|
#ifdef use_xyz
|
||||||
void ZFillFunction(ZFillCallback zFillFunc);
|
void ZFillFunction(ZFillCallback zFillFunc);
|
||||||
#endif
|
#endif
|
||||||
protected:
|
protected:
|
||||||
void Reset();
|
|
||||||
virtual bool ExecuteInternal();
|
virtual bool ExecuteInternal();
|
||||||
private:
|
private:
|
||||||
PolyOutList m_PolyOuts;
|
|
||||||
JoinList m_Joins;
|
JoinList m_Joins;
|
||||||
JoinList m_GhostJoins;
|
JoinList m_GhostJoins;
|
||||||
IntersectList m_IntersectList;
|
IntersectList m_IntersectList;
|
||||||
ClipType m_ClipType;
|
ClipType m_ClipType;
|
||||||
typedef std::priority_queue<cInt> ScanbeamList;
|
|
||||||
ScanbeamList m_Scanbeam;
|
|
||||||
typedef std::list<cInt> MaximaList;
|
typedef std::list<cInt> MaximaList;
|
||||||
MaximaList m_Maxima;
|
MaximaList m_Maxima;
|
||||||
TEdge *m_ActiveEdges;
|
|
||||||
TEdge *m_SortedEdges;
|
TEdge *m_SortedEdges;
|
||||||
bool m_ExecuteLocked;
|
bool m_ExecuteLocked;
|
||||||
PolyFillType m_ClipFillType;
|
PolyFillType m_ClipFillType;
|
||||||
@ -297,42 +303,35 @@ private:
|
|||||||
#ifdef use_xyz
|
#ifdef use_xyz
|
||||||
ZFillCallback m_ZFill; //custom callback
|
ZFillCallback m_ZFill; //custom callback
|
||||||
#endif
|
#endif
|
||||||
void SetWindingCount(TEdge& edge) const;
|
void SetWindingCount(TEdge& edge);
|
||||||
bool IsEvenOddFillType(const TEdge& edge) const;
|
bool IsEvenOddFillType(const TEdge& edge) const;
|
||||||
bool IsEvenOddAltFillType(const TEdge& edge) const;
|
bool IsEvenOddAltFillType(const TEdge& edge) const;
|
||||||
void InsertScanbeam(const cInt Y);
|
|
||||||
cInt PopScanbeam();
|
|
||||||
void InsertLocalMinimaIntoAEL(const cInt botY);
|
void InsertLocalMinimaIntoAEL(const cInt botY);
|
||||||
void InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge);
|
void InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge);
|
||||||
void AddEdgeToSEL(TEdge *edge);
|
void AddEdgeToSEL(TEdge *edge);
|
||||||
|
bool PopEdgeFromSEL(TEdge *&edge);
|
||||||
void CopyAELToSEL();
|
void CopyAELToSEL();
|
||||||
void DeleteFromSEL(TEdge *e);
|
void DeleteFromSEL(TEdge *e);
|
||||||
void DeleteFromAEL(TEdge *e);
|
|
||||||
void UpdateEdgeIntoAEL(TEdge *&e);
|
|
||||||
void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2);
|
void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2);
|
||||||
bool IsContributing(const TEdge& edge) const;
|
bool IsContributing(const TEdge& edge) const;
|
||||||
bool IsTopHorz(const cInt XPos);
|
bool IsTopHorz(const cInt XPos);
|
||||||
void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2);
|
|
||||||
void DoMaxima(TEdge *e);
|
void DoMaxima(TEdge *e);
|
||||||
void ProcessHorizontals();
|
void ProcessHorizontals();
|
||||||
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);
|
||||||
OutPt* AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
|
OutPt* AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
|
||||||
OutRec* GetOutRec(int idx);
|
OutRec* GetOutRec(int idx);
|
||||||
void AppendPolygon(TEdge *e1, TEdge *e2) const;
|
void AppendPolygon(TEdge *e1, TEdge *e2);
|
||||||
void IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &pt);
|
void IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &pt);
|
||||||
OutRec* CreateOutRec();
|
|
||||||
OutPt* AddOutPt(TEdge *e, const IntPoint &pt);
|
OutPt* AddOutPt(TEdge *e, const IntPoint &pt);
|
||||||
OutPt* GetLastOutPt(TEdge *e);
|
OutPt* GetLastOutPt(TEdge *e);
|
||||||
void DisposeAllOutRecs();
|
|
||||||
void DisposeOutRec(PolyOutList::size_type index);
|
|
||||||
bool ProcessIntersections(const cInt topY);
|
bool ProcessIntersections(const cInt topY);
|
||||||
void BuildIntersectList(const cInt topY);
|
void BuildIntersectList(const cInt topY);
|
||||||
void ProcessIntersectList();
|
void ProcessIntersectList();
|
||||||
void ProcessEdgesAtTopOfScanbeam(const cInt topY);
|
void ProcessEdgesAtTopOfScanbeam(const cInt topY);
|
||||||
void BuildResult(Paths& polys);
|
void BuildResult(Paths& polys);
|
||||||
void BuildResult2(PolyTree& polytree);
|
void BuildResult2(PolyTree& polytree);
|
||||||
void SetHoleState(TEdge *e, OutRec *outrec) const;
|
void SetHoleState(TEdge *e, OutRec *outrec);
|
||||||
void DisposeIntersectNodes();
|
void DisposeIntersectNodes();
|
||||||
bool FixupIntersectionOrder();
|
bool FixupIntersectionOrder();
|
||||||
void FixupOutPolygon(OutRec &outrec);
|
void FixupOutPolygon(OutRec &outrec);
|
||||||
@ -340,15 +339,16 @@ private:
|
|||||||
bool IsHole(TEdge *e);
|
bool IsHole(TEdge *e);
|
||||||
bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl);
|
bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl);
|
||||||
void FixHoleLinkage(OutRec &outrec);
|
void FixHoleLinkage(OutRec &outrec);
|
||||||
void AddJoin(OutPt *op1, OutPt *op2, const IntPoint &offPt);
|
void AddJoin(OutPt *op1, OutPt *op2, const IntPoint offPt);
|
||||||
void ClearJoins();
|
void ClearJoins();
|
||||||
void ClearGhostJoins();
|
void ClearGhostJoins();
|
||||||
void AddGhostJoin(OutPt *op, const IntPoint &offPt);
|
void AddGhostJoin(OutPt *op, const IntPoint offPt);
|
||||||
bool JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2);
|
bool JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2);
|
||||||
void JoinCommonEdges();
|
void JoinCommonEdges();
|
||||||
void DoSimplePolygons();
|
void DoSimplePolygons();
|
||||||
void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec) const;
|
void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec);
|
||||||
void FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec) const;
|
void FixupFirstLefts2(OutRec* InnerOutRec, OutRec* OuterOutRec);
|
||||||
|
void FixupFirstLefts3(OutRec* OldOutRec, OutRec* NewOutRec);
|
||||||
#ifdef use_xyz
|
#ifdef use_xyz
|
||||||
void SetZ(IntPoint& pt, TEdge& e1, TEdge& e2);
|
void SetZ(IntPoint& pt, TEdge& e1, TEdge& e2);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user