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

Comparing ray/src/util/xglaresrc.c (file contents):
Revision 1.8 by greg, Fri May 3 13:43:08 1991 UTC vs.
Revision 1.9 by greg, Wed Jul 31 15:28:03 1991 UTC

# Line 24 | Line 24 | static char SCCSid[] = "$SunId$ LBL";
24  
25   #define NSEG            30              /* number of segments per circle */
26  
27 + #define  FONTNAME       "8x13"          /* text font we'll use */
28 +
29 + float   col[3] = {1.,0.,0.};            /* color */
30 +
31   VIEW    ourview = STDVIEW;              /* view for picture */
32   int     xres, yres;                     /* picture resolution */
33  
# Line 34 | Line 38 | Display        *theDisplay = NULL;             /* connection to server *
38   #define rwind           RootWindow(theDisplay,ourScreen)
39   #define ourScreen       DefaultScreen(theDisplay)
40  
41 < GC      vecGC;
41 > GC      vecGC, strGC;
42   Window  gwind;
39 Cursor  pickcursor;
43  
44  
45   main(argc, argv)
46   int     argc;
47   char    *argv[];
48   {
49 <        char    *windowname;
49 >        extern double   atof();
50 >        char    *windowname = NULL;
51          FILE    *fp;
52  
53 <        progname = argv[0];
54 <        if (argc > 2 && !strcmp(argv[1], "-n")) {
55 <                windowname = argv[2];
56 <                argv += 2;
57 <                argc -= 2;
58 <        } else
59 <                windowname = argv[1];
60 <        if (argc < 2 || argc > 3) {
53 >        progname = *argv++; argc--;
54 >        while (argc > 0 && argv[0][0] == '-') {
55 >                switch (argv[0][1]) {
56 >                case 'n':
57 >                        windowname = *++argv;
58 >                        argc--;
59 >                        break;
60 >                case 'c':
61 >                        col[0] = atof(*++argv);
62 >                        col[1] = atof(*++argv);
63 >                        col[2] = atof(*++argv);
64 >                        argc -= 3;
65 >                        break;
66 >                }
67 >                argv++; argc--;
68 >        }
69 >        if (argc < 1 || argc > 2) {
70                  fprintf(stderr,
71 <                        "Usage: %s [-n windowname] picture [glaresrc]\n",
71 >                "Usage: %s [-n windowname][-c color] picture [glaresrc]\n",
72                                  progname);
73                  exit(1);
74          }
75 <        init(argv[1], windowname);
76 <        if (argc < 3)
75 >        init(argv[0], windowname);
76 >        if (argc < 2)
77                  fp = stdin;
78 <        else if ((fp = fopen(argv[2], "r")) == NULL) {
79 <                fprintf(stderr, "%s: cannot open \"%s\"\n",
67 <                                progname, argv[2]);
78 >        else if ((fp = fopen(argv[1], "r")) == NULL) {
79 >                fprintf(stderr, "%s: cannot open \"%s\"\n", progname, argv[1]);
80                  exit(1);
81          }
82          circle_sources(fp);
# Line 94 | Line 106 | char   *pname, *wname;
106                  exit(1);
107          }
108                                          /* find our window */
109 +        if (wname == NULL)
110 +                wname = pname;
111          gwind = xfindwind(theDisplay, rwind, wname, 2);
112          if (gwind == None) {
113                  if (wname != pname) {
# Line 117 | Line 131 | char   *pname, *wname;
131                  XMapRaised(theDisplay, gwind);
132          do {
133                  XGetWindowAttributes(theDisplay, gwind, &wa);
134 <                sleep(4);
134 >                sleep(6);
135          } while (wa.map_state != IsViewable);
136          if (wa.width != xres || wa.height != yres) {
137                  fprintf(stderr,
# Line 127 | Line 141 | char   *pname, *wname;
141                  yres = wa.height;
142          }
143                                          /* set graphics context */
144 <        xc.red = 65535; xc.green = 0; xc.blue = 0;
144 >        gcv.font = XLoadFont(theDisplay, FONTNAME);
145 >        if (gcv.font == 0) {
146 >                fprintf(stderr, "%s: cannot load font \"%s\"\n",
147 >                                progname, FONTNAME);
148 >                exit(1);
149 >        }
150 >        xc.red = col[0] >= 1.0 ? 65535 : (unsigned)(65536*col[0]);
151 >        xc.green = col[1] >= 1.0 ? 65535 : (unsigned)(65536*col[1]);
152 >        xc.blue = col[2] >= 1.0 ? 65535 : (unsigned)(65536*col[2]);
153          xc.flags = DoRed|DoGreen|DoBlue;
154 +        gcv.background = xc.green >= 32768 ?
155 +                        BlackPixel(theDisplay,DefaultScreen(theDisplay)) :
156 +                        WhitePixel(theDisplay,DefaultScreen(theDisplay)) ;
157          if (XAllocColor(theDisplay, wa.colormap, &xc)) {
158                  gcv.foreground = xc.pixel;
159 <                vecGC = XCreateGC(theDisplay,gwind,GCForeground,&gcv);
159 >                vecGC = XCreateGC(theDisplay,gwind,
160 >                                GCForeground|GCBackground|GCFont,&gcv);
161 >                strGC = vecGC;
162          } else {
163                  gcv.function = GXinvert;
164                  vecGC = XCreateGC(theDisplay,gwind,GCFunction,&gcv);
165 +                gcv.foreground = xc.green < 32768 ?
166 +                        BlackPixel(theDisplay,DefaultScreen(theDisplay)) :
167 +                        WhitePixel(theDisplay,DefaultScreen(theDisplay)) ;
168 +                strGC = XCreateGC(theDisplay,gwind,
169 +                                GCForeground|GCBackground|GCFont,&gcv);
170          }
171   }
172  
# Line 145 | Line 177 | FILE   *fp;
177          char    linbuf[256];
178          int     reading = 0;
179          FVECT   dir;
180 <        double  dom;
180 >        double  dom, lum;
181  
182          while (fgets(linbuf, sizeof(linbuf), fp) != NULL)
183                  if (reading) {
# Line 153 | Line 185 | FILE   *fp;
185                                  XFlush(theDisplay);
186                                  return;
187                          }
188 <                        if (sscanf(linbuf, "%lf %lf %lf %lf",
188 >                        if (sscanf(linbuf, "%lf %lf %lf %lf %lf",
189                                          &dir[0], &dir[1], &dir[2],
190 <                                        &dom) != 4)
190 >                                        &dom, &lum) != 5)
191                                  break;
192                          circle(dir, dom);
193 +                        value(dir, lum);
194                  } else if (!strcmp(linbuf, "BEGIN glare source\n"))
195                          reading++;
196  
# Line 195 | Line 228 | double dom;
228   fail:
229          fprintf(stderr, "%s: cannot draw source at (%f,%f,%f)\n",
230                          progname, dir[0], dir[1], dir[2]);
231 + }
232 +
233 +
234 + value(dir, v)                   /* print value on image */
235 + FVECT   dir;
236 + double  v;
237 + {
238 +        FVECT   pos;
239 +        double  px, py, pz;
240 +        char    buf[32];
241 +
242 +        pos[0] = ourview.vp[0] + dir[0];
243 +        pos[1] = ourview.vp[1] + dir[1];
244 +        pos[2] = ourview.vp[2] + dir[2];
245 +        viewpixel(&px, &py, &pz, &ourview, pos);
246 +        if (pz <= 0.0)
247 +                return;
248 +        sprintf(buf, "%.0f", v);
249 +        XDrawImageString(theDisplay, gwind, strGC,
250 +                        (int)(px*xres), yres-1-(int)(py*yres),
251 +                        buf, strlen(buf));
252   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines