| 40 |  |  | 
| 41 |  | int  smooth = 0;                /* apply smoothing? */ | 
| 42 |  | int  objout = 0;                /* output .OBJ format? */ | 
| 43 | + | int  rev = 0;                   /* invert normal directions? */ | 
| 44 |  |  | 
| 45 |  | char  *modname, *surfname; | 
| 46 |  |  | 
| 110 |  | smooth++; | 
| 111 |  | else if (!strcmp(argv[i], "-o")) | 
| 112 |  | objout++; | 
| 113 | + | else if (!strcmp(argv[i], "-i")) | 
| 114 | + | rev = 1; | 
| 115 |  | else | 
| 116 |  | goto userror; | 
| 117 |  |  | 
| 359 |  | int  axis; | 
| 360 |  | FVECT  v1, v2, vc1, vc2; | 
| 361 |  | int  ok1, ok2; | 
| 362 | + |  | 
| 363 | + | if (rev) {                      /* reverse normals? */ | 
| 364 | + | POINT  *pt = p1; p1 = p2; p2 = pt; | 
| 365 | + | } | 
| 366 |  | /* compute exact normals */ | 
| 367 |  | ok1 = (p0->valid && p1->valid && p2->valid); | 
| 368 |  | if (ok1) { | 
| 543 |  | fvsum(v2, r1[0].p, r1[-1].p, -1.0); | 
| 544 |  | else | 
| 545 |  | fvsum(v2, r1[1].p, r1[-1].p, -1.0); | 
| 546 | < | fcross(r1[0].n, v1, v2); | 
| 546 | > | if (rev) | 
| 547 | > | fcross(r1[0].n, v2, v1); | 
| 548 | > | else | 
| 549 | > | fcross(r1[0].n, v1, v2); | 
| 550 |  | normalize(r1[0].n); | 
| 551 |  | skip: | 
| 552 |  | r0++; r1++; r2++; |