diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2016-11-09 15:46:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-09 15:46:13 +0100 |
commit | 2ba1b5837496c66ee1b08a290d251112f435e3e5 (patch) | |
tree | 4289417e1a0ec1980e1740ebb426978fa50c5c35 | |
parent | 22542bc7679829579d82eef99163a33dd78f1736 (diff) | |
parent | 0e1972aa5165722e677850bbf799af8ab6751a8d (diff) |
Merge pull request #7039 from RandomShaper/fix-triangulation
Clean/fix triangulation internals
-rw-r--r-- | core/math/triangulate.cpp | 16 | ||||
-rw-r--r-- | core/math/triangulate.h | 2 |
2 files changed, 5 insertions, 13 deletions
diff --git a/core/math/triangulate.cpp b/core/math/triangulate.cpp index 1f5d5ed6b3..eaf019f200 100644 --- a/core/math/triangulate.cpp +++ b/core/math/triangulate.cpp @@ -71,7 +71,7 @@ bool Triangulate::is_inside_triangle(float Ax, float Ay, return ((aCROSSbp >= 0.0f) && (bCROSScp >= 0.0f) && (cCROSSap >= 0.0f)); }; -bool Triangulate::snip(const Vector<Vector2> &p_contour,int u,int v,int w,int n,int *V) +bool Triangulate::snip(const Vector<Vector2> &p_contour,int u,int v,int w,int n,const Vector<int>& V) { int p; float Ax, Ay, Bx, By, Cx, Cy, Px, Py; @@ -107,8 +107,8 @@ bool Triangulate::triangulate(const Vector<Vector2> &contour,Vector<int> &result if ( n < 3 ) return false; - - int *V = (int*)alloca(sizeof(int)*n); + Vector<int> V; + V.resize(n); /* we want a counter-clockwise polygon in V */ @@ -122,7 +122,7 @@ bool Triangulate::triangulate(const Vector<Vector2> &contour,Vector<int> &result /* remove nv-2 Vertices, creating 1 triangle every time */ int count = 2*nv; /* error detection */ - for(int m=0, v=nv-1; nv>2; ) + for(int v=nv-1; nv>2; ) { /* if we loop, it is probably a non-simple polygon */ if (0 >= (count--)) @@ -144,18 +144,10 @@ bool Triangulate::triangulate(const Vector<Vector2> &contour,Vector<int> &result a = V[u]; b = V[v]; c = V[w]; /* output Triangle */ - /* - result.push_back( contour[a] ); - result.push_back( contour[b] ); - result.push_back( contour[c] ); -*/ - result.push_back( a ); result.push_back( b ); result.push_back( c ); - m++; - /* remove v from remaining polygon */ for(s=v,t=v+1;t<nv;s++,t++) V[s] = V[t]; diff --git a/core/math/triangulate.h b/core/math/triangulate.h index 7dcc91b2fd..ef622b5005 100644 --- a/core/math/triangulate.h +++ b/core/math/triangulate.h @@ -56,7 +56,7 @@ public: private: - static bool snip(const Vector<Vector2> &p_contour,int u,int v,int w,int n,int *V); + static bool snip(const Vector<Vector2> &p_contour,int u,int v,int w,int n,const Vector<int>& V); }; |