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

Comparing ray/src/cv/mgf2meta.c (file contents):
Revision 2.4 by greg, Thu May 4 13:55:30 1995 UTC vs.
Revision 2.10 by greg, Mon Nov 17 02:21:53 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1995 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Convert MGF (Materials and Geometry Format) to Metafile 2-d graphics
6   */
7  
8   #include <stdio.h>
9 + #include <stdlib.h>
10 + #include <string.h>
11   #include <math.h>
12 +
13   #include "random.h"
14   #include "mgflib/parser.h"
15 + #include "plocate.h" /* XXX shouldn't this rather be in rtmath.h? */
16  
17 < #define MX(v)   (int)(((1<<14)-1)*(v)[(proj_axis+1)%3])
18 < #define MY(v)   (int)(((1<<14)-1)*(v)[(proj_axis+2)%3])
17 > #define MSIZE   ((1<<14)-1)
18 > #define MX(v)   (int)(MSIZE*(v)[(proj_axis+1)%3])
19 > #define MY(v)   (int)(MSIZE*(v)[(proj_axis+2)%3])
20  
19 int     r_face();
21   int     proj_axis;
22   double  limit[3][2];
23   int     layer;
24 + long    rthresh = 1;
25  
26   extern int      mg_nqcdivs;
27  
28 + static int r_face(int ac, char **av);
29 + static void newlayer(void);
30 + static int doline(int v1x, int v1y, int v2x, int v2y);
31  
32 < main(argc, argv)                /* convert files to stdout */
33 < int     argc;
34 < char    *argv[];
32 >
33 > int
34 > main(           /* convert files to stdout */
35 >        int     argc,
36 >        char    *argv[]
37 > )
38   {
39          int     i;
40                                  /* initialize dispatch table */
# Line 37 | Line 45 | char   *argv[];
45          mg_nqcdivs = 3;         /* reduce object subdivision */
46          mg_init();              /* initialize the parser */
47                                          /* get arguments */
48 +        if (argc > 9 && !strcmp(argv[1], "-t")) {
49 +                rthresh = atof(argv[2])*MSIZE + 0.5;
50 +                rthresh *= rthresh;
51 +                argv += 2;
52 +                argc -= 2;
53 +        }
54          if (argc < 8 || (proj_axis = argv[1][0]-'x') < 0 || proj_axis > 2)
55                  goto userr;
56          limit[0][0] = atof(argv[2]); limit[0][1] = atof(argv[3]);
# Line 56 | Line 70 | char   *argv[];
70          mdone();                        /* close output */
71          exit(0);
72   userr:
73 <        fprintf(stderr, "Usage: %s {x|y|z} xmin xmax ymin ymax zmin zmax [file.mgf] ..\n",
74 <                        argv[0]);
73 >        fputs("Usage: mgf2meta [-t thresh] {x|y|z} xmin xmax ymin ymax zmin zmax [file.mgf] ..\n",
74 >                        stderr);
75          exit(1);
76   }
77  
78  
79   int
80 < r_face(ac, av)                  /* convert a face */
81 < int     ac;
82 < char    **av;
80 > r_face(                 /* convert a face */
81 >        int     ac,
82 >        char    **av
83 > )
84   {
85          static FVECT    bbmin = {0,0,0}, bbmax = {1,1,1};
86          register int    i, j;
# Line 102 | Line 117 | short  hshtab[HTBLSIZ][4];             /* done line segments */
117   #define  hash(mx1,my1,mx2,my2)  ((long)(mx1)<<15 ^ (long)(my1)<<10 ^ \
118                                          (long)(mx2)<<5 ^ (long)(my2))
119  
105 #define  RANDMASK       ((1L<<14)-1)
120  
121 <
122 < newlayer()                              /* start a new layer */
121 > void
122 > newlayer(void)                          /* start a new layer */
123   {
124 < #ifdef BSD
111 <        bzero((char *)hshtab, sizeof(hshtab));
112 < #else
113 <        (void)memset((char *)hshtab, 0, sizeof(hshtab));
114 < #endif
124 >        (void)memset((char *)hshtab, '\0', sizeof(hshtab));
125          if (++layer >= 16) {
126                  mendpage();
127                  layer = 0;
# Line 120 | Line 130 | newlayer()                             /* start a new layer */
130  
131  
132   int
133 < doline(v1x, v1y, v2x, v2y)              /* draw line conditionally */
134 < int     v1x, v1y, v2x, v2y;
133 > doline(         /* draw line conditionally */
134 >        int     v1x,
135 >        int v1y,
136 >        int v2x,
137 >        int v2y
138 > )
139   {
140          register int    h;
141  
# Line 136 | Line 150 | int    v1x, v1y, v2x, v2y;
150          hshtab[h][0] = v1x; hshtab[h][1] = v1y;
151          hshtab[h][2] = v2x; hshtab[h][3] = v2y;
152          if ((long)(v2x-v1x)*(v2x-v1x) + (long)(v2y-v1y)*(v2y-v1y)
153 <                        <= (random()&RANDMASK))
153 >                        <= random() % rthresh)
154                  return(0);
155          mline(v1x, v1y, layer/4, 0, layer%4);
156          mdraw(v2x, v2y);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines