--- ray/src/util/rad.c 1997/03/20 12:50:07 2.53 +++ ray/src/util/rad.c 1998/06/03 16:37:51 2.56 @@ -9,66 +9,67 @@ static char SCCSid[] = "$SunId$ LBL"; */ #include "standard.h" +#include "view.h" #include "paths.h" #include "vars.h" #include #include - /* variables */ -#define OBJECT 0 /* object files */ -#define SCENE 1 /* scene files */ -#define MATERIAL 2 /* material files */ + /* variables (alphabetical by name) */ +#define AMBFILE 0 /* ambient file name */ +#define DETAIL 1 /* level of scene detail */ +#define EXPOSURE 2 /* picture exposure setting */ #define ILLUM 3 /* mkillum input files */ -#define MKILLUM 4 /* mkillum options */ -#define RENDER 5 /* rendering options */ -#define OCONV 6 /* oconv options */ -#define PFILT 7 /* pfilt options */ -#define VIEW 8 /* view(s) for picture(s) */ -#define ZONE 9 /* simulation zone */ -#define QUALITY 10 /* desired rendering quality */ -#define OCTREE 11 /* octree file name */ -#define PICTURE 12 /* picture file root name */ -#define AMBFILE 13 /* ambient file name */ -#define OPTFILE 14 /* rendering options file */ -#define EXPOSURE 15 /* picture exposure setting */ -#define RESOLUTION 16 /* maximum picture resolution */ -#define UP 17 /* view up (X, Y or Z) */ -#define INDIRECT 18 /* indirection in lighting */ -#define DETAIL 19 /* level of scene detail */ -#define PENUMBRAS 20 /* shadow penumbras are desired */ +#define INDIRECT 4 /* indirection in lighting */ +#define MATERIAL 5 /* material files */ +#define MKILLUM 6 /* mkillum options */ +#define OBJECT 7 /* object files */ +#define OCONV 8 /* oconv options */ +#define OCTREE 9 /* octree file name */ +#define OPTFILE 10 /* rendering options file */ +#define PENUMBRAS 11 /* shadow penumbras are desired */ +#define PFILT 12 /* pfilt options */ +#define PICTURE 13 /* picture file root name */ +#define QUALITY 14 /* desired rendering quality */ +#define RAWFILE 15 /* raw picture file root name */ +#define RENDER 16 /* rendering options */ +#define REPORT 17 /* report frequency and errfile */ +#define RESOLUTION 18 /* maximum picture resolution */ +#define SCENE 19 /* scene files */ +#define UP 20 /* view up (X, Y or Z) */ #define VARIABILITY 21 /* level of light variability */ -#define REPORT 22 /* report frequency and errfile */ -#define RAWFILE 23 /* raw picture file root name */ -#define ZFILE 24 /* distance file root name */ +#define VIEWS 22 /* view(s) for picture(s) */ +#define ZFILE 23 /* distance file root name */ +#define ZONE 24 /* simulation zone */ /* total number of variables */ int NVARS = 25; VARIABLE vv[] = { /* variable-value pairs */ - {"objects", 3, 0, NULL, catvalues}, - {"scene", 3, 0, NULL, catvalues}, - {"materials", 3, 0, NULL, catvalues}, + {"AMBFILE", 3, 0, NULL, onevalue}, + {"DETAIL", 3, 0, NULL, qualvalue}, + {"EXPOSURE", 3, 0, NULL, fltvalue}, {"illum", 3, 0, NULL, catvalues}, + {"INDIRECT", 3, 0, NULL, intvalue}, + {"materials", 3, 0, NULL, catvalues}, {"mkillum", 3, 0, NULL, catvalues}, - {"render", 3, 0, NULL, catvalues}, + {"objects", 3, 0, NULL, catvalues}, {"oconv", 3, 0, NULL, catvalues}, - {"pfilt", 2, 0, NULL, catvalues}, - {"view", 2, 0, NULL, NULL}, - {"ZONE", 2, 0, NULL, onevalue}, - {"QUALITY", 3, 0, NULL, qualvalue}, {"OCTREE", 3, 0, NULL, onevalue}, - {"PICTURE", 3, 0, NULL, onevalue}, - {"AMBFILE", 3, 0, NULL, onevalue}, {"OPTFILE", 3, 0, NULL, onevalue}, - {"EXPOSURE", 3, 0, NULL, fltvalue}, + {"PENUMBRAS", 3, 0, NULL, boolvalue}, + {"pfilt", 2, 0, NULL, catvalues}, + {"PICTURE", 3, 0, NULL, onevalue}, + {"QUALITY", 3, 0, NULL, qualvalue}, + {"RAWFILE", 3, 0, NULL, onevalue}, + {"render", 3, 0, NULL, catvalues}, + {"REPORT", 3, 0, NULL, onevalue}, {"RESOLUTION", 3, 0, NULL, onevalue}, + {"scene", 3, 0, NULL, catvalues}, {"UP", 2, 0, NULL, onevalue}, - {"INDIRECT", 3, 0, NULL, intvalue}, - {"DETAIL", 3, 0, NULL, qualvalue}, - {"PENUMBRAS", 3, 0, NULL, boolvalue}, {"VARIABILITY", 3, 0, NULL, qualvalue}, - {"REPORT", 3, 0, NULL, onevalue}, - {"RAWFILE", 3, 0, NULL, onevalue}, + {"view", 2, 0, NULL, NULL}, {"ZFILE", 2, 0, NULL, onevalue}, + {"ZONE", 2, 0, NULL, onevalue}, }; /* overture calculation file */ @@ -364,9 +365,9 @@ setdefaults() /* set default values for unassigned v vval(PICTURE) = radname; vdef(PICTURE)++; } - if (!vdef(VIEW)) { - vval(VIEW) = "X"; - vdef(VIEW)++; + if (!vdef(VIEWS)) { + vval(VIEWS) = "X"; + vdef(VIEWS)++; } if (!vdef(DETAIL)) { vval(DETAIL) = "M"; @@ -616,10 +617,10 @@ char *po; overture = 0; switch (vscale(VARIABILITY)) { case LOW: - op = addarg(op, "-aw 128 -aa .4 -ad 64"); + op = addarg(op, "-aa .4 -ad 64"); break; case MEDIUM: - op = addarg(op, "-aw 1024 -aa .3 -ad 128"); + op = addarg(op, "-aa .3 -ad 128"); break; case HIGH: op = addarg(op, "-aa .25 -ad 256"); @@ -695,10 +696,10 @@ char *po; overture = 0; switch (vscale(VARIABILITY)) { case LOW: - op = addarg(op, "-aw 128 -aa .25 -ad 196 -as 0"); + op = addarg(op, "-aa .25 -ad 196 -as 0"); break; case MEDIUM: - op = addarg(op, "-aw 1024 -aa .2 -ad 400 -as 64"); + op = addarg(op, "-aa .2 -ad 400 -as 64"); break; case HIGH: op = addarg(op, "-aa .15 -ad 768 -as 196"); @@ -771,10 +772,10 @@ char *po; overture = 0; switch (vscale(VARIABILITY)) { case LOW: - op = addarg(op, "-aw 128 -aa .15 -ad 256 -as 0"); + op = addarg(op, "-aa .15 -ad 256 -as 0"); break; case MEDIUM: - op = addarg(op, "-aw 1024 -aa .125 -ad 512 -as 256"); + op = addarg(op, "-aa .125 -ad 512 -as 256"); break; case HIGH: op = addarg(op, "-aa .08 -ad 1024 -as 512"); @@ -999,14 +1000,14 @@ char *vn; /* returned view name */ } /* view number? */ if (isint(viewselect)) - return(specview(nvalue(VIEW, atoi(viewselect)-1))); + return(specview(nvalue(VIEWS, atoi(viewselect)-1))); /* check list */ - while ((mv = nvalue(VIEW, n++)) != NULL) + while ((mv = nvalue(VIEWS, n++)) != NULL) if (matchword(viewselect, mv)) return(specview(mv)); return(specview(viewselect)); /* standard view? */ } - mv = nvalue(VIEW, n); /* use view n */ + mv = nvalue(VIEWS, n); /* use view n */ if (vn != NULL & mv != NULL) { register char *mv2 = mv; if (*mv2 != '-') @@ -1021,56 +1022,28 @@ char *vn; /* returned view name */ printview(vopts) /* print out selected view */ register char *vopts; { - extern char *atos(), *getenv(); - char buf[256]; - FILE *fp; + extern char *strstr(), *atos(), *getenv(); + VIEW vwr; + char buf[128]; register char *cp; - +again: if (vopts == NULL) return(-1); - fputs("VIEW=", stdout); - do { - if (matchword(vopts, "-vf")) { /* expand view file */ - vopts = sskip(vopts); - if (!*atos(buf, sizeof(buf), vopts)) - return(-1); - if ((fp = fopen(buf, "r")) == NULL) - return(-1); - for (buf[sizeof(buf)-2] = '\n'; - fgets(buf, sizeof(buf), fp) != NULL && - buf[0] != '\n'; - buf[sizeof(buf)-2] = '\n') { - if (buf[sizeof(buf)-2] != '\n') { - ungetc(buf[sizeof(buf)-2], fp); - buf[sizeof(buf)-2] = '\0'; - } - if (matchword(buf, "VIEW=") || - matchword(buf, "rview")) { - for (cp = sskip(buf); *cp && *cp != '\n'; cp++) - putchar(*cp); - } - } - fclose(fp); - vopts = sskip(vopts); - } else { - while (isspace(*vopts)) - vopts++; - putchar(' '); #ifdef MSDOS - if (*vopts == '$') { /* expand env. var. */ - if (!*atos(buf, sizeof(buf), vopts+1)) - return(-1); - if ((cp = getenv(buf)) == NULL) - return(-1); - fputs(cp, stdout); - vopts = sskip(vopts); - } else + if (vopts[0] == '$') { + vopts = getenv(vopts+1); + goto again; + } #endif - while (*vopts && !isspace(*vopts)) - putchar(*vopts++); - } - } while (*vopts++); - putchar('\n'); + copystruct(&vwr, &stdview); + cp = vopts; /* get -vf files first */ + while ((cp = strstr(cp, "-vf ")) != NULL && + *atos(buf, sizeof(buf), cp += 4)) + viewfile(buf, &vwr, NULL); + sscanview(&vwr, vopts); /* get the rest */ + fputs(VIEWSTR, stdout); + fprintview(&vwr, stdout); /* print full spec. */ + fputc('\n', stdout); return(0); }