ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/rfluxmtx.c
(Generate patch)

Comparing ray/src/util/rfluxmtx.c (file contents):
Revision 2.3 by greg, Tue Jul 22 02:12:48 2014 UTC vs.
Revision 2.4 by greg, Tue Jul 22 21:55:31 2014 UTC

# Line 66 | Line 66 | typedef struct surf_s {
66          void            *priv;          /* private data (malloc'ed) */
67          char            sname[32];      /* surface name */
68          FVECT           snrm;           /* surface normal */
69 <        double          area;           /* surface area (or solid angle) */
69 >        double          area;           /* surface area / proj. solid angle */
70          short           styp;           /* surface type */
71          short           nfargs;         /* number of real arguments */
72          double          farg[1];        /* real values (extends struct) */
# Line 372 | Line 372 | parse_params(char *pargs)
372   static void
373   finish_receiver(void)
374   {
375 +        char    sbuf[256];
376 +        int     uniform = 0;
377          char    *calfn = NULL;
378          char    *params = NULL;
379          char    *binv = NULL;
380          char    *binf = NULL;
381          char    *nbins = NULL;
380        char    sbuf[256];
382  
383          if (!curmod[0]) {
384                  fputs(progname, stderr);
# Line 389 | Line 390 | finish_receiver(void)
390                  rcarg[nrcargs++] = "-o";
391                  rcarg[nrcargs++] = curparams.outfn;
392          }
393 <                                        /* add bin specification */
393 >                                        /* check arguments */
394          if (!curparams.hemis[0]) {
395                  fputs(progname, stderr);
396                  fputs(": missing hemisphere sampling type!\n", stderr);
# Line 405 | Line 406 | finish_receiver(void)
406                          curparams.vup[2] = 1;
407                  else
408                          curparams.vup[1] = 1;
409 +                                        /* determine sample type/bin */
410          if (tolower(curparams.hemis[0]) == 'u' | curparams.hemis[0] == '1') {
411                  binv = "0";             /* uniform sampling -- one bin */
412 +                uniform = 1;
413          } else if (tolower(curparams.hemis[0]) == 's' &&
414                                  tolower(curparams.hemis[1]) == 'c') {
415                                          /* assign parameters */
# Line 457 | Line 460 | finish_receiver(void)
460                                  progname, curparams.hemis);
461                  exit(1);
462          }
463 +        if (!uniform & (curparams.slist->styp == ST_SOURCE)) {
464 +                SURF    *sp;
465 +                for (sp = curparams.slist; sp != NULL; sp = sp->next)
466 +                        if (fabs(sp->area - PI) > 1e-3) {
467 +                                fprintf(stderr, "%s: source '%s' must be 180-degrees\n",
468 +                                                progname, sp->sname);
469 +                                exit(1);
470 +                        }
471 +        }
472          if (calfn != NULL) {            /* add cal file if needed */
473                  CHECKARGC(2);
474                  rcarg[nrcargs++] = "-f";
# Line 979 | Line 991 | add_surface(int st, const char *oname, FILE *fp)
991                  VCOPY(snew->snrm, snew->farg);
992                  if (normalize(snew->snrm) == 0)
993                          goto badnorm;
994 <                snew->area = 2.*PI*(1. - cos((PI/180./2.)*snew->farg[3]));
994 >                snew->area = sin((PI/180./2.)*snew->farg[3]);
995 >                snew->area *= PI*snew->area;
996                  break;
997          }
998          if (snew->area <= FTINY) {
# Line 1139 | Line 1152 | int
1152   main(int argc, char *argv[])
1153   {
1154          char    fmtopt[6] = "-faa";     /* default output is ASCII */
1155 +        char    *xrs=NULL, *yrs=NULL, *ldopt=NULL;
1156          char    *sendfn;
1157          char    sampcntbuf[32], nsbinbuf[32];
1158          FILE    *rcfp;
# Line 1172 | Line 1186 | main(int argc, char *argv[])
1186                                  goto userr;
1187                          }
1188                          break;
1189 +                case 'x':               /* x-resolution */
1190 +                        xrs = argv[++a];
1191 +                        na = 0;
1192 +                        continue;
1193 +                case 'y':               /* y-resolution */
1194 +                        yrs = argv[++a];
1195 +                        na = 0;
1196 +                        continue;
1197                  case 'c':               /* number of samples */
1198                          sampcnt = atoi(argv[a+1]);
1199                          if (sampcnt <= 0)
# Line 1183 | Line 1205 | main(int argc, char *argv[])
1205                  case 'u':
1206                  case 'i':
1207                  case 'h':
1208 +                case 'r':
1209                          break;
1210                  case 'n':               /* options with 1 argument */
1211                  case 's':
# Line 1193 | Line 1216 | main(int argc, char *argv[])
1216                          if (argv[a][2] != 'v') goto userr;
1217                          break;
1218                  case 'l':               /* special case */
1219 <                        if (argv[a][2] == 'd') goto userr;
1219 >                        if (argv[a][2] == 'd') {
1220 >                                ldopt = argv[a];
1221 >                                na = 0;
1222 >                                continue;
1223 >                        }
1224                          na = 2;
1225                          break;
1226                  case 'd':               /* special case */
# Line 1224 | Line 1251 | done_opts:
1251          if (sendfn[0] == '-') {         /* user wants pass-through mode? */
1252                  if (sendfn[1]) goto userr;
1253                  sendfn = NULL;
1254 +                if (xrs) {
1255 +                        CHECKARGC(2);
1256 +                        rcarg[nrcargs++] = "-x";
1257 +                        rcarg[nrcargs++] = xrs;
1258 +                }
1259 +                if (yrs) {
1260 +                        CHECKARGC(2);
1261 +                        rcarg[nrcargs++] = "-y";
1262 +                        rcarg[nrcargs++] = yrs;
1263 +                }
1264 +                if (ldopt) {
1265 +                        CHECKARGC(1);
1266 +                        rcarg[nrcargs++] = ldopt;
1267 +                }
1268                  if (sampcnt <= 0) sampcnt = 1;
1269          } else {                        /* else FVECT determines input format */
1270                  fmtopt[3] = (sizeof(RREAL)==sizeof(double)) ? 'd' : 'f';

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines