| 135 |
|
char *argv[]; |
| 136 |
|
{ |
| 137 |
|
char ropts[512]; |
| 138 |
+ |
char popts[64]; |
| 139 |
|
int i; |
| 140 |
|
|
| 141 |
|
progname = argv[0]; |
| 190 |
|
/* check date on ambient file */ |
| 191 |
|
checkambfile(); |
| 192 |
|
/* run simulation */ |
| 193 |
< |
renderopts(ropts); |
| 193 |
> |
renderopts(ropts, popts); |
| 194 |
|
xferopts(ropts); |
| 195 |
|
if (rvdevice != NULL) |
| 196 |
< |
rview(ropts); |
| 196 |
> |
rview(ropts, popts); |
| 197 |
|
else |
| 198 |
< |
rpict(ropts); |
| 198 |
> |
rpict(ropts, popts); |
| 199 |
|
exit(0); |
| 200 |
|
userr: |
| 201 |
|
fprintf(stderr, |
| 701 |
|
exit(1); |
| 702 |
|
} |
| 703 |
|
octreedate = time((time_t *)NULL); |
| 704 |
+ |
if (octreedate < scenedate) /* in case clock is off */ |
| 705 |
+ |
octreedate = scenedate; |
| 706 |
|
} |
| 707 |
|
if (oct1name == vval(OCTREE)) /* no mkillum? */ |
| 708 |
|
oct1date = octreedate > matdate ? octreedate : matdate; |
| 729 |
|
exit(1); |
| 730 |
|
} |
| 731 |
|
oct0date = time((time_t *)NULL); |
| 732 |
+ |
if (oct0date < octreedate) /* in case clock is off */ |
| 733 |
+ |
oct0date = octreedate; |
| 734 |
+ |
if (oct0date < illumdate) /* ditto */ |
| 735 |
+ |
oct0date = illumdate; |
| 736 |
|
} |
| 737 |
|
mkillumopts(mkopts); /* build mkillum command */ |
| 738 |
|
mktemp(illumtmp); |
| 761 |
|
exit(1); |
| 762 |
|
} |
| 763 |
|
oct1date = time((time_t *)NULL); |
| 764 |
+ |
if (oct1date < oct0date) /* in case clock is off */ |
| 765 |
+ |
oct1date = oct0date; |
| 766 |
|
rmfile(illumtmp); |
| 767 |
|
} |
| 768 |
|
|
| 829 |
|
} |
| 830 |
|
|
| 831 |
|
|
| 832 |
< |
renderopts(op) /* set rendering options */ |
| 833 |
< |
char *op; |
| 832 |
> |
renderopts(op, po) /* set rendering options */ |
| 833 |
> |
char *op, *po; |
| 834 |
|
{ |
| 835 |
|
switch(vscale(QUALITY)) { |
| 836 |
|
case LOW: |
| 837 |
< |
lowqopts(op); |
| 837 |
> |
lowqopts(op, po); |
| 838 |
|
break; |
| 839 |
|
case MEDIUM: |
| 840 |
< |
medqopts(op); |
| 840 |
> |
medqopts(op, po); |
| 841 |
|
break; |
| 842 |
|
case HIGH: |
| 843 |
< |
hiqopts(op); |
| 843 |
> |
hiqopts(op, po); |
| 844 |
|
break; |
| 845 |
|
} |
| 846 |
|
} |
| 847 |
|
|
| 848 |
|
|
| 849 |
< |
lowqopts(op) /* low quality rendering options */ |
| 849 |
> |
lowqopts(op, po) /* low quality rendering options */ |
| 850 |
|
register char *op; |
| 851 |
+ |
char *po; |
| 852 |
|
{ |
| 853 |
|
double d, org[3], siz[3]; |
| 854 |
|
|
| 855 |
|
*op = '\0'; |
| 856 |
+ |
*po = '\0'; |
| 857 |
|
if (sscanf(vval(ZONE), "%*s %lf %lf %lf %lf %lf %lf", &org[0], |
| 858 |
|
&siz[0], &org[1], &siz[1], &org[2], &siz[2]) != 6) |
| 859 |
|
badvalue(ZONE); |
| 860 |
|
siz[0] -= org[0]; siz[1] -= org[1]; siz[2] -= org[2]; |
| 861 |
+ |
if (siz[0] <= FTINY | siz[1] <= FTINY | siz[2] <= FTINY) |
| 862 |
+ |
badvalue(ZONE); |
| 863 |
|
getoctcube(org, &d); |
| 864 |
|
d *= 3./(siz[0]+siz[1]+siz[2]); |
| 865 |
|
switch (vscale(DETAIL)) { |
| 866 |
|
case LOW: |
| 867 |
< |
op = addarg(op, "-ps 16 -dp 64"); |
| 867 |
> |
po = addarg(po, "-ps 16"); |
| 868 |
> |
op = addarg(op, "-dp 64"); |
| 869 |
|
sprintf(op, " -ar %d", (int)(4*d)); |
| 870 |
|
op += strlen(op); |
| 871 |
|
break; |
| 872 |
|
case MEDIUM: |
| 873 |
< |
op = addarg(op, "-ps 8 -dp 128"); |
| 873 |
> |
po = addarg(po, "-ps 8"); |
| 874 |
> |
op = addarg(op, "-dp 128"); |
| 875 |
|
sprintf(op, " -ar %d", (int)(8*d)); |
| 876 |
|
op += strlen(op); |
| 877 |
|
break; |
| 878 |
|
case HIGH: |
| 879 |
< |
op = addarg(op, "-ps 4 -dp 256"); |
| 879 |
> |
po = addarg(po, "-ps 4"); |
| 880 |
> |
op = addarg(op, "-dp 256"); |
| 881 |
|
sprintf(op, " -ar %d", (int)(16*d)); |
| 882 |
|
op += strlen(op); |
| 883 |
|
break; |
| 884 |
|
} |
| 885 |
< |
op = addarg(op, "-pt .16"); |
| 885 |
> |
po = addarg(po, "-pt .16"); |
| 886 |
|
if (vbool(PENUMBRAS)) |
| 887 |
|
op = addarg(op, "-ds .4"); |
| 888 |
|
else |
| 914 |
|
} |
| 915 |
|
|
| 916 |
|
|
| 917 |
< |
medqopts(op) /* medium quality rendering options */ |
| 917 |
> |
medqopts(op, po) /* medium quality rendering options */ |
| 918 |
|
register char *op; |
| 919 |
+ |
char *po; |
| 920 |
|
{ |
| 921 |
|
double d, org[3], siz[3]; |
| 922 |
|
|
| 923 |
|
*op = '\0'; |
| 924 |
+ |
*po = '\0'; |
| 925 |
|
if (sscanf(vval(ZONE), "%*s %lf %lf %lf %lf %lf %lf", &org[0], |
| 926 |
|
&siz[0], &org[1], &siz[1], &org[2], &siz[2]) != 6) |
| 927 |
|
badvalue(ZONE); |
| 928 |
|
siz[0] -= org[0]; siz[1] -= org[1]; siz[2] -= org[2]; |
| 929 |
+ |
if (siz[0] <= FTINY | siz[1] <= FTINY | siz[2] <= FTINY) |
| 930 |
+ |
badvalue(ZONE); |
| 931 |
|
getoctcube(org, &d); |
| 932 |
|
d *= 3./(siz[0]+siz[1]+siz[2]); |
| 933 |
|
switch (vscale(DETAIL)) { |
| 934 |
|
case LOW: |
| 935 |
< |
op = addarg(op, vbool(PENUMBRAS) ? "-ps 4" : "-ps 8"); |
| 935 |
> |
po = addarg(po, vbool(PENUMBRAS) ? "-ps 4" : "-ps 8"); |
| 936 |
|
op = addarg(op, "-dp 256"); |
| 937 |
|
sprintf(op, " -ar %d", (int)(8*d)); |
| 938 |
|
op += strlen(op); |
| 939 |
|
break; |
| 940 |
|
case MEDIUM: |
| 941 |
< |
op = addarg(op, vbool(PENUMBRAS) ? "-ps 3" : "-ps 6"); |
| 941 |
> |
po = addarg(po, vbool(PENUMBRAS) ? "-ps 3" : "-ps 6"); |
| 942 |
|
op = addarg(op, "-dp 512"); |
| 943 |
|
sprintf(op, " -ar %d", (int)(16*d)); |
| 944 |
|
op += strlen(op); |
| 945 |
|
break; |
| 946 |
|
case HIGH: |
| 947 |
< |
op = addarg(op, vbool(PENUMBRAS) ? "-ps 2" : "-ps 4"); |
| 947 |
> |
po = addarg(po, vbool(PENUMBRAS) ? "-ps 2" : "-ps 4"); |
| 948 |
|
op = addarg(op, "-dp 1024"); |
| 949 |
|
sprintf(op, " -ar %d", (int)(32*d)); |
| 950 |
|
op += strlen(op); |
| 951 |
|
break; |
| 952 |
|
} |
| 953 |
< |
op = addarg(op, "-pt .08"); |
| 953 |
> |
po = addarg(po, "-pt .08"); |
| 954 |
|
if (vbool(PENUMBRAS)) |
| 955 |
|
op = addarg(op, "-ds .2 -dj .5"); |
| 956 |
|
else |
| 985 |
|
} |
| 986 |
|
|
| 987 |
|
|
| 988 |
< |
hiqopts(op) /* high quality rendering options */ |
| 988 |
> |
hiqopts(op, po) /* high quality rendering options */ |
| 989 |
|
register char *op; |
| 990 |
+ |
char *po; |
| 991 |
|
{ |
| 992 |
|
double d, org[3], siz[3]; |
| 993 |
|
|
| 994 |
|
*op = '\0'; |
| 995 |
+ |
*po = '\0'; |
| 996 |
|
if (sscanf(vval(ZONE), "%*s %lf %lf %lf %lf %lf %lf", &org[0], |
| 997 |
|
&siz[0], &org[1], &siz[1], &org[2], &siz[2]) != 6) |
| 998 |
|
badvalue(ZONE); |
| 999 |
|
siz[0] -= org[0]; siz[1] -= org[1]; siz[2] -= org[2]; |
| 1000 |
+ |
if (siz[0] <= FTINY | siz[1] <= FTINY | siz[2] <= FTINY) |
| 1001 |
+ |
badvalue(ZONE); |
| 1002 |
|
getoctcube(org, &d); |
| 1003 |
|
d *= 3./(siz[0]+siz[1]+siz[2]); |
| 1004 |
|
switch (vscale(DETAIL)) { |
| 1005 |
|
case LOW: |
| 1006 |
< |
op = addarg(op, vbool(PENUMBRAS) ? "-ps 1" : "-ps 8"); |
| 1006 |
> |
po = addarg(po, vbool(PENUMBRAS) ? "-ps 1" : "-ps 8"); |
| 1007 |
|
op = addarg(op, "-dp 1024"); |
| 1008 |
|
sprintf(op, " -ar %d", (int)(16*d)); |
| 1009 |
|
op += strlen(op); |
| 1010 |
|
break; |
| 1011 |
|
case MEDIUM: |
| 1012 |
< |
op = addarg(op, vbool(PENUMBRAS) ? "-ps 1" : "-ps 5"); |
| 1012 |
> |
po = addarg(po, vbool(PENUMBRAS) ? "-ps 1" : "-ps 5"); |
| 1013 |
|
op = addarg(op, "-dp 2048"); |
| 1014 |
|
sprintf(op, " -ar %d", (int)(32*d)); |
| 1015 |
|
op += strlen(op); |
| 1016 |
|
break; |
| 1017 |
|
case HIGH: |
| 1018 |
< |
op = addarg(op, vbool(PENUMBRAS) ? "-ps 1" : "-ps 3"); |
| 1018 |
> |
po = addarg(po, vbool(PENUMBRAS) ? "-ps 1" : "-ps 3"); |
| 1019 |
|
op = addarg(op, "-dp 4096"); |
| 1020 |
|
sprintf(op, " -ar %d", (int)(64*d)); |
| 1021 |
|
op += strlen(op); |
| 1022 |
|
break; |
| 1023 |
|
} |
| 1024 |
< |
op = addarg(op, "-pt .04"); |
| 1024 |
> |
po = addarg(po, "-pt .04"); |
| 1025 |
|
if (vbool(PENUMBRAS)) |
| 1026 |
|
op = addarg(op, "-ds .1 -dj .7"); |
| 1027 |
|
else |
| 1171 |
|
badvalue(ZONE); |
| 1172 |
|
for (i = 0; i < 3; i++) { |
| 1173 |
|
dim[i] -= cent[i]; |
| 1174 |
+ |
if (dim[i] <= FTINY) |
| 1175 |
+ |
badvalue(ZONE); |
| 1176 |
|
cent[i] += .5*dim[i]; |
| 1177 |
|
} |
| 1178 |
|
mult = vlet(ZONE)=='E' ? 2. : .45 ; |
| 1336 |
|
} |
| 1337 |
|
|
| 1338 |
|
|
| 1339 |
< |
rview(opts) /* run rview with first view */ |
| 1340 |
< |
char *opts; |
| 1339 |
> |
rview(opts, po) /* run rview with first view */ |
| 1340 |
> |
char *opts, *po; |
| 1341 |
|
{ |
| 1342 |
|
char *vw; |
| 1343 |
|
char combuf[512]; |
| 1346 |
|
return; |
| 1347 |
|
if (sayview) |
| 1348 |
|
printview(vw); |
| 1349 |
< |
sprintf(combuf, "rview %s%s -R %s ", vw, opts, rifname); |
| 1349 |
> |
sprintf(combuf, "rview %s%s%s -R %s ", vw, po, opts, rifname); |
| 1350 |
|
if (rvdevice != NULL) |
| 1351 |
|
sprintf(combuf+strlen(combuf), "-o %s ", rvdevice); |
| 1352 |
|
if (vdef(EXPOSURE)) |
| 1359 |
|
} |
| 1360 |
|
|
| 1361 |
|
|
| 1362 |
< |
rpict(opts) /* run rpict and pfilt for each view */ |
| 1363 |
< |
char *opts; |
| 1362 |
> |
rpict(opts, po) /* run rpict and pfilt for each view */ |
| 1363 |
> |
char *opts, *po; |
| 1364 |
|
{ |
| 1365 |
|
char combuf[1024]; |
| 1366 |
|
char rawfile[MAXPATH], picfile[MAXPATH], rep[MAXPATH+16], res[32]; |
| 1421 |
|
/* build rpict command */ |
| 1422 |
|
sprintf(rawfile, "%s_%s.raw", vval(PICTURE), vs); |
| 1423 |
|
if (fdate(rawfile) >= oct1date) /* recover */ |
| 1424 |
< |
sprintf(combuf, "rpict%s%s -ro %s %s", |
| 1425 |
< |
rep, opts, rawfile, oct1name); |
| 1424 |
> |
sprintf(combuf, "rpict%s%s%s -ro %s %s", |
| 1425 |
> |
rep, po, opts, rawfile, oct1name); |
| 1426 |
|
else { |
| 1427 |
|
if (overture) { /* run overture calculation */ |
| 1428 |
|
sprintf(combuf, |
| 1439 |
|
rmfile(overfile); |
| 1440 |
|
#endif |
| 1441 |
|
} |
| 1442 |
< |
sprintf(combuf, "rpict%s %s %s%s %s > %s", |
| 1443 |
< |
rep, vw, res, opts, |
| 1442 |
> |
sprintf(combuf, "rpict%s %s %s%s%s %s > %s", |
| 1443 |
> |
rep, vw, res, po, opts, |
| 1444 |
|
oct1name, rawfile); |
| 1445 |
|
} |
| 1446 |
|
if (runcom(combuf)) { /* run rpict */ |