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

Comparing ray/src/common/objutil.c (file contents):
Revision 2.11 by greg, Fri Feb 12 01:57:49 2021 UTC vs.
Revision 2.13 by greg, Wed Mar 3 18:53:08 2021 UTC

# Line 44 | Line 44 | clearSelection(Scene *sc, int set)
44   void
45   selectGroup(Scene *sc, const char *gname, int invert)
46   {
47 <        int     gid = findName(gname, (const char **)sc->grpname, sc->ngrps);
47 >        int     gid = getGroupID(sc, gname);
48          Face    *f;
49  
50          if (gid < 0)
# Line 62 | Line 62 | selectGroup(Scene *sc, const char *gname, int invert)
62   void
63   selectMaterial(Scene *sc, const char *mname, int invert)
64   {
65 <        int     mid = findName(mname, (const char **)sc->matname, sc->nmats);
65 >        int     mid = getMaterialID(sc, mname);
66          Face    *f;
67          
68          if (mid < 0)
# Line 180 | Line 180 | chngFaceGroup(Scene *sc, Face *f, void *ptr)
180   int
181   changeGroup(Scene *sc, const char *gname, int flreq, int flexc)
182   {
183 <        int     grp = findName(gname, (const char **)sc->grpname, sc->ngrps);
183 >        int     grp = getGroupID(sc, gname);
184          if (grp < 0) {
185                  sc->grpname = chunk_alloc(char *, sc->grpname, sc->ngrps);
186                  sc->grpname[grp=sc->ngrps++] = savqstr((char *)gname);
# Line 203 | Line 203 | chngFaceMaterial(Scene *sc, Face *f, void *ptr)
203   int
204   changeMaterial(Scene *sc, const char *mname, int flreq, int flexc)
205   {
206 <        int     mat = findName(mname, (const char **)sc->matname, sc->nmats);
206 >        int     mat = getMaterialID(sc, mname);
207          if (mat < 0) {
208                  sc->matname = chunk_alloc(char *, sc->matname, sc->nmats);
209                  sc->matname[mat=sc->nmats++] = savqstr((char *)mname);
# Line 259 | Line 259 | replace_vertex(Scene *sc, int prev, int repl, double e
259          repl_tex[0] = -1;
260          for (f = sc->vert[repl].vflist; f != NULL; f = f->v[j].fnext) {
261                                          /* make sure prev isn't in there */
262 <                for (j = 0; j < f->nv; j++)
262 >                for (j = f->nv; j-- > 0; )
263                          if (f->v[j].vid == prev)
264                                  return(0);
265 <                for (j = 0; j < f->nv; j++)
265 >                for (j = f->nv; j-- > 0; )
266                          if (f->v[j].vid == repl)
267                                  break;
268 <                if (j >= f->nv)
268 >                if (j < 0)
269                          goto linkerr;
270                  if (f->v[j].tid < 0)
271                          continue;
# Line 290 | Line 290 | replace_vertex(Scene *sc, int prev, int repl, double e
290                                          /* get replacement normals */
291          repl_norm[0] = -1;
292          for (f = sc->vert[repl].vflist; f != NULL; f = f->v[j].fnext) {
293 <                for (j = 0; j < f->nv; j++)
293 >                for (j = f->nv; j-- > 0; )
294                          if (f->v[j].vid == repl)
295                                  break;
296                  if (f->v[j].nid < 0)
# Line 315 | Line 315 | replace_vertex(Scene *sc, int prev, int repl, double e
315          }
316                                          /* replace occurrences of vertex */
317          for (f = sc->vert[prev].vflist; f != NULL; f = f->v[j].fnext) {
318 <                for (j = 0; j < f->nv; j++)
318 >                for (j = f->nv; j-- > 0; )
319                          if (f->v[j].vid == prev)
320                                  break;
321 <                if (j >= f->nv)
321 >                if (j < 0)
322                          goto linkerr;
323                  /* XXX doesn't allow for multiple references to prev in face */
324                  f->v[j].vid = repl;     /* replace vertex itself */
# Line 432 | Line 432 | findDuplicateFaces(Scene *sc)
432                                                  /* look for duplicates */
433                  for (f1 = sc->vert[vid].vflist; f1 != NULL;
434                                          f1 = f1->v[j].fnext) {
435 <                        for (j = 0; j < f1->nv; j++)
435 >                        for (j = f1->nv; j-- > 0; )
436                                  if (f1->v[j].vid == vid)
437                                          break;
438 <                        if (j >= f1->nv)
438 >                        if (j < 0)
439                                  break;          /* missing link! */
440                          if (f1 == f)
441                                  continue;       /* shouldn't happen */
# Line 488 | Line 488 | deleteFaces(Scene *sc, int flreq, int flexc)
488                                          continue;
489                                  }
490                                  while (vf != NULL) {
491 <                                        for (j = 0; j < vf->nv; j++)
491 >                                        for (j = vf->nv; j-- > 0; )
492                                                  if (vf->v[j].vid == vid)
493                                                          break;
494 <                                        if (j >= vf->nv)
494 >                                        if (j < 0)
495                                                  break;  /* error */
496                                          if (vf->v[j].fnext == ftst) {
497                                                  vf->v[j].fnext =
# Line 588 | Line 588 | add2facelist(Scene *sc, Face *f, int i)
588          for ( ; ; ) {                           /* else find position */
589                  if (fp == f)
590                          return;                 /* already in list */
591 <                for (j = 0; j < fp->nv; j++)
591 >                for (j = fp->nv; j-- > 0; )
592                          if (fp->v[j].vid == vid)
593                                  break;
594 <                if (j >= fp->nv)
594 >                if (j < 0)
595                          error(CONSISTENCY, "Link error in add2facelist()");
596                  if (fp->v[j].fnext == NULL)
597                          break;                  /* reached the end */
# Line 654 | Line 654 | addNormal(Scene *sc, double xn, double yn, double zn)
654   void
655   setGroup(Scene *sc, const char *nm)
656   {
657 <        sc->lastgrp = findName(nm, (const char **)sc->grpname, sc->ngrps);
657 >        sc->lastgrp = getGroupID(sc, nm);
658          if (sc->lastgrp >= 0)
659                  return;
660          sc->grpname = chunk_alloc(char *, sc->grpname, sc->ngrps);
# Line 665 | Line 665 | setGroup(Scene *sc, const char *nm)
665   void
666   setMaterial(Scene *sc, const char *nm)
667   {
668 <        sc->lastmat = findName(nm, (const char **)sc->matname, sc->nmats);
668 >        sc->lastmat = getMaterialID(sc, nm);
669          if (sc->lastmat >= 0)
670                  return;
671          sc->matname = chunk_alloc(char *, sc->matname, sc->nmats);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines