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

Comparing ray/src/rt/rv2.c (file contents):
Revision 1.10 by greg, Thu Jul 27 22:58:26 1989 UTC vs.
Revision 1.18 by greg, Tue Jan 30 11:37:37 1990 UTC

# Line 28 | Line 28 | extern char  *progname;
28   getframe(s)                             /* get a new frame */
29   char  *s;
30   {
31 <        int  x0, y0, x1, y1;
32 <
33 <        if (!strcmp("all", s)) {
34 <                pframe.l = pframe.d = 0;
35 <                pframe.r = ourview.hresolu;
36 <                pframe.u = ourview.vresolu;
37 <                pdepth = 0;
31 >        if (getrect(s, &pframe) < 0)
32                  return;
39        }
40        if (sscanf(s, "%d %d %d %d", &x0, &y0, &x1, &y1) != 4) {
41                if (dev->getcur == NULL)
42                        return;
43                (*dev->comout)("Pick first corner\n");
44                if ((*dev->getcur)(&x0, &y0) == ABORT)
45                        return;
46                (*dev->comout)("Pick second corner\n");
47                if ((*dev->getcur)(&x1, &y1) == ABORT)
48                        return;
49        }
50        if (x0 < x1) {
51                pframe.l = x0;
52                pframe.r = x1;
53        } else {
54                pframe.l = x1;
55                pframe.r = x0;
56        }
57        if (y0 < y1) {
58                pframe.d = y0;
59                pframe.u = y1;
60        } else {
61                pframe.d = y1;
62                pframe.u = y0;
63        }
64        if (pframe.l < 0) pframe.l = 0;
65        if (pframe.d < 0) pframe.d = 0;
66        if (pframe.r > ourview.hresolu) pframe.r = ourview.hresolu;
67        if (pframe.u > ourview.vresolu) pframe.u = ourview.vresolu;
68        if (pframe.l > pframe.r) pframe.l = pframe.r;
69        if (pframe.d > pframe.u) pframe.d = pframe.u;
33          pdepth = 0;
34   }
35  
36  
37 + getrepaint(s)                           /* get area and repaint */
38 + char  *s;
39 + {
40 +        RECT  box;
41 +
42 +        if (getrect(s, &box) < 0)
43 +                return;
44 +        paintrect(&ptrunk, 0, 0, hresolu, vresolu, &box);
45 + }
46 +
47 +
48   getview(s)                              /* get/show view parameters */
49   char  *s;
50   {
# Line 95 | Line 69 | char  *s;
69          }
70          sprintf(buf, "view type (%c): ", ourview.type);
71          (*dev->comout)(buf);
72 <        (*dev->comin)(buf);
72 >        (*dev->comin)(buf, NULL);
73          if (buf[0] == CTRL(C)) return;
74          if (buf[0] && buf[0] != ourview.type) {
75                  nv.type = buf[0];
# Line 105 | Line 79 | char  *s;
79          sprintf(buf, "view point (%.6g %.6g %.6g): ",
80                          ourview.vp[0], ourview.vp[1], ourview.vp[2]);
81          (*dev->comout)(buf);
82 <        (*dev->comin)(buf);
82 >        (*dev->comin)(buf, NULL);
83          if (buf[0] == CTRL(C)) return;
84          if (sscanf(buf, "%lf %lf %lf", &nv.vp[0], &nv.vp[1], &nv.vp[2]) == 3)
85                  change++;
# Line 114 | Line 88 | char  *s;
88          sprintf(buf, "view direction (%.6g %.6g %.6g): ",
89                          ourview.vdir[0], ourview.vdir[1], ourview.vdir[2]);
90          (*dev->comout)(buf);
91 <        (*dev->comin)(buf);
91 >        (*dev->comin)(buf, NULL);
92          if (buf[0] == CTRL(C)) return;
93          if (sscanf(buf,"%lf %lf %lf",&nv.vdir[0],&nv.vdir[1],&nv.vdir[2]) == 3)
94                  change++;
# Line 123 | Line 97 | char  *s;
97          sprintf(buf, "view up (%.6g %.6g %.6g): ",
98                          ourview.vup[0], ourview.vup[1], ourview.vup[2]);
99          (*dev->comout)(buf);
100 <        (*dev->comin)(buf);
100 >        (*dev->comin)(buf, NULL);
101          if (buf[0] == CTRL(C)) return;
102          if (sscanf(buf,"%lf %lf %lf",&nv.vup[0],&nv.vup[1],&nv.vup[2]) == 3)
103                  change++;
# Line 132 | Line 106 | char  *s;
106          sprintf(buf, "view horiz and vert size (%.6g %.6g): ",
107                          ourview.horiz, ourview.vert);
108          (*dev->comout)(buf);
109 <        (*dev->comin)(buf);
109 >        (*dev->comin)(buf, NULL);
110          if (buf[0] == CTRL(C)) return;
111          if (sscanf(buf, "%lf %lf", &nv.horiz, &nv.vert) == 2)
112                  change++;
113          else {
114                  nv.horiz = ourview.horiz; nv.vert = ourview.vert;
115          }
116 <        sprintf(buf, "x and y resolution (%d %d): ",
117 <                        ourview.hresolu, ourview.vresolu);
116 >        sprintf(buf, "view shift and lift (%.6g %.6g): ",
117 >                        ourview.hoff, ourview.voff);
118          (*dev->comout)(buf);
119 <        (*dev->comin)(buf);
119 >        (*dev->comin)(buf, NULL);
120          if (buf[0] == CTRL(C)) return;
121 <        if (sscanf(buf, "%d %d", &nv.hresolu, &nv.vresolu) == 2)
121 >        if (sscanf(buf, "%lf %lf", &nv.hoff, &nv.voff) == 2)
122                  change++;
123          else {
124 <                nv.hresolu = ourview.hresolu; nv.vresolu = ourview.vresolu;
124 >                nv.hoff = ourview.hoff; nv.voff = ourview.voff;
125          }
126          if (change)
127                  newview(&nv);
# Line 163 | Line 137 | char  *s;
137          VIEW  nv;
138  
139          if (sscanf(s, "%s", buf) == 1) {        /* get parameters from a file */
140 <                bcopy(&stdview, &nv, sizeof(VIEW));
140 >                copystruct(&nv, &stdview);
141                  if ((fname = getpath(buf, NULL, 0)) == NULL ||
142 <                                (success = viewfile(fname, &nv)) == -1) {
142 >                                (success = viewfile(fname, &nv, 0, 0)) == -1) {
143                          sprintf(errmsg, "cannot open \"%s\"", buf);
144                          error(COMMAND, errmsg);
145                          return;
# Line 176 | Line 150 | char  *s;
150                          newview(&nv);
151                  return;
152          }
153 <        if (oldview.hresolu == 0) {     /* no old view! */
153 >        if (oldview.horiz == 0) {       /* no old view! */
154                  error(COMMAND, "no previous view");
155                  return;
156          }
157 <        bcopy(&ourview, &nv, sizeof(VIEW));
158 <        bcopy(&oldview, &ourview, sizeof(VIEW));
159 <        bcopy(&nv, &oldview, sizeof(VIEW));
157 >        copystruct(&nv, &ourview);
158 >        copystruct(&ourview, &oldview);
159 >        copystruct(&oldview, &nv);
160          newimage();
161   }
162  
163  
190 getinterest(s, direc, vec, mp)          /* get area of interest */
191 char  *s;
192 int  direc;
193 FVECT  vec;
194 double  *mp;
195 {
196        int  x, y;
197        RAY  thisray;
198        register int  i;
199
200        if (sscanf(s, "%lf", mp) != 1)
201                *mp = 1.0;
202        else if (*mp < -FTINY)          /* negative zoom is reduction */
203                *mp = -1.0 / *mp;
204        else if (*mp <= FTINY) {        /* too small */
205                error(COMMAND, "illegal magnification");
206                return(-1);
207        }
208        if (sscanf(s, "%*lf %lf %lf %lf", &vec[0], &vec[1], &vec[2]) != 3) {
209                if (dev->getcur == NULL)
210                        return(-1);
211                (*dev->comout)("Pick view center\n");
212                if ((*dev->getcur)(&x, &y) == ABORT)
213                        return(-1);
214                rayview(thisray.rorg, thisray.rdir, &ourview, x+.5, y+.5);
215                if (!direc || ourview.type == VT_PAR) {
216                        rayorigin(&thisray, NULL, PRIMARY, 1.0);
217                        if (!localhit(&thisray, &thescene)) {
218                                error(COMMAND, "not a local object");
219                                return(-1);
220                        }
221                }
222                if (direc)
223                        if (ourview.type == VT_PAR)
224                                for (i = 0; i < 3; i++)
225                                        vec[i] = thisray.rop[i] - ourview.vp[i];
226                        else
227                                VCOPY(vec, thisray.rdir);
228                else
229                        VCOPY(vec, thisray.rop);
230        } else if (direc)
231                        for (i = 0; i < 3; i++)
232                                vec[i] -= ourview.vp[i];
233        return(0);
234 }
235
236
164   getaim(s)                               /* aim camera */
165   char  *s;
166   {
# Line 245 | Line 172 | char  *s;
172                  return;
173          VCOPY(nv.vp, ourview.vp);
174          VCOPY(nv.vup, ourview.vup);
175 <        nv.hresolu = ourview.hresolu; nv.vresolu = ourview.vresolu;
175 >        nv.hoff = ourview.hoff; nv.voff = ourview.voff;
176          if ((nv.type = ourview.type) == VT_PAR) {
177                  nv.horiz = ourview.horiz / zfact;
178                  nv.vert = ourview.vert / zfact;
# Line 286 | Line 213 | char  *s;
213          }
214          VCOPY(nv.vp, ourview.vp);
215          VCOPY(nv.vup, ourview.vup);
216 <        nv.hresolu = ourview.hresolu; nv.vresolu = ourview.vresolu;
216 >        nv.hoff = ourview.hoff; nv.voff = ourview.voff;
217          spinvector(nv.vdir, ourview.vdir, ourview.vup, angle*(PI/180.));
218          if (elev != 0.0) {
219                  fcross(v1, nv.vdir, ourview.vup);
# Line 343 | Line 270 | char  *s;
270                  if ((*dev->getcur)(&x, &y) == ABORT)
271                          return;
272                  r.l = r.d = 0;
273 <                r.r = ourview.hresolu; r.u = ourview.vresolu;
273 >                r.r = hresolu; r.u = vresolu;
274                  p = findrect(x, y, &ptrunk, &r, -1);
275                  e = 1.0;
276          } else {
# Line 355 | Line 282 | char  *s;
282                          if (*cp == '\0') {      /* interactive */
283                                  sprintf(buf, "exposure (%lf): ", exposure);
284                                  (*dev->comout)(buf);
285 <                                (*dev->comin)(buf);
285 >                                (*dev->comin)(buf, NULL);
286                                  for (cp = buf; isspace(*cp); cp++)
287                                          ;
288                                  if (*cp == '\0')
# Line 408 | Line 335 | register char  *s;
335          
336          if (s[0] == '\0') {
337                  (*dev->comout)("aa ab ad ar as av dc dj dt lr lw sp st: ");
338 <                (*dev->comin)(buf);
338 >                (*dev->comin)(buf, NULL);
339                  s = buf;
340          }
341          switch (s[0]) {
# Line 419 | Line 346 | register char  *s;
346                                  sprintf(buf, "limit weight (%.6g): ",
347                                                  minweight);
348                                  (*dev->comout)(buf);
349 <                                (*dev->comin)(buf);
349 >                                (*dev->comin)(buf, NULL);
350                                  if (sscanf(buf, "%lf", &d0) != 1)
351                                          break;
352                          }
# Line 430 | Line 357 | register char  *s;
357                                  sprintf(buf, "limit reflection (%d): ",
358                                                  maxdepth);
359                                  (*dev->comout)(buf);
360 <                                (*dev->comin)(buf);
360 >                                (*dev->comin)(buf, NULL);
361                                  if (sscanf(buf, "%d", &i0) != 1)
362                                          break;
363                          }
# Line 447 | Line 374 | register char  *s;
374                                  sprintf(buf, "direct jitter (%.6g): ",
375                                                  dstrsrc);
376                                  (*dev->comout)(buf);
377 <                                (*dev->comin)(buf);
377 >                                (*dev->comin)(buf, NULL);
378                                  if (sscanf(buf, "%lf", &d0) != 1)
379                                          break;
380                          }
# Line 458 | Line 385 | register char  *s;
385                                  sprintf(buf, "direct certainty (%.6g): ",
386                                                  shadcert);
387                                  (*dev->comout)(buf);
388 <                                (*dev->comin)(buf);
388 >                                (*dev->comin)(buf, NULL);
389                                  if (sscanf(buf, "%lf", &d0) != 1)
390                                          break;
391                          }
# Line 469 | Line 396 | register char  *s;
396                                  sprintf(buf, "direct threshold (%.6g): ",
397                                                  shadthresh);
398                                  (*dev->comout)(buf);
399 <                                (*dev->comin)(buf);
399 >                                (*dev->comin)(buf, NULL);
400                                  if (sscanf(buf, "%lf", &d0) != 1)
401                                          break;
402                          }
# Line 489 | Line 416 | register char  *s;
416                                                  colval(ambval,GRN),
417                                                  colval(ambval,BLU));
418                                  (*dev->comout)(buf);
419 <                                (*dev->comin)(buf);
419 >                                (*dev->comin)(buf, NULL);
420                                  if (sscanf(buf, "%lf %lf %lf",
421                                                  &d0, &d1, &d2) != 3)
422                                          break;
# Line 501 | Line 428 | register char  *s;
428                                  sprintf(buf, "ambient accuracy (%.6g): ",
429                                                  ambacc);
430                                  (*dev->comout)(buf);
431 <                                (*dev->comin)(buf);
431 >                                (*dev->comin)(buf, NULL);
432                                  if (sscanf(buf, "%lf", &d0) != 1)
433                                          break;
434                          }
# Line 512 | Line 439 | register char  *s;
439                                  sprintf(buf, "ambient divisions (%d): ",
440                                                  ambdiv);
441                                  (*dev->comout)(buf);
442 <                                (*dev->comin)(buf);
442 >                                (*dev->comin)(buf, NULL);
443                                  if (sscanf(buf, "%d", &i0) != 1)
444                                          break;
445                          }
# Line 523 | Line 450 | register char  *s;
450                                  sprintf(buf, "ambient super-samples (%d): ",
451                                                  ambssamp);
452                                  (*dev->comout)(buf);
453 <                                (*dev->comin)(buf);
453 >                                (*dev->comin)(buf, NULL);
454                                  if (sscanf(buf, "%d", &i0) != 1)
455                                          break;
456                          }
# Line 534 | Line 461 | register char  *s;
461                                  sprintf(buf, "ambient bounces (%d): ",
462                                                  ambounce);
463                                  (*dev->comout)(buf);
464 <                                (*dev->comin)(buf);
464 >                                (*dev->comin)(buf, NULL);
465                                  if (sscanf(buf, "%d", &i0) != 1)
466                                          break;
467                          }
# Line 545 | Line 472 | register char  *s;
472                                  sprintf(buf, "ambient resolution (%d): ",
473                                                  ambres);
474                                  (*dev->comout)(buf);
475 <                                (*dev->comin)(buf);
475 >                                (*dev->comin)(buf, NULL);
476                                  if (sscanf(buf, "%d", &i0) != 1)
477                                          break;
478                          }
# Line 562 | Line 489 | register char  *s;
489                          if (sscanf(s+2, "%d", &i0) != 1) {
490                                  sprintf(buf, "sample pixel (%d): ", psample);
491                                  (*dev->comout)(buf);
492 <                                (*dev->comin)(buf);
492 >                                (*dev->comin)(buf, NULL);
493                                  if (sscanf(buf, "%d", &i0) != 1)
494                                          break;
495                          }
# Line 574 | Line 501 | register char  *s;
501                                  sprintf(buf, "sample threshold (%.6g): ",
502                                                  maxdiff);
503                                  (*dev->comout)(buf);
504 <                                (*dev->comin)(buf);
504 >                                (*dev->comin)(buf, NULL);
505                                  if (sscanf(buf, "%lf", &d0) != 1)
506                                          break;
507                          }
# Line 613 | Line 540 | char  *s;
540                  if ((*dev->getcur)(&x, &y) == ABORT)
541                          return;
542  
543 <                rayview(thisray.rorg, thisray.rdir, &ourview, x+.5, y+.5);
543 >                viewray(thisray.rorg, thisray.rdir, &ourview,
544 >                                (x+.5)/hresolu, (y+.5)/vresolu);
545                  
546          } else if (normalize(thisray.rdir) == 0.0) {
547                  error(COMMAND, "zero ray direction");
# Line 632 | Line 560 | char  *s;
560                                  ofun[thisray.ro->otype].funame,
561                                  thisray.ro->oname);
562                  (*dev->comout)(buf);
563 <                (*dev->comin)(buf);
563 >                (*dev->comin)(buf, NULL);
564                  if (thisray.rot >= FHUGE)
565                          (*dev->comout)("at infinity");
566                  else {
# Line 640 | Line 568 | char  *s;
568                                          thisray.rop[1], thisray.rop[2]);
569                          (*dev->comout)(buf);
570                  }
571 <                (*dev->comin)(buf);
571 >                (*dev->comin)(buf, NULL);
572                  sprintf(buf, "with value (%.6g %.6g %.6g)",
573                                  colval(thisray.rcol,RED),
574                                  colval(thisray.rcol,GRN),
575                                  colval(thisray.rcol,BLU));
576                  (*dev->comout)(buf);
577          }
578 <        (*dev->comin)(buf);
578 >        (*dev->comin)(buf, NULL);
579   }
580  
581  
# Line 676 | Line 604 | char  *s;
604                                                  /* write header */
605          fputs(progname, fp);
606          fprintview(&ourview, fp);
607 <        fputs("\n", fp);
607 >        putc('\n', fp);
608          if (exposure != 1.0)
609 <                fprintf(fp, "EXPOSURE=%e\n", exposure);
610 <        fprintf(fp, "\n-Y %d +X %d\n", ourview.vresolu, ourview.hresolu);
609 >                fputexpos(exposure, fp);
610 >        if (dev->pixaspect != 1.0)
611 >                fputaspect(dev->pixaspect, fp);
612 >        putc('\n', fp);
613 >        fputresolu(YMAJOR|YDECR, hresolu, vresolu, fp);
614  
615 <        scanline = (COLR *)malloc(ourview.hresolu*sizeof(COLR));
615 >        scanline = (COLR *)malloc(hresolu*sizeof(COLR));
616          if (scanline == NULL)
617                  error(SYSTEM, "out of memory in writepict");
618 <        for (y = ourview.vresolu-1; y >= 0; y--) {
619 <                getpictcolrs(y, scanline, &ptrunk,
620 <                                ourview.hresolu, ourview.vresolu);
690 <                if (fwritecolrs(scanline, ourview.hresolu, fp) < 0)
618 >        for (y = vresolu-1; y >= 0; y--) {
619 >                getpictcolrs(y, scanline, &ptrunk, hresolu, vresolu);
620 >                if (fwritecolrs(scanline, hresolu, fp) < 0)
621                          break;
622          }
623          if (fclose(fp) < 0)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines