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

Comparing ray/src/ot/obj2mesh.c (file contents):
Revision 2.5 by schorsch, Thu Jun 5 19:29:34 2003 UTC vs.
Revision 2.17 by greg, Mon Feb 6 22:40:21 2023 UTC

# Line 6 | Line 6 | static const char RCSid[] = "$Id$";
6   */
7  
8   #include "copyright.h"
9 + #include "paths.h"
10 + #include "platform.h"
11   #include "standard.h"
12 + #include "resolu.h"
13   #include "cvmesh.h"
14   #include "otypes.h"
15  
16 < extern int      o_face();
16 > extern int      o_face(); /* XXX should go to a header file */
17  
18   int     o_default() { return(O_MISS); }
19  
# Line 20 | Line 23 | char  *progname;                       /* argv[0] */
23  
24   int  nowarn = 0;                        /* supress warnings? */
25  
26 < int  objlim = 15;                       /* # of objects before split */
26 > int  objlim = 9;                        /* # of objects before split */
27  
28   int  resolu = 16384;                    /* octree resolution limit */
29  
30   double  mincusize;                      /* minimum cube size from resolu */
31  
32 + static void addface(CUBE  *cu, OBJECT   obj);
33 + static void add2full(CUBE  *cu, OBJECT  obj);
34  
35 < main(argc, argv)                /* compile a .OBJ file into a mesh */
36 < int  argc;
37 < char  *argv[];
35 >
36 > int
37 > main(           /* compile a .OBJ file into a mesh */
38 >        int  argc,
39 >        char  *argv[]
40 > )
41   {
42 <        int  nmatf = 0;
43 <        char  *matinp[32];
42 >        int  verbose = 0;
43 >        char  *cp;
44          int  i, j;
45  
46          progname = argv[0];
# Line 47 | Line 55 | char  *argv[];
55                          resolu = atoi(argv[++i]);
56                          break;
57                  case 'a':                               /* material file */
58 <                        matinp[nmatf++] = argv[++i];
58 >                        readobj(argv[++i]);
59                          break;
60 +                case 'l':                               /* library material */
61 +                        cp = getpath(argv[++i], getrlibpath(), R_OK);
62 +                        if (cp == NULL) {
63 +                                sprintf(errmsg,
64 +                                        "cannot find library material: '%s'",
65 +                                                argv[i]);
66 +                                error(SYSTEM, errmsg);
67 +                        }
68 +                        readobj(cp);
69 +                        break;
70                  case 'w':                               /* supress warnings */
71                          nowarn = 1;
72                          break;
73 +                case 'v':                               /* print mesh stats */
74 +                        verbose = 1;
75 +                        break;
76                  default:
77                          sprintf(errmsg, "unknown option: '%s'", argv[i]);
78                          error(USER, errmsg);
79                          break;
80                  }
81 +
82 +        if (i < argc-2)
83 +                error(USER, "too many file arguments");
84                                          /* initialize mesh */
85          cvinit(i==argc-2 ? argv[i+1] : "<stdout>");
62                                        /* load material input */
63        for (j = 0; j < nmatf; j++)
64                readobj(matinp[j]);
86                                          /* read .OBJ file into triangles */
87          if (i == argc)
88                  wfreadobj(NULL);
# Line 95 | Line 116 | char  *argv[];
116  
117          writemesh(ourmesh, stdout);     /* write mesh to output */
118          
119 <        /* printmeshstats(ourmesh, stderr); */
119 >        if (verbose)
120 >                printmeshstats(ourmesh, stderr);
121  
122          quit(0);
123 +        return 0; /* pro forma return */
124   }
125  
126  
127   void
128 < quit(code)                              /* exit program */
129 < int  code;
128 > quit(                           /* exit program */
129 >        int  code
130 > )
131   {
132          exit(code);
133   }
134  
135  
136   void
137 < cputs()                                 /* interactive error */
137 > cputs(void)                                     /* interactive error */
138   {
139          /* referenced, but not used */
140   }
141  
142  
143   void
144 < wputs(s)                                /* warning message */
145 < char  *s;
144 > wputs(                          /* warning message */
145 >        const char  *s
146 > )
147   {
148          if (!nowarn)
149                  eputs(s);
# Line 126 | Line 151 | char  *s;
151  
152  
153   void
154 < eputs(s)                                /* put string to stderr */
155 < register char  *s;
154 > eputs(                          /* put string to stderr */
155 >        const char  *s
156 > )
157   {
158          static int  inln = 0;
159  
# Line 141 | Line 167 | register char  *s;
167   }
168  
169  
170 < addface(cu, obj)                        /* add a face to a cube */
171 < register CUBE  *cu;
172 < OBJECT  obj;
170 > static void
171 > addface(                        /* add a face to a cube */
172 >        CUBE  *cu,
173 >        OBJECT  obj
174 > )
175   {
176  
177          if (o_face(objptr(obj), cu) == O_MISS)
# Line 176 | Line 204 | OBJECT obj;
204   }
205  
206  
207 < add2full(cu, obj)                       /* add object to full node */
208 < register CUBE  *cu;
209 < OBJECT  obj;
207 > static void
208 > add2full(                       /* add object to full node */
209 >        CUBE  *cu,
210 >        OBJECT  obj
211 > )
212   {
213          OCTREE  ot;
214          OBJECT  oset[MAXSET+1];
215          CUBE  cukid;
216 <        register int  i, j;
216 >        int  i, j;
217  
218          objset(oset, cu->cutree);
219          cukid.cusize = cu->cusize * 0.5;
220  
221 <        if (oset[0] < objlim || cukid.cusize < mincusize) {
221 >        if (oset[0] < objlim || cukid.cusize <
222 >                        (oset[0] < MAXSET ? mincusize : mincusize/256.0)) {
223                                                  /* add to set */
224                  if (oset[0] >= MAXSET) {
225                          sprintf(errmsg, "set overflow in addobject (%s)",

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines