| 23 |  |  | 
| 24 |  | double  emult = 1.;                     /* emitter multiplier */ | 
| 25 |  |  | 
| 26 | + | FILE    *matfp = stdout;                /* material output file */ | 
| 27 | + |  | 
| 28 |  | int     r_comment(), r_cone(), r_cyl(), r_face(), r_ies(), r_ring(), r_sph(); | 
| 29 |  | char    *material(), *object(), *addarg(); | 
| 30 |  |  | 
| 65 |  | printf(" %s", argv[i]); | 
| 66 |  | switch (argv[i][1]) { | 
| 67 |  | case 'g':                       /* glow distance (meters) */ | 
| 68 | < | if (argv[i][2] || badarg(argc-i, argv+i, "f")) | 
| 68 | > | if (argv[i][2] || badarg(argc-i-1, argv+i+1, "f")) | 
| 69 |  | goto userr; | 
| 70 |  | glowdist = atof(argv[++i]); | 
| 71 |  | printf(" %s", argv[i]); | 
| 72 |  | break; | 
| 73 |  | case 'e':                       /* emitter multiplier */ | 
| 74 | < | if (argv[i][2] || badarg(argc-i, argv+i, "f")) | 
| 74 | > | if (argv[i][2] || badarg(argc-i-1, argv+i+1, "f")) | 
| 75 |  | goto userr; | 
| 76 |  | emult = atof(argv[++i]); | 
| 77 |  | printf(" %s", argv[i]); | 
| 78 |  | break; | 
| 79 | + | case 'm':                       /* materials file */ | 
| 80 | + | matfp = fopen(argv[++i], "a"); | 
| 81 | + | if (matfp == NULL) { | 
| 82 | + | fprintf(stderr, "%s: cannot append\n", argv[i]); | 
| 83 | + | exit(1); | 
| 84 | + | } | 
| 85 | + | printf(" %s", argv[i]); | 
| 86 | + | break; | 
| 87 |  | default: | 
| 88 |  | goto userr; | 
| 89 |  | } | 
| 101 |  | } | 
| 102 |  | exit(0); | 
| 103 |  | userr: | 
| 104 | < | fprintf(stderr, "Usage: %s [-g dist][-m mult] [file.mgf] ..\n", | 
| 104 | > | fprintf(stderr, "Usage: %s [-g dist][-e mult][-m matf] [file.mgf] ..\n", | 
| 105 |  | argv[0]); | 
| 106 |  | exit(1); | 
| 107 |  | } | 
| 429 |  | cvtcolor(radrgb, &c_cmaterial->ed_c, | 
| 430 |  | emult*c_cmaterial->ed/WHTEFFICACY); | 
| 431 |  | if (glowdist < FHUGE) {         /* do a glow */ | 
| 432 | < | printf("\nvoid glow %s\n0\n0\n", mname); | 
| 433 | < | printf("4 %f %f %f %f\n", colval(radrgb,RED), | 
| 432 | > | fprintf(matfp, "\nvoid glow %s\n0\n0\n", mname); | 
| 433 | > | fprintf(matfp, "4 %f %f %f %f\n", colval(radrgb,RED), | 
| 434 |  | colval(radrgb,GRN), | 
| 435 |  | colval(radrgb,BLU), glowdist); | 
| 436 |  | } else { | 
| 437 | < | printf("\nvoid light %s\n0\n0\n", mname); | 
| 438 | < | printf("3 %f %f %f\n", colval(radrgb,RED), | 
| 437 | > | fprintf(matfp, "\nvoid light %s\n0\n0\n", mname); | 
| 438 | > | fprintf(matfp, "3 %f %f %f\n", colval(radrgb,RED), | 
| 439 |  | colval(radrgb,GRN), | 
| 440 |  | colval(radrgb,BLU)); | 
| 441 |  | } | 
| 474 |  | else | 
| 475 |  | d = c_cmaterial->td + ts; | 
| 476 |  | scalecolor(radrgb, d); | 
| 477 | < | printf("\nvoid trans %s\n0\n0\n", mname); | 
| 478 | < | printf("7 %f %f %f\n", colval(radrgb,RED), | 
| 477 | > | fprintf(matfp, "\nvoid trans %s\n0\n0\n", mname); | 
| 478 | > | fprintf(matfp, "7 %f %f %f\n", colval(radrgb,RED), | 
| 479 |  | colval(radrgb,GRN), colval(radrgb,BLU)); | 
| 480 | < | printf("\t%f %f %f %f\n", c_cmaterial->rs, a5, a6, | 
| 480 | > | fprintf(matfp, "\t%f %f %f %f\n", c_cmaterial->rs, a5, a6, | 
| 481 |  | ts/(ts + c_cmaterial->td)); | 
| 482 |  | return(mname); | 
| 483 |  | } | 
| 486 |  | c_isgrey(&c_cmaterial->rs_c))) { | 
| 487 |  | cvtcolor(radrgb, &c_cmaterial->rd_c, | 
| 488 |  | c_cmaterial->rd/(1.-c_cmaterial->rs)); | 
| 489 | < | printf("\nvoid plastic %s\n0\n0\n", mname); | 
| 490 | < | printf("5 %f %f %f %f %f\n", colval(radrgb,RED), | 
| 489 | > | fprintf(matfp, "\nvoid plastic %s\n0\n0\n", mname); | 
| 490 | > | fprintf(matfp, "5 %f %f %f %f %f\n", colval(radrgb,RED), | 
| 491 |  | colval(radrgb,GRN), colval(radrgb,BLU), | 
| 492 |  | c_cmaterial->rs, c_cmaterial->rs_a); | 
| 493 |  | return(mname); | 
| 497 |  | cvtcolor(radrgb, &c_cmaterial->rd_c, c_cmaterial->rd); | 
| 498 |  | cvtcolor(c2, &c_cmaterial->rs_c, c_cmaterial->rs); | 
| 499 |  | addcolor(radrgb, c2); | 
| 500 | < | printf("\nvoid metal %s\n0\n0\n", mname); | 
| 501 | < | printf("5 %f %f %f %f %f\n", colval(radrgb,RED), | 
| 500 | > | fprintf(matfp, "\nvoid metal %s\n0\n0\n", mname); | 
| 501 | > | fprintf(matfp, "5 %f %f %f %f %f\n", colval(radrgb,RED), | 
| 502 |  | colval(radrgb,GRN), colval(radrgb,BLU), | 
| 503 |  | c_cmaterial->rs/(c_cmaterial->rd + c_cmaterial->rs), | 
| 504 |  | c_cmaterial->rs_a); |