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

Comparing ray/src/hd/sm_qtree.c (file contents):
Revision 3.11 by gwlarson, Sun Jan 10 10:27:45 1999 UTC vs.
Revision 3.12 by gwlarson, Fri Mar 5 16:32:49 1999 UTC

# Line 744 | Line 744 | FUNC f;
744   */
745  
746   qtVisit_tri(root,qt,q0,q1,q2,t0,t1,t2,dt10,dt21,dt02,scale,
747 <            s0,s1,s2,sq0,sq1,sq2,f)
747 >            s0,s1,s2,sq0,sq1,sq2,f,n)
748   int root;
749   QUADTREE qt;
750   BCOORD q0[3],q1[3],q2[3];
# Line 753 | Line 753 | BCOORD dt10[3],dt21[3],dt02[3];
753   BCOORD scale;
754   unsigned int s0,s1,s2,sq0,sq1,sq2;
755   FUNC f;
756 + int n;
757   {
758    BCOORD a,b,c;
759    BCOORD va[3],vb[3],vc[3];
760    unsigned int sa,sb,sc;
761  
762 +  if(n == 0)
763 +    return;
764    /* If a tree: trivial reject and recurse on potential children */
765    if(QT_IS_TREE(qt))
766    {
# Line 780 | Line 783 | FUNC f;
783        vb[2] = c;
784        vb[0] = vc[0] = a;
785        qtVisit_tri(root,QT_NTH_CHILD(qt,0),q0,vc,
786 <          vb,t0,t1,t2,dt10,dt21,dt02, scale>>1,sa,s1,s2,sq0,sb,sc,f);
786 >          vb,t0,t1,t2,dt10,dt21,dt02, scale>>1,sa,s1,s2,sq0,sb,sc,f,n-1);
787        return;
788      }
789     if(sb==7)
# Line 791 | Line 794 | FUNC f;
794       va[2] = c;
795       vc[0] = a;
796       qtVisit_tri(root,QT_NTH_CHILD(qt,1),vc,q1,va,
797 <             t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,sb,s2,sa,sq1,sc,f);
797 >             t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,sb,s2,sa,sq1,sc,f,n-1);
798       return;
799     }
800     if(sc==7)
# Line 802 | Line 805 | FUNC f;
805       va[2] = vb[2] = c;
806       vb[0] = a;
807       qtVisit_tri(root,QT_NTH_CHILD(qt,2),vb,va,
808 <       q2,t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,s1,sc,sa,sb,sq2,f);
808 >       q2,t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,s1,sc,sa,sb,sq2,f,n-1);
809       return;
810     }
811  
# Line 816 | Line 819 | FUNC f;
819     if(sa==0 && sb==0 && sc==0)
820     {
821       qtVisit_tri_rev(root,QT_NTH_CHILD(qt,3),va,vb,
822 <       vc,t0,t1,t2,dt10,dt21,dt02, scale>>1,sa,sb,sc,s0,s1,s2,f);
822 >       vc,t0,t1,t2,dt10,dt21,dt02, scale>>1,sa,sb,sc,s0,s1,s2,f,n-1);
823        return;
824     }
825  
826     if(sa)
827       qtVisit_tri(root,QT_NTH_CHILD(qt,0),q0,vc,vb,t0,
828 <          t1,t2,dt10,dt21,dt02,scale>>1,sa,s1,s2,sq0,sb,sc,f);
828 >          t1,t2,dt10,dt21,dt02,scale>>1,sa,s1,s2,sq0,sb,sc,f,n-1);
829     if(sb)
830       qtVisit_tri(root,QT_NTH_CHILD(qt,1),vc,q1,va,t0,
831 <              t1,t2,dt10,dt21,dt02,scale>>1,s0,sb,s2,sa,sq1,sc,f);
831 >              t1,t2,dt10,dt21,dt02,scale>>1,s0,sb,s2,sa,sq1,sc,f,n-1);
832     if(sc)
833       qtVisit_tri(root,QT_NTH_CHILD(qt,2),vb,va,q2,t0,
834 <              t1,t2,dt10,dt21,dt02,scale>>1,s0,s1,sc,sa,sb,sq2,f);
834 >              t1,t2,dt10,dt21,dt02,scale>>1,s0,s1,sc,sa,sb,sq2,f,n-1);
835     qtVisit_tri_rev(root,QT_NTH_CHILD(qt,3),va,vb,vc,t0,
836 <             t1,t2,dt10,dt21,dt02,scale>>1,sa,sb,sc,s0,s1,s2,f);
836 >             t1,t2,dt10,dt21,dt02,scale>>1,sa,sb,sc,s0,s1,s2,f,n-1);
837    }
838    /* Leaf node: Do definitive test */
839    else
840      qtLeaf_visit_tri(root,qt,q0,q1,q2,t0,t1,t2,dt10,dt21,dt02,
841 <                         scale,s0,s1,s2,sq0,sq1,sq2,f);
841 >                         scale,s0,s1,s2,sq0,sq1,sq2,f,n);
842  
843   }
844  
845  
846   qtVisit_tri_rev(root,qt,q0,q1,q2,t0,t1,t2,dt10,dt21,dt02,scale,
847 <            s0,s1,s2,sq0,sq1,sq2,f)
847 >            s0,s1,s2,sq0,sq1,sq2,f,n)
848   int root;
849   QUADTREE qt;
850   BCOORD q0[3],q1[3],q2[3];
# Line 850 | Line 853 | BCOORD dt10[3],dt21[3],dt02[3];
853   BCOORD scale;
854   unsigned int s0,s1,s2,sq0,sq1,sq2;
855   FUNC f;
856 + int n;
857   {
858    BCOORD a,b,c;
859    BCOORD va[3],vb[3],vc[3];
860    unsigned int sa,sb,sc;
861  
862 +  if(n==0)
863 +    return;
864    /* If a tree: trivial reject and recurse on potential children */
865    if(QT_IS_TREE(qt))
866    {
# Line 876 | Line 882 | FUNC f;
882        vb[2] = c;
883        vb[0] = vc[0] = a;
884        qtVisit_tri_rev(root,QT_NTH_CHILD(qt,0),q0,vc,
885 <          vb,t0,t1,t2,dt10,dt21,dt02, scale>>1,sa,s1,s2,sq0,sb,sc,f);
885 >          vb,t0,t1,t2,dt10,dt21,dt02, scale>>1,sa,s1,s2,sq0,sb,sc,f,n-1);
886        return;
887      }
888      if(sb==0)
# Line 887 | Line 893 | FUNC f;
893        va[2] = c;
894        vc[0] = a;
895        qtVisit_tri_rev(root,QT_NTH_CHILD(qt,1),vc,q1,va,
896 <         t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,sb,s2,sa,sq1,sc,f);
896 >         t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,sb,s2,sa,sq1,sc,f,n-1);
897        return;
898      }
899      if(sc==0)
# Line 898 | Line 904 | FUNC f;
904        va[2] = vb[2] = c;
905        vb[0] = a;
906        qtVisit_tri_rev(root,QT_NTH_CHILD(qt,2),vb,va,
907 <         q2,t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,s1,sc,sa,sb,sq2,f);
907 >         q2,t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,s1,sc,sa,sb,sq2,f,n-1);
908        return;
909      }
910      va[0] = q1[0];
# Line 911 | Line 917 | FUNC f;
917      if(sa==7 && sb==7 && sc==7)
918      {
919       qtVisit_tri(root,QT_NTH_CHILD(qt,3),va,vb,
920 <           vc,t0,t1,t2,dt10,dt21,dt02, scale>>1,sa,sb,sc,s0,s1,s2,f);
920 >           vc,t0,t1,t2,dt10,dt21,dt02, scale>>1,sa,sb,sc,s0,s1,s2,f,n-1);
921        return;
922      }
923      if(sa!=7)
924        qtVisit_tri_rev(root,QT_NTH_CHILD(qt,0),q0,vc,vb,
925 <           t0,t1,t2,dt10,dt21,dt02,scale>>1,sa,s1,s2,sq0,sb,sc,f);
925 >           t0,t1,t2,dt10,dt21,dt02,scale>>1,sa,s1,s2,sq0,sb,sc,f,n-1);
926      if(sb!=7)
927        qtVisit_tri_rev(root,QT_NTH_CHILD(qt,1),vc,q1,va,
928 <           t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,sb,s2,sa,sq1,sc,f);
928 >           t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,sb,s2,sa,sq1,sc,f,n-1);
929      if(sc!=7)
930        qtVisit_tri_rev(root,QT_NTH_CHILD(qt,2),vb,va,q2,
931 <           t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,s1,sc,sa,sb,sq2,f);
931 >           t0,t1,t2,dt10,dt21,dt02,scale>>1,s0,s1,sc,sa,sb,sq2,f,n-1);
932  
933      qtVisit_tri(root,QT_NTH_CHILD(qt,3),va,vb,vc,t0,t1,
934 <              t2,dt10,dt21,dt02,scale>>1,sa,sb,sc,s0,s1,s2,f);
934 >              t2,dt10,dt21,dt02,scale>>1,sa,sb,sc,s0,s1,s2,f,n-1);
935      return;
936    }
937    /* Leaf node: Do definitive test */
938    else
939      qtLeaf_visit_tri_rev(root,qt,q0,q1,q2,t0,t1,t2,dt10,dt21,dt02,
940 <                         scale,s0,s1,s2,sq0,sq1,sq2,f);
940 >                         scale,s0,s1,s2,sq0,sq1,sq2,f,n);
941   }
942  
943  
944  
945   qtLeaf_visit_tri(root,qt,q0,q1,q2,t0,t1,t2,dt10,dt21,dt02,
946 <                 scale, s0,s1,s2,sq0,sq1,sq2,f)
946 >                 scale, s0,s1,s2,sq0,sq1,sq2,f,n)
947   int root;
948   QUADTREE qt;
949   BCOORD q0[3],q1[3],q2[3];
# Line 945 | Line 951 | BCOORD t0[3],t1[3],t2[3];
951   BCOORD dt10[3],dt21[3],dt02[3];
952   unsigned int scale,s0,s1,s2,sq0,sq1,sq2;
953   FUNC f;
954 + int n;
955   {
956    double db;
957    unsigned int e0,e1,e2;
958    char al,ah,bl,bh,cl,ch,testl,testh;
959    char test_t0t1,test_t1t2,test_t2t0;
960    BCOORD a,b,c;
961 <
961 >  
962    /* First check if can trivial accept: if vertex in cell */
963    if(s0 & s1 & s2)
964      goto Lfunc_call;
# Line 1055 | Line 1062 | FUNC f;
1062    return;
1063  
1064   Lfunc_call:
1065 <  f.func(f.argptr,root,qt);
1065 >
1066 >  f.func(f.argptr,root,qt,n);
1067    if(!QT_IS_EMPTY(qt))
1068      QT_LEAF_SET_FLAG(qt);
1069 +
1070   }
1071  
1072  
# Line 1065 | Line 1074 | Lfunc_call:
1074   /* Leaf node: Do definitive test */
1075   QUADTREE
1076   qtLeaf_visit_tri_rev(root,qt,q0,q1,q2,t0,t1,t2,dt10,dt21,dt02,
1077 <                 scale, s0,s1,s2,sq0,sq1,sq2,f)
1077 >                 scale, s0,s1,s2,sq0,sq1,sq2,f,n)
1078   int root;
1079   QUADTREE qt;
1080   BCOORD q0[3],q1[3],q2[3];
# Line 1073 | Line 1082 | BCOORD t0[3],t1[3],t2[3];
1082   BCOORD dt10[3],dt21[3],dt02[3];
1083   unsigned int scale,s0,s1,s2,sq0,sq1,sq2;
1084   FUNC f;
1085 + int n;
1086   {
1087    double db;
1088    unsigned int e0,e1,e2;
# Line 1191 | Line 1201 | FUNC f;
1201    return;
1202  
1203   Lfunc_call:
1204 <  f.func(f.argptr,root,qt);
1204 >  f.func(f.argptr,root,qt,n);
1205    if(!QT_IS_EMPTY(qt))
1206      QT_LEAF_SET_FLAG(qt);
1207   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines