fixes from ynjh_jo

This commit is contained in:
David Rose 2008-01-08 03:08:56 +00:00
parent 3e3f394930
commit 9b4a1eab47
1 changed files with 23 additions and 20 deletions

View File

@ -1744,6 +1744,12 @@ int Triangulator::
traverse_polygon(int mcur, int trnum, int from, int dir) {
// printf("traverse_polygon(%d, %d, %d, %d)\n", mcur, trnum, from, dir);
if (mcur < 0 || trnum <= 0)
return 0;
if (visited[trnum])
return 0;
trap_t *t = &tr[trnum];
// int howsplit;
int mnew;
@ -1751,14 +1757,8 @@ traverse_polygon(int mcur, int trnum, int from, int dir) {
int retval = 0; //, tmp;
int do_switch = false;
if (mcur < 0 || trnum <= 0)
return 0;
// printf("visited size = %d, visited[trnum] = %d\n", visited.size(), visited[trnum]);
if (visited[trnum])
return 0;
visited[trnum] = true;
/* We have much more information available here. */
@ -2169,24 +2169,27 @@ triangulate_single_polygon(int nvert, int posmax, int side) {
return;
}
if (ri > 0) /* reflex chain is non-empty */
{
if (CROSS(vert[v].pt, vert[rc[ri - 1]].pt,
vert[rc[ri]].pt) > 0)
{ /* convex corner: cut if off */
_result.push_back(Triangle(this, rc[ri - 1], rc[ri], v));
ri--;
{
float crossResult = CROSS(vert[v].pt, vert[rc[ri - 1]].pt,
vert[rc[ri]].pt);
if ( crossResult >= 0 ) /* could be convex corner or straight */
{
if ( crossResult > 0) /* convex corner: cut it off */
_result.push_back(Triangle(this, rc[ri - 1], rc[ri], v));
/* else : perfectly straight, will be abandoned anyway */
ri--;
rc.pop_back();
nassertv(ri + 1 == (int)rc.size());
}
else /* non-convex */
{ /* add v to the chain */
ri++;
}
else /* concave, add v to the chain */
{
ri++;
rc.push_back(v);
nassertv(ri + 1 == (int)rc.size());
vpos = mchain[vpos].next;
v = mchain[vpos].vnum;
}
}
vpos = mchain[vpos].next;
v = mchain[vpos].vnum;
}
}
else /* reflex-chain empty: add v to the */
{ /* reflex chain and advance it */
ri++;