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]; |
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 |
|
{ |
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) |
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) |
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 |
|
|
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]; |
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 |
|
{ |
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) |
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) |
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]; |
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]; |
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; |
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 |
|
|
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]; |
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; |
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 |
|
} |