| 16 |  | typedef struct { | 
| 17 |  | Scene   *sc; | 
| 18 |  | Face    *f; | 
| 19 | + | int     rev; | 
| 20 |  | } SceneFace; | 
| 21 |  |  | 
| 22 |  | /* Callback to create new triangle */ | 
| 27 |  | Face            *f = sf->f; | 
| 28 |  | VNDX            triv[3]; | 
| 29 |  |  | 
| 30 | + | if (sf->rev) {                  /* need to reverse triangle? */ | 
| 31 | + | int     t = a; | 
| 32 | + | a = c; | 
| 33 | + | c = t; | 
| 34 | + | } | 
| 35 |  | triv[0][0] = f->v[a].vid; | 
| 36 |  | triv[0][1] = f->v[a].tid; | 
| 37 |  | triv[0][2] = f->v[a].nid; | 
| 85 |  | poly->v[i].mX = pt[ax]; | 
| 86 |  | poly->v[i].mY = pt[ay]; | 
| 87 |  | } | 
| 88 | + | mysf.rev = (polyArea(poly) < .0); | 
| 89 |  | i = polyTriangulate(poly, addtriangle); | 
| 90 |  | polyFree(poly); | 
| 91 | < | /* flag face if replaced */ | 
| 92 | < | f->flags |= (i > 0)*FACE_DUPLICATE; | 
| 91 | > | if (i > 0)                      /* flag face */ | 
| 92 | > | f->flags |= FACE_DUPLICATE; | 
| 93 | > | else | 
| 94 | > | f->flags |= FACE_DEGENERATE; | 
| 95 |  | return(i); | 
| 96 |  | } | 
| 97 |  |  |