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.20 by greg, Sun Jul 24 19:53:08 2005 UTC vs.
Revision 3.26 by greg, Thu Apr 28 16:28:20 2016 UTC

# Line 27 | Line 27 | static const char      RCSid[] = "$Id$";
27   #define MAXSCENE        127             /* maximum number of scene files */
28   #endif
29  
30 < #define ZOOMPCT         9               /* percent to zoom at a time */
30 > #define ZOOMPCT         9               /* percent to zoom for +/- */
31 > #define WZOOMPCT        3               /* percent to zoom for mouse wheel */
32  
33 < #define MOVPCT          7               /* percent distance to move /frame */
33 > #define MOVPCT          4               /* percent distance to move /frame */
34   #define MOVDIR(b)       ((b)==Button1 ? 1 : (b)==Button2 ? 0 : -1)
35 < #define MOVDEG          (-5)            /* degrees to orbit CW/down /frame */
35 > #define MOVDEG          (-1.5)          /* degrees to orbit CW/down /frame */
36   #define MOVORB(s)       ((s)&ShiftMask ? 1 : (s)&ControlMask ? -1 : 0)
37  
38   #define BORWIDTH        5               /* border width */
# Line 97 | Line 98 | extern int     nowarn;                 /* turn warnings off? */
98  
99   static void startrtrace(char    *octname);
100   static void runrad(int  ac, char        **av);
101 < static int findvw(register char *nm);
102 < static int varmatch(register char       *s, register char       *vn);
101 > static int findvw(char  *nm);
102 > static int varmatch(char        *s, char        *vn);
103   static char * scan4var(char     *buf, int       buflen, char    *vname, FILE    *fp);
104   static void dev_open(char  *id);
105   static void dev_close(void);
106 < static int dev_view(register VIEW       *nv);
106 > static int dev_view(VIEW        *nv);
107   static int dev_input(int        nsecs);
108   static void render(void);
109   static int moveview(int dx, int dy, int mov, int        orb);
110   static void waitabit(void);
111   static void getmove(XButtonPressedEvent *ebut);
112   static int getintersect(FVECT   wp, FVECT       org, FVECT      dir, double     md);
113 < static void setglpersp(register VIEW    *vp);
114 < static int getkey(register XKeyPressedEvent  *ekey);
113 > static void setglpersp(VIEW     *vp);
114 > static int getkey(XKeyPressedEvent  *ekey);
115   static void zoomview(int        pct, int        dx, int dy);
116   static void gotoview(int        vwnum);
117   static void appendview(char     *nm, VIEW       *vp);
118   static void copylastv(char      *cause);
119 < static void fixwindow(register XExposeEvent  *eexp);
120 < static void resizewindow(register XConfigureEvent  *ersz);
119 > static void fixwindow(XExposeEvent  *eexp);
120 > static void resizewindow(XConfigureEvent  *ersz);
121  
122  
123   int
# Line 245 | Line 246 | runrad(                                /* run rad and load variables */
246          static char     optfile[] = TEMPLATE;
247          int     nvn = 0, nvv = 0;
248          FILE    *fp;
249 <        register char   *cp;
249 >        char    *cp;
250          char    radcomm[256], buf[128], nam[32];
251                                          /* set rad commmand */
252          strcpy(radcomm, "rad -w -v 0        "); /* look out below! */
# Line 281 | Line 282 | runrad(                                /* run rad and load variables */
282                  eyedist = atof(cp);
283                                                  /* look for materials */
284          while ((cp = scan4var(buf, sizeof(buf), "materials", fp)) != NULL) {
285 <                nscenef += wordstring(scene+nscenef, cp);
285 >                nscenef += wordstring(scene+nscenef, MAXSCENE-nscenef, cp);
286                  buf[0] = '\0';
287          }
288                                                  /* look for octree */
# Line 289 | Line 290 | runrad(                                /* run rad and load variables */
290                  octree = savqstr(cp);
291                                                  /* look for scene files */
292          while ((cp = scan4var(buf, sizeof(buf), "scene", fp)) != NULL) {
293 <                nscenef += wordstring(scene+nscenef, cp);
293 >                nscenef += wordstring(scene+nscenef, MAXSCENE-nscenef, cp);
294                  buf[0] = '\0';
295          }
296                                                  /* load view names */
# Line 335 | Line 336 | runrad(                                /* run rad and load variables */
336  
337   static int
338   findvw(                 /* find named view */
339 <        register char   *nm
339 >        char    *nm
340   )
341   {
342 <        register int    n;
342 >        int     n;
343  
344          if ((*nm >= '1') & (*nm <= '9') &&
345                          (n = atoi(nm)-1) <= MAXVIEW && vwl[n].v != NULL)
# Line 352 | Line 353 | findvw(                        /* find named view */
353  
354   static int
355   varmatch(                               /* match line to variable */
356 <        register char   *s,
357 <        register char   *vn
356 >        char    *s,
357 >        char    *vn
358   )
359   {
360 <        register int    c;
360 >        int     c;
361  
362          for ( ; *vn && *s == *vn; s++, vn++)
363                  ;
# Line 379 | Line 380 | scan4var(      /* scan for variable from fp */
380   )
381   {
382          int     cval;
383 <        register char   *cp;
383 >        char    *cp;
384                                          /* search out matching line */
385          while ((cval = varmatch(buf, vname))) {
386                  if (cval > 0)                   /* gone too far? */
# Line 501 | Line 502 | dev_close(void)                        /* close our display and free resour
502  
503   static int
504   dev_view(                       /* assign new driver view */
505 <        register VIEW   *nv
505 >        VIEW    *nv
506   )
507   {
508          int     newhres = hres, newvres = vres;
# Line 539 | Line 540 | dev_view(                      /* assign new driver view */
540                          XResizeWindow(ourdisplay, gwind, newhres, newvres);
541                          do
542                                  dev_input(0);           /* get resize event */
543 <                        while ((newhres != hres) | (newvres != vres));
543 >                        while ((newhres != hres) & (newvres != vres));
544                          no_render--;
545                  }
546          }
# Line 584 | Line 585 | dev_input(             /* get next input event */
585          case KeyPress:
586                  return(getkey(levptr(XKeyPressedEvent)));
587          case ButtonPress:
588 <                getmove(levptr(XButtonPressedEvent));
588 >                switch (levptr(XButtonPressedEvent)->button) {
589 >                case Button4:                   /* wheel up */
590 >                        zoomview(100+WZOOMPCT, levptr(XButtonPressedEvent)->x,
591 >                                        vres-1-levptr(XButtonPressedEvent)->y);
592 >                        break;
593 >                case Button5:                   /* wheel down */
594 >                        zoomview(100-WZOOMPCT, levptr(XButtonPressedEvent)->x,
595 >                                        vres-1-levptr(XButtonPressedEvent)->y);
596 >                        break;
597 >                default:
598 >                        getmove(levptr(XButtonPressedEvent));
599 >                        break;
600 >                }
601                  break;
602          }
603          return(1);
# Line 646 | Line 659 | moveview(      /* move our view */
659                  VSUM(nv.vp, wp, odir, -1.);
660                  spinvector(nv.vdir, nv.vdir, nv.vup, d);
661          } else if (orb) {               /* orbit up/down */
662 <                fcross(v1, odir, nv.vup);
663 <                if (normalize(v1) == 0.)
662 >                if (geodesic(odir, odir, nv.vup,
663 >                                d=MOVDEG*PI/180.*orb, GEOD_RAD) == 0.0)
664                          return(0);
652                spinvector(odir, odir, v1, d=MOVDEG*PI/180.*orb);
665                  VSUM(nv.vp, wp, odir, -1.);
666 <                spinvector(nv.vdir, nv.vdir, v1, d);
666 >                geodesic(nv.vdir, nv.vdir, nv.vup, d, GEOD_RAD);
667          } else if (mov) {               /* move forward/backward */
668                  d = MOVPCT/100. * mov;
669                  VSUM(nv.vp, nv.vp, odir, d);
# Line 673 | Line 685 | waitabit(void)                         /* pause a moment */
685   {
686          struct timespec ts;
687          ts.tv_sec = 0;
688 <        ts.tv_nsec = 5000000;
688 >        ts.tv_nsec = 50000000;
689          nanosleep(&ts, NULL);
690   }
691  
# Line 749 | Line 761 | getintersect(          /* intersect ray with scene geometry */
761  
762   static void
763   setglpersp(                     /* set perspective view in GL */
764 <        register VIEW   *vp
764 >        VIEW    *vp
765   )
766   {
767          double  d, xmin, xmax, ymin, ymax, zmin, zmax;
# Line 783 | Line 795 | setglpersp(                    /* set perspective view in GL */
795  
796   static int
797   getkey(                         /* get input key */
798 <        register XKeyPressedEvent  *ekey
798 >        XKeyPressedEvent  *ekey
799   )
800   {
801          int  n;
# Line 828 | Line 840 | getkey(                                /* get input key */
840          case 'V':                       /* append view to rad file */
841                  appendview(NULL, &thisview);
842                  break;
843 +        case 'Q':
844          case 'q':                       /* quit the program */
845                  return(0);
846          default:
# Line 932 | Line 945 | copylastv(                     /* copy last view position */
945  
946   static void
947   fixwindow(                              /* repair damage to window */
948 <        register XExposeEvent  *eexp
948 >        XExposeEvent  *eexp
949   )
950   {
951          if ((hres == 0) | (vres == 0)) {        /* first exposure */
# Line 948 | Line 961 | fixwindow(                             /* repair damage to window */
961  
962   static void
963   resizewindow(                   /* resize window */
964 <        register XConfigureEvent  *ersz
964 >        XConfigureEvent  *ersz
965   )
966   {
967          static char     resizing[] = "resizing window";

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines