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.16 by greg, Wed Apr 7 16:40:28 2021 UTC vs.
Revision 2.18 by greg, Fri Apr 9 15:26:41 2021 UTC

# Line 700 | Line 700 | addFace(Scene *sc, VNDX vid[], int nv)
700          return(f);
701   }
702  
703 + /* Callback for growBoundingBox() */
704 + static int
705 + addBBox(Scene *sc, Face *f, void *p)
706 + {
707 +        double  (*bbox)[3] = (double (*)[3])p;
708 +        int     i, j;
709 +
710 +        for (i = f->nv; i-- > 0; ) {
711 +                double  *p3 = sc->vert[f->v[i].vid].p;
712 +                for (j = 3; j--; ) {
713 +                        if (p3[j] < bbox[0][j])
714 +                                bbox[0][j] = p3[j];
715 +                        if (p3[j] > bbox[1][j])
716 +                                bbox[1][j] = p3[j];
717 +                }
718 +        }
719 +        return(1);
720 + }
721 +
722 + /* Expand bounding box min & max (initialize bbox to all zeroes) */
723 + int
724 + growBoundingBox(Scene *sc, double bbox[2][3], int flreq, int flexc)
725 + {
726 +        if (sc == NULL || sc->nfaces <= 0 || bbox == NULL)
727 +                return(0);
728 +
729 +        if (VABSEQ(bbox[0], bbox[1])) {         /* first run */
730 +                bbox[0][0] = bbox[0][1] = bbox[0][2] = FHUGE;
731 +                bbox[1][0] = bbox[1][1] = bbox[1][2] = -FHUGE;
732 +        }
733 +        return(foreachFace(sc, addBBox, flreq, flexc, bbox));
734 + }
735 +
736   /* Allocate an empty scene */
737   Scene *
738   newScene(void)
# Line 799 | Line 832 | addScene(Scene *scdst, const Scene *scsrc)
832          if (scsrc->nfaces <= 0)
833                  return(0);
834                                          /* map vertices */
835 <        vert_map = (int *)emalloc(sizeof(int *)*scsrc->nverts);
835 >        vert_map = (int *)emalloc(sizeof(int)*scsrc->nverts);
836          for (i = 0; i < scsrc->nverts; i++) {
837                  const Vertex    *v = scsrc->vert + i;
838                  if (v->vflist == NULL) {
# Line 830 | Line 863 | addScene(Scene *scdst, const Scene *scsrc)
863                  if (f->mat != cur_mat)
864                          setMaterial(scdst, scsrc->matname[cur_mat = f->mat]);
865                  if (f->nv > vllen) {
866 <                        if (vlist == my_vlist)
867 <                                vlist = (VNDX *)emalloc(
868 <                                                sizeof(VNDX)*(vllen = f->nv));
869 <                        else
837 <                                vlist = (VNDX *)erealloc((char *)vlist,
838 <                                                sizeof(VNDX)*(vllen = f->nv));
866 >                        vlist = (VNDX *)( vlist == my_vlist ?
867 >                                emalloc(sizeof(VNDX)*f->nv) :
868 >                                erealloc((char *)vlist, sizeof(VNDX)*f->nv) );
869 >                        vllen = f->nv;
870                  }
871                  memset(vlist, 0xff, sizeof(VNDX)*f->nv);
872                  for (i = f->nv; i-- > 0; ) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines