mathutil: workaround for infinite loop in Triangulator

Fixes #737
This commit is contained in:
rdb 2019-09-18 15:45:45 +02:00
parent 343c808fc4
commit 66b338c112

View File

@ -2185,6 +2185,8 @@ triangulate_single_polygon(int nvert, int posmax, int side) {
endv = mchain[posmax].vnum;
}
int num_triangles = 0;
while ((v != endv) || (ri > 1))
{
// cerr << " v = " << v << " ri = " << ri << " rc = " << rc.size() << "
@ -2199,8 +2201,13 @@ triangulate_single_polygon(int nvert, int posmax, int side) {
vert[rc[ri]].pt);
if ( crossResult >= 0 ) /* could be convex corner or straight */
{
if ( crossResult > 0) /* convex corner: cut it off */
if (crossResult > 0) { /* convex corner: cut it off */
_result.push_back(Triangle(this, rc[ri - 1], rc[ri], v));
if (++num_triangles >= nvert - 2) {
// We can't generate more than this number of triangles.
return;
}
}
/* else : perfectly straight, will be abandoned anyway */
ri--;
rc.pop_back();