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

Comparing ray/src/util/rad.c (file contents):
Revision 2.27 by greg, Sat Sep 25 13:21:35 1993 UTC vs.
Revision 2.33 by greg, Thu Nov 18 10:00:21 1993 UTC

# Line 21 | Line 21 | typedef struct {
21          int     (*fixval)();    /* assignment checking function */
22   } VARIABLE;
23  
24 < int     onevalue(), catvalues();
24 > int     onevalue(), catvalues(), boolvalue(),
25 >        qualvalue(), fltvalue(), intvalue();
26  
27                                  /* variables */
28   #define OBJECT          0               /* object files */
# Line 61 | Line 62 | VARIABLE       vv[NVARS] = {           /* variable-value pairs */
62          {"pfilt",       2,      0,      NULL,   catvalues},
63          {"view",        2,      0,      NULL,   NULL},
64          {"ZONE",        2,      0,      NULL,   onevalue},
65 <        {"QUALITY",     3,      0,      NULL,   onevalue},
65 >        {"QUALITY",     3,      0,      NULL,   qualvalue},
66          {"OCTREE",      3,      0,      NULL,   onevalue},
67          {"PICTURE",     3,      0,      NULL,   onevalue},
68          {"AMBFILE",     3,      0,      NULL,   onevalue},
69          {"OPTFILE",     3,      0,      NULL,   onevalue},
70 <        {"EXPOSURE",    3,      0,      NULL,   onevalue},
70 >        {"EXPOSURE",    3,      0,      NULL,   fltvalue},
71          {"RESOLUTION",  3,      0,      NULL,   onevalue},
72          {"UP",          2,      0,      NULL,   onevalue},
73 <        {"INDIRECT",    3,      0,      NULL,   onevalue},
74 <        {"DETAIL",      3,      0,      NULL,   onevalue},
75 <        {"PENUMBRAS",   3,      0,      NULL,   onevalue},
76 <        {"VARIABILITY", 3,      0,      NULL,   onevalue},
73 >        {"INDIRECT",    3,      0,      NULL,   intvalue},
74 >        {"DETAIL",      3,      0,      NULL,   qualvalue},
75 >        {"PENUMBRAS",   3,      0,      NULL,   boolvalue},
76 >        {"VARIABILITY", 3,      0,      NULL,   qualvalue},
77          {"REPORT",      3,      0,      NULL,   onevalue},
78   };
79  
80   VARIABLE        *matchvar();
81   char    *nvalue();
81 int     vscale();
82  
83   #define UPPER(c)        ((c)&~0x20)     /* ASCII trick */
84  
# Line 87 | Line 87 | int    vscale();
87   #define vval(vc)        (vv[vc].value)
88   #define vint(vc)        atoi(vval(vc))
89   #define vlet(vc)        UPPER(vval(vc)[0])
90 + #define vscale          vlet
91   #define vbool(vc)       (vlet(vc)=='T')
92  
93 < #define HIGH            2
94 < #define MEDIUM          1
95 < #define LOW             0
93 > #define HIGH            'H'
94 > #define MEDIUM          'M'
95 > #define LOW             'L'
96  
96 int     lowqopts(), medqopts(), hiqopts();
97 int     (*setqopts[3])() = {lowqopts, medqopts, hiqopts};
98
99 #define renderopts      (*setqopts[vscale(QUALITY)])
100
97                                  /* overture calculation file */
98   #ifdef NIX
99   char    overfile[] = "overture.raw";
# Line 256 | Line 252 | setvariable(ass)               /* assign variable according to stri
252   register char   *ass;
253   {
254          char    varname[32];
259        char    varval[512];
255          int     n;
256          register char   *cp;
257          register VARIABLE       *vp;
# Line 348 | Line 343 | register int   n;
343   }
344  
345  
351 int
352 vscale(vc)                      /* return scale for variable vc */
353 int     vc;
354 {
355        switch(vlet(vc)) {
356        case 'H':
357                return(HIGH);
358        case 'M':
359                return(MEDIUM);
360        case 'L':
361                return(LOW);
362        }
363        badvalue(vc);
364 }
365
366
346   checkvalues()                   /* check assignments */
347   {
348          register int    i;
# Line 402 | Line 381 | register VARIABLE      *vp;
381   }
382  
383  
384 + int
385 + badmatch(tv, cv)                /* case insensitive truncated comparison */
386 + register char   *tv, *cv;
387 + {
388 +        if (!*tv) return(1);            /* null string cannot match */
389 +        do
390 +                if (UPPER(*tv) != *cv++)
391 +                        return(1);
392 +        while (*++tv);
393 +        return(0);              /* OK */
394 + }
395 +
396 +
397 + boolvalue(vp)                   /* check boolean for legal values */
398 + register VARIABLE       *vp;
399 + {
400 +        if (!vp->nass) return;
401 +        onevalue(vp);
402 +        switch (UPPER(vp->value[0])) {
403 +        case 'T':
404 +                if (badmatch(vp->value, "TRUE")) break;
405 +                return;
406 +        case 'F':
407 +                if (badmatch(vp->value, "FALSE")) break;
408 +                return;
409 +        }
410 +        fprintf(stderr, "%s: illegal value for boolean variable '%s'\n",
411 +                        progname, vp->name);
412 +        exit(1);
413 + }
414 +
415 +
416 + qualvalue(vp)                   /* check qualitative var. for legal values */
417 + register VARIABLE       *vp;
418 + {
419 +        if (!vp->nass) return;
420 +        onevalue(vp);
421 +        switch (UPPER(vp->value[0])) {
422 +        case 'L':
423 +                if (badmatch(vp->value, "LOW")) break;
424 +                return;
425 +        case 'M':
426 +                if (badmatch(vp->value, "MEDIUM")) break;
427 +                return;
428 +        case 'H':
429 +                if (badmatch(vp->value, "HIGH")) break;
430 +                return;
431 +        }
432 +        fprintf(stderr, "%s: illegal value for qualitative variable '%s'\n",
433 +                        progname, vp->name);
434 +        exit(1);
435 + }
436 +
437 +
438 + intvalue(vp)                    /* check integer variable for legal values */
439 + register VARIABLE       *vp;
440 + {
441 +        if (!vp->nass) return;
442 +        onevalue(vp);
443 +        if (isint(vp->value)) return;
444 +        fprintf(stderr, "%s: illegal value for integer variable '%s'\n",
445 +                        progname, vp->name);
446 +        exit(1);
447 + }
448 +
449 +
450 + fltvalue(vp)                    /* check float variable for legal values */
451 + register VARIABLE       *vp;
452 + {
453 +        if (!vp->nass) return;
454 +        onevalue(vp);
455 +        if (isflt(vp->value)) return;
456 +        fprintf(stderr, "%s: illegal value for real variable '%s'\n",
457 +                        progname, vp->name);
458 +        exit(1);
459 + }
460 +
461 +
462   unsigned long
463   checklast(fnames)                       /* check files and find most recent */
464   register char   *fnames;
# Line 723 | Line 780 | double
780   ambval()                                /* compute ambient value */
781   {
782          if (vdef(EXPOSURE)) {
726                if (!isflt(vval(EXPOSURE)))
727                        badvalue(EXPOSURE);
783                  if (vval(EXPOSURE)[0] == '+' || vval(EXPOSURE)[0] == '-')
784                          return(.5/pow(2.,atof(vval(EXPOSURE))));
785                  return(.5/atof(vval(EXPOSURE)));
# Line 737 | Line 792 | ambval()                               /* compute ambient value */
792   }
793  
794  
795 + renderopts(op)                          /* set rendering options */
796 + char    *op;
797 + {
798 +        switch(vscale(QUALITY)) {
799 +        case LOW:
800 +                lowqopts(op);
801 +                break;
802 +        case MEDIUM:
803 +                medqopts(op);
804 +                break;
805 +        case HIGH:
806 +                hiqopts(op);
807 +                break;
808 +        }
809 + }
810 +
811 +
812   lowqopts(op)                            /* low quality rendering options */
813   register char   *op;
814   {
# Line 832 | Line 904 | register char  *op;
904          }
905          op = addarg(op, "-pt .08");
906          if (vbool(PENUMBRAS))
907 <                op = addarg(op, "-ds .2 -dj .35");
907 >                op = addarg(op, "-ds .2 -dj .5");
908          else
909                  op = addarg(op, "-ds .3");
910          op = addarg(op, "-dt .1 -dc .5 -dr 1 -sj .7 -st .1");
# Line 1223 | Line 1295 | char   *opts;
1295          sprintf(combuf, "rview %s%s -R %s ", vw, opts, rifname);
1296          if (rvdevice != NULL)
1297                  sprintf(combuf+strlen(combuf), "-o %s ", rvdevice);
1298 +        if (vdef(EXPOSURE))
1299 +                sprintf(combuf+strlen(combuf), "-pe %s ", vval(EXPOSURE));
1300          strcat(combuf, oct1name);
1301          if (runcom(combuf)) {           /* run it */
1302                  fprintf(stderr, "%s: error running rview\n", progname);
# Line 1242 | Line 1316 | char   *opts;
1316                                          /* get pfilt options */
1317          pfiltopts(pfopts);
1318                                          /* get resolution, reporting */
1319 <        mult = vscale(QUALITY)+1;
1319 >        switch (vscale(QUALITY)) {
1320 >        case LOW:
1321 >                mult = 1;
1322 >                break;
1323 >        case MEDIUM:
1324 >                mult = 2;
1325 >                break;
1326 >        case HIGH:
1327 >                mult = 3;
1328 >                break;
1329 >        }
1330          {
1331                  int     xres, yres;
1332                  double  aspect;
# Line 1303 | Line 1387 | char   *opts;
1387                          }
1388                          sprintf(combuf, "rpict%s %s %s%s %s > %s",
1389                                          rep, vw, res, opts,
1390 <                                        oct1name, rawfile);
1390 >                                oct1name, rawfile);
1391                  }
1392                  if (runcom(combuf)) {           /* run rpict */
1393                          fprintf(stderr, "%s: error rendering view %s\n",

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines