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

Comparing ray/src/util/glrad.c (file contents):
Revision 3.1 by gwlarson, Tue Jun 9 11:43:18 1998 UTC vs.
Revision 3.3 by gwlarson, Tue Jun 9 15:16:55 1998 UTC

# Line 66 | Line 66 | struct {
66   int     currentview = 0;                /* current view number */
67   VIEW    thisview = STDVIEW;             /* displayed view */
68   VIEW    lastview;                       /* last recorded view */
69 char    *lastvc = NULL;                 /* cause of last view change */
69  
70   char    *progname;                      /* global argv[0] */
71   char    *radfile;                       /* rad input file */
# Line 80 | Line 79 | int    backvis = 1;                    /* back faces visible? */
79  
80   int     displist;                       /* our scene display list */
81  
82 + int     in_dev_view = 0;                /* currently in dev_view() */
83 +
84   extern char     *fgets(), *fgetline(), *atos(), *scan4var();
85   extern int      nowarn;                 /* turn warnings off? */
86   extern time_t   time();
# Line 116 | Line 117 | char   *argv[];
117                                          /* run rad and get views */
118          runrad(argc-i, argv+i);
119                                          /* check view */
120 <        if (viewsel != NULL && (currentview = findvw(viewsel)) < 0) {
121 <                fprintf(stderr, "%s: no such view\n", viewsel);
122 <                quit(1);
123 <        }
120 >        if (viewsel != NULL)
121 >                if (viewsel[0] == '-') {
122 >                        char    *ve = viewsel;
123 >                        if (!sscanview(&thisview, viewsel) ||
124 >                                        (ve = setview(&thisview)) != NULL) {
125 >                                fprintf(stderr, "%s: bad view: %s\n",
126 >                                                progname, ve);
127 >                                quit(1);
128 >                        }
129 >                        currentview = -1;
130 >                } else if ((currentview = findvw(viewsel)) < 0) {
131 >                        fprintf(stderr, "%s: no such view: %s\n",
132 >                                                progname, viewsel);
133 >                        quit(1);
134 >                }
135                                          /* open GL */
136          dev_open(radfile = argv[i]);
137                                          /* load octree or scene files */
# Line 129 | Line 141 | char   *argv[];
141          } else
142                  displist = rgl_filelist(nscenef, scene);
143                                          /* set initial view */
144 <        dev_view(vwl[currentview].v);
144 >        dev_view(currentview < 0 ? &thisview : vwl[currentview].v);
145                                          /* input/render loop */
146          while (dev_input(vwintvl))
147                  ;
148                                          /* all done */
149          quit(0);
150   userr:
151 <        fprintf(stderr, "Usage: %s [-w][-c #secs][-v view] rfile [VAR=value]..\n",
151 >        fprintf(stderr, "Usage: %s [-w][-b][-v view] rfile [VAR=value]..\n",
152                          argv[0]);
153          quit(1);
154   }
# Line 204 | Line 216 | char   **av;
216                  expval = atof(cp);
217                  if (*cp == '-' | *cp == '+')
218                          expval = pow(2., expval);
219 +                expval *= 0.5;          /* compensate for local shading */
220          }
221                                                  /* look for materials */
222          while ((cp = scan4var(buf, sizeof(buf), "materials", fp)) != NULL) {
# Line 384 | Line 397 | char  *id;
397                          DisplayHeight(ourdisplay, ourscreen);
398                                          /* map the window */
399          XMapWindow(ourdisplay, gwind);
400 +        do
401 +                dev_input(0);           /* get resize event */
402 +        while (hres == 0 & vres == 0);
403          rgl_checkerr("initializing GLX");
404   }
405  
# Line 419 | Line 435 | register VIEW  *nv;
435          }
436          if (hres != 0 & vres != 0) {
437                  wa = (vres*pheight)/(hres*pwidth);
438 <                va = viewaspect(&thisview);
438 >                va = viewaspect(nv);
439                  if (va > wa+.05) {
440                          newvres = (pwidth/pheight)*va*newhres + .5;
441                          if (newvres > maxvres) {
# Line 434 | Line 450 | register VIEW  *nv;
450                          }
451                  }
452                  if (newhres != hres | newvres != vres) {
453 +                        in_dev_view++;
454                          XResizeWindow(ourdisplay, gwind, newhres, newvres);
455                          do
456                                  dev_input(0);           /* get resize event */
457                          while (newhres != hres | newvres != vres);
458 +                        in_dev_view--;
459                  }
460          }
461          copystruct(&thisview, nv);
# Line 554 | Line 572 | XButtonPressedEvent    *ebut;
572          int     rootx, rooty, wx, wy;
573          unsigned int    statemask;
574  
575 <        copylastv("moving");
575 >        copylastv( movorb ? (movdir ? "left/right" : "up/down") :
576 >                        (movdir ? "fore/back" : "rotate") );
577          XNoOp(ourdisplay);
578  
579          while (!XCheckMaskEvent(ourdisplay,
# Line 609 | Line 628 | register VIEW  *vp;
628   {
629          double  d, xmin, xmax, ymin, ymax, zmin, zmax;
630  
631 <        zmin = 0.05;
632 <        zmax = 5000.;
631 >        zmin = 0.1;
632 >        zmax = 1000.;
633          if (thisview.vfore > FTINY)
634                  zmin = thisview.vfore;
635          if (thisview.vaft > FTINY)
# Line 654 | Line 673 | register XKeyPressedEvent  *ekey;
673                  headlocked = 0;
674                  break;
675          case 'l':                       /* retrieve last (premouse) view */
676 <                if (lastvc != NULL) {
676 >                if (lastview.type) {
677                          VIEW    vtmp;
678                          copystruct(&vtmp, &thisview);
679                          dev_view(&lastview);
# Line 728 | Line 747 | int    vwnum;
747                  vwnum = 0;
748          if (vwnum == currentview)
749                  return;
750 +        /* copylastv("change view"); */
751          dev_view(vwl[currentview=vwnum].v);
752   }
753  
# Line 768 | Line 788 | VIEW   *vp;
788   copylastv(cause)                        /* copy last view position */
789   char    *cause;
790   {
791 +        static char     *lastvc;
792 +
793          if (cause == lastvc)
794                  return;                 /* only record one view per cause */
795          lastvc = cause;
# Line 798 | Line 820 | register XConfigureEvent  *ersz;
820          glViewport(0, 0, hres=ersz->width, vres=ersz->height);
821          if (hres > maxhres) maxhres = hres;
822          if (vres > maxvres) maxvres = vres;
823 +        if (in_dev_view)
824 +                return;
825          wa = (vres*pheight)/(hres*pwidth);
826          va = viewaspect(&thisview);
827          if (va > wa+.05) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines