fixes from ynjh_jo
This commit is contained in:
parent
3e3f394930
commit
9b4a1eab47
|
|
@ -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++;
|
||||
|
|
|
|||
Loading…
Reference in New Issue