diff --git a/core/math/triangulate.cpp b/core/math/triangulate.cpp index 1f5d5ed6b34..eaf019f2007 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 &p_contour,int u,int v,int w,int n,int *V) +bool Triangulate::snip(const Vector &p_contour,int u,int v,int w,int n,const Vector& V) { int p; float Ax, Ay, Bx, By, Cx, Cy, Px, Py; @@ -107,8 +107,8 @@ bool Triangulate::triangulate(const Vector &contour,Vector &result if ( n < 3 ) return false; - - int *V = (int*)alloca(sizeof(int)*n); + Vector V; + V.resize(n); /* we want a counter-clockwise polygon in V */ @@ -122,7 +122,7 @@ bool Triangulate::triangulate(const Vector &contour,Vector &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 &contour,Vector &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 &p_contour,int u,int v,int w,int n,int *V); + static bool snip(const Vector &p_contour,int u,int v,int w,int n,const Vector& V); };