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

Comparing ray/src/rt/text.c (file contents):
Revision 2.4 by greg, Fri Jun 19 13:07:48 1992 UTC vs.
Revision 2.5 by greg, Fri Jun 19 14:20:22 1992 UTC

# Line 295 | Line 295 | OBJREC  *m;
295  
296  
297   inglyph(x, y, gl)               /* (x,y) within font glyph gl? */
298 < double  x, y;
298 > double  x, y;           /* real coordinates in range [0,256) */
299   register GLYPH  *gl;
300   {
301          int  n, ncross;
302 <        int  xtc, ytc;
302 >        int  xlb, ylb;
303 >        int  tv;
304          register GORD  *p0, *p1;
305  
306          if (gl == NULL)
307                  return(0);
308 <        xtc = x + 0.5;                  /* compute test coordinates */
309 <        ytc = y + 0.5;
310 <        if (gl->left > xtc || gl->right < xtc ||
311 <                        gl->bottom > ytc || gl->top < ytc)
312 <                return(0);      /* outside extent */
308 >        xlb = x;
309 >        ylb = y;
310 >        if (gl->left > xlb || gl->right <= xlb ||       /* check extent */
311 >                        gl->bottom > ylb || gl->top <= ylb)
312 >                return(0);
313 >        xlb = xlb<<1 | 1;               /* add 1/2 to test points... */
314 >        ylb = ylb<<1 | 1;               /* ...so no equal comparisons */
315          n = gl->nverts;                 /* get # of vertices */
316          p0 = gvlist(gl) + 2*(n-1);      /* connect last to first */
317          p1 = gvlist(gl);
318          ncross = 0;
319                                          /* positive x axis cross test */
320          while (n--) {
321 <                if ((p0[1] > ytc) ^ (p1[1] > ytc))
322 <                        if (p0[0] > xtc && p1[0] > xtc)
321 >                if ((p0[1]<<1 > ylb) ^ (p1[1]<<1 > ylb)) {
322 >                        tv = p0[0]<<1 > xlb | (p1[0]<<1 > xlb) << 1;
323 >                        if (tv == 03)
324                                  ncross++;
325 <                        else if (p0[0] > xtc || p1[0] > xtc)
325 >                        else if (tv)
326                                  ncross += (p1[1] > p0[1]) ^
327                                                  ((p0[1]-y)*(p1[0]-x) >
328                                                  (p0[0]-x)*(p1[1]-y));
329 +                }
330                  p0 = p1;
331                  p1 += 2;
332          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines