| 17 |  |  | 
| 18 |  | #define putv(v)         printf("%18.12g %18.12g %18.12g\n",(v)[0],(v)[1],(v)[2]) | 
| 19 |  |  | 
| 20 | + | #define invert          (xf_context != NULL && xf_context->rev) | 
| 21 | + |  | 
| 22 |  | double  glowdist = FHUGE;               /* glow test distance */ | 
| 23 |  |  | 
| 24 |  | double  emult = 1.;                     /* emitter multiplier */ | 
| 63 |  | printf(" %s", argv[i]); | 
| 64 |  | switch (argv[i][1]) { | 
| 65 |  | case 'g':                       /* glow distance (meters) */ | 
| 66 | < | if (argv[i][2] || badarg(argc-i, argv+i, "f")) | 
| 66 | > | if (argv[i][2] || badarg(argc-i-1, argv+i+1, "f")) | 
| 67 |  | goto userr; | 
| 68 |  | glowdist = atof(argv[++i]); | 
| 69 |  | printf(" %s", argv[i]); | 
| 70 |  | break; | 
| 71 |  | case 'e':                       /* emitter multiplier */ | 
| 72 | < | if (argv[i][2] || badarg(argc-i, argv+i, "f")) | 
| 72 | > | if (argv[i][2] || badarg(argc-i-1, argv+i+1, "f")) | 
| 73 |  | goto userr; | 
| 74 |  | emult = atof(argv[++i]); | 
| 75 |  | printf(" %s", argv[i]); | 
| 295 |  | printf("\n%s polygon %sf%d\n", mat, object(), ++nfaces); | 
| 296 |  | printf("0\n0\n%d\n", 3*(ac-1)); | 
| 297 |  | for (i = 1; i < ac; i++) { | 
| 298 | < | if ((cv = c_getvert(av[i])) == NULL) | 
| 298 | > | if ((cv = c_getvert(av[invert ? ac-i : i])) == NULL) | 
| 299 |  | return(MG_EUNDEF); | 
| 300 |  | xf_xfmpoint(v, cv->p); | 
| 301 |  | putv(v); | 
| 369 |  | FVECT   n1, n2, n3; | 
| 370 |  | register int    i; | 
| 371 |  | /* the following is repeat code, so assume it's OK */ | 
| 370 | – | cv1 = c_getvert(vn1); | 
| 372 |  | cv2 = c_getvert(vn2); | 
| 373 | < | cv3 = c_getvert(vn3); | 
| 373 | > | if (invert) { | 
| 374 | > | cv3 = c_getvert(vn1); | 
| 375 | > | cv1 = c_getvert(vn3); | 
| 376 | > | } else { | 
| 377 | > | cv1 = c_getvert(vn1); | 
| 378 | > | cv3 = c_getvert(vn3); | 
| 379 | > | } | 
| 380 |  | xf_xfmpoint(v1, cv1->p); | 
| 381 |  | xf_xfmpoint(v2, cv2->p); | 
| 382 |  | xf_xfmpoint(v3, cv3->p); |