ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/objutil.h
(Generate patch)

Comparing ray/src/common/objutil.h (file contents):
Revision 2.4 by greg, Sat Apr 18 17:10:33 2020 UTC vs.
Revision 2.14 by greg, Wed Apr 7 03:02:00 2021 UTC

# Line 10 | Line 10
10   #ifndef _OBJUTIL_H_
11   #define _OBJUTIL_H_
12  
13 + #ifdef __cplusplus
14 + extern "C" {
15 + #endif
16 +
17   #ifndef DUP_CHECK_REVERSE
18   #define DUP_CHECK_REVERSE       1       /* eliminate flipped duplicates */
19   #endif
# Line 17 | Line 21
21   #define POPEN_SUPPORT           1       /* support "!command" i/o */
22   #endif
23                                          /* face flags */
24 < #define FACE_SELECTED           01
25 < #define FACE_DEGENERATE         02
26 < #define FACE_DUPLICATE          04
24 > #define FACE_DEGENERATE         01
25 > #define FACE_DUPLICATE          02
26 > #define FACE_SELECTED           04
27 > #define FACE_CUSTOM(n)          (FACE_SELECTED<<(n))
28 > #define FACE_RESERVED           (1<<15)
29  
30   struct Face;                            /* forward declaration */
31  
32 + typedef int             VNDX[3];        /* vertex indices (point,map,normal) */
33 +
34 + /* Structure to hold vertex indices and link back to face list */
35   typedef struct {
36          int             vid;            /* vertex id */
37          int             tid;            /* texture id */
# Line 75 | Line 84 | typedef struct {
84          int             nfaces;         /* count of faces */
85   } Scene;
86  
78 #ifdef __cplusplus
79 extern "C" {
80 #endif
81
87   /* Allocate a new scene holder */
88   Scene *         newScene(void);
89  
90   /* Add a .OBJ file to a scene */
91   Scene *         loadOBJ(Scene *sc, const char *fspec);
92  
93 < /* Duplicate a scene */
94 < Scene *         dupScene(const Scene *sc);
93 > /* Duplicate a scene, optionally selecting faces */
94 > Scene *         dupScene(const Scene *sc, int flreq, int flexc);
95  
96 + /* Add one scene to another, not checking for redundancies */
97 + int             addScene(Scene *scdst, const Scene *scsrc);
98 +
99   /* Transform entire scene */
100   int             xfScene(Scene *sc, int xac, char *xav[]);
101   int             xfmScene(Scene *sc, const char *xfm);
# Line 95 | Line 103 | int            xfmScene(Scene *sc, const char *xfm);
103   /* Add a descriptive comment */
104   void            addComment(Scene *sc, const char *comment);
105  
106 + /* Find index for comment containing the given string (starting from n) */
107 + int             findComment(Scene *sc, const char *match, int n);
108 +
109   /* Clear comments */
110   void            clearComments(Scene *sc);
111  
# Line 152 | Line 163 | int            changeGroup(Scene *sc, const char *gname,
163   int             changeMaterial(Scene *sc, const char *mname,
164                                          int flreq, int flexc);
165  
166 + /* Add a vertex to our scene, returning index */
167 + int             addVertex(Scene *sc, double x, double y, double z);
168 +
169 + /* Add a texture coordinate to our scene, returning index */
170 + int             addTexture(Scene *sc, double u, double v);
171 +
172 + /* Add a surface normal to our scene, returning index */
173 + int             addNormal(Scene *sc, double xn, double yn, double zn);
174 +
175 + /* Set current group (sc->lastgrp) to given ID */
176 + void            setGroup(Scene *sc, const char *nm);
177 +
178 + /* Set current material (sc->lastmat) to given ID */
179 + void            setMaterial(Scene *sc, const char *nm);
180 +
181 + /* Add a new face to our scene, using current group and material */
182 + Face *          addFace(Scene *sc, VNDX vid[], int nv);
183 +
184 + /* Convert all faces with > 3 vertices to triangles */
185 + int             triangulateScene(Scene *sc);
186 +
187 + /* Delete unreferenced vertices, normals, texture coords */
188 + void            deleteUnreferenced(Scene *sc);
189 +
190   /* Free a scene */
191   void            freeScene(Scene *sc);
192  
# Line 164 | Line 199 | extern int      verbose;
199   extern char     *emalloc(unsigned int n);
200   extern char     *ecalloc(unsigned int ne, unsigned int n);
201   extern char     *erealloc(char *cp, unsigned int n);
202 < extern void     efree(char *cp);
202 > extern void     efree(char *cp);
203 >
204 > #define getGroupID(sc,nm)       findName(nm, (const char **)(sc)->grpname, (sc)->ngrps)
205 > #define getMaterialID(sc,nm)    findName(nm, (const char **)(sc)->matname, (sc)->nmats)
206  
207   #define CHUNKSIZ        128     /* object allocation chunk size */
208  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines