--- ray/src/util/rfluxmtx.c 2014/07/25 15:46:10 2.8 +++ ray/src/util/rfluxmtx.c 2014/08/06 00:59:53 2.13 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rfluxmtx.c,v 2.8 2014/07/25 15:46:10 greg Exp $"; +static const char RCSid[] = "$Id: rfluxmtx.c,v 2.13 2014/08/06 00:59:53 greg Exp $"; #endif /* * Calculate flux transfer matrix or matrices using rcontrib @@ -11,6 +11,7 @@ static const char RCSid[] = "$Id: rfluxmtx.c,v 2.8 201 #include #include "rtio.h" #include "rtmath.h" +#include "rtprocess.h" #include "bsdf.h" #include "bsdf_m.h" #include "random.h" @@ -144,20 +145,23 @@ surf_type(const char *otype) static char * oconv_command(int ac, char *av[]) { - static char oconvbuf[2048] = "!oconv -f"; - char *cp = oconvbuf + 9; - + static char oconvbuf[2048] = "!oconv -f "; + char *cp = oconvbuf + 10; + char *recv = *av++; + + if (ac-- <= 0) + return(NULL); while (ac-- > 0) { + strcpy(cp, *av++); + while (*cp) cp++; + *cp++ = ' '; if (cp >= oconvbuf+(sizeof(oconvbuf)-32)) { fputs(progname, stderr); fputs(": too many file arguments!\n", stderr); exit(1); } - *cp++ = ' '; - strcpy(cp, *av++); - while (*cp) cp++; } - *cp = '\0'; + strcpy(cp, recv); /* receiver goes last */ return(oconvbuf); } @@ -401,11 +405,12 @@ finish_receiver(void) fputs(": undefined normal for hemisphere sampling\n", stderr); exit(1); } - if (normalize(curparams.vup) == 0) + if (normalize(curparams.vup) == 0) { if (fabs(curparams.nrm[2]) < .7) curparams.vup[2] = 1; else curparams.vup[1] = 1; + } /* determine sample type/bin */ if (tolower(curparams.hemis[0]) == 'u' | curparams.hemis[0] == '1') { binv = "0"; /* uniform sampling -- one bin */ @@ -419,7 +424,7 @@ finish_receiver(void) exit(1); } calfn = shirchiufn; shirchiufn = NULL; - sprintf(sbuf, "SCdim=%d,Nx=%g,Ny=%g,Nz=%g,Ux=%g,Uy=%g,Uz=%g", + sprintf(sbuf, "SCdim=%d,rNx=%g,rNy=%g,rNz=%g,Ux=%g,Uy=%g,Uz=%g", curparams.hsiz, curparams.nrm[0], curparams.nrm[1], curparams.nrm[2], curparams.vup[0], curparams.vup[1], curparams.vup[2]); @@ -429,7 +434,7 @@ finish_receiver(void) } else if ((tolower(curparams.hemis[0]) == 'r') | (tolower(curparams.hemis[0]) == 't')) { calfn = reinhfn; reinhfn = NULL; - sprintf(sbuf, "MF=%d,Nx=%g,Ny=%g,Nz=%g,Ux=%g,Uy=%g,Uz=%g", + sprintf(sbuf, "MF=%d,rNx=%g,rNy=%g,rNz=%g,Ux=%g,Uy=%g,Uz=%g", curparams.hsiz, curparams.nrm[0], curparams.nrm[1], curparams.nrm[2], curparams.vup[0], curparams.vup[1], curparams.vup[2]); @@ -872,11 +877,12 @@ prepare_sampler(void) fputs(": undefined normal for sender sampling\n", stderr); return(-1); } - if (normalize(curparams.vup) == 0) + if (normalize(curparams.vup) == 0) { if (fabs(curparams.nrm[2]) < .7) curparams.vup[2] = 1; else curparams.vup[1] = 1; + } VCROSS(curparams.udir, curparams.vup, curparams.nrm); if (normalize(curparams.udir) == 0) { fputs(progname, stderr); @@ -1066,9 +1072,9 @@ add_recv_object(FILE *fp) /* else skip arguments */ if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*s"); - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*d"); - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*f"); return(0); } @@ -1102,9 +1108,9 @@ add_send_object(FILE *fp) /* else skip arguments */ if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*s"); - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*d"); - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*f"); return(0); } @@ -1147,7 +1153,7 @@ load_scene(const char *inspec, int (*ocb)(FILE *)) strcat(newparams, inpbuf); continue; } - while ((c = getc(fp)) != EOF && c != '\n'); + while ((c = getc(fp)) != EOF && c != '\n') ; /* else skipping comment */ continue; } @@ -1172,7 +1178,7 @@ main(int argc, char *argv[]) { char fmtopt[6] = "-faa"; /* default output is ASCII */ char *xrs=NULL, *yrs=NULL, *ldopt=NULL; - int wantIrradiance = 0; + char *iropt = NULL; char *sendfn; char sampcntbuf[32], nsbinbuf[32]; FILE *rcfp; @@ -1221,13 +1227,13 @@ main(int argc, char *argv[]) na = 0; /* we re-add this later */ continue; case 'I': /* only for pass-through mode */ - wantIrradiance = 1; + case 'i': + iropt = argv[a]; na = 0; continue; case 'V': /* options without arguments */ case 'w': case 'u': - case 'i': case 'h': case 'r': break; @@ -1275,9 +1281,9 @@ done_opts: if (sendfn[0] == '-') { /* user wants pass-through mode? */ if (sendfn[1]) goto userr; sendfn = NULL; - if (wantIrradiance) { + if (iropt) { CHECKARGC(1); - rcarg[nrcargs++] = "-I"; + rcarg[nrcargs++] = iropt; } if (xrs) { CHECKARGC(2); @@ -1295,9 +1301,9 @@ done_opts: } if (sampcnt <= 0) sampcnt = 1; } else { /* else in sampling mode */ - if (wantIrradiance) { + if (iropt) { fputs(progname, stderr); - fputs(": -I supported for pass-through only\n", stderr); + fputs(": -i, -I supported for pass-through only\n", stderr); return(1); } fmtopt[2] = (sizeof(RREAL)==sizeof(double)) ? 'd' : 'f'; @@ -1350,7 +1356,7 @@ done_opts: userr: if (a < argc-2) fprintf(stderr, "%s: unsupported option '%s'", progname, argv[a]); - fprintf(stderr, "Usage: %s [-v][rcontrib options] sender.rad receiver.rad [system.rad ..]\n", + fprintf(stderr, "Usage: %s [-v][rcontrib options] sender.rad receiver.rad [-i system.oct] [system.rad ..]\n", progname); return(1); }