Ignore:
Timestamp:
07/06/06 16:22:15 (18 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.cpp

    r1076 r1089  
    9292  } 
    9393 
    94         ProcessLeafObjects(leaf, NULL); 
     94        ProcessLeafObjects(NULL, leaf, NULL); 
    9595 
    9696  cout <<"KdTree Root Box:"<<mBox<<endl; 
     
    308308  } 
    309309   
    310    ProcessLeafObjects(back, leaf); 
    311     ProcessLeafObjects(front, leaf); 
     310   ProcessLeafObjects(leaf, front, back); 
     311   
    312312 
    313313  delete leaf; 
    314314  return node; 
    315315} 
    316  
    317316 
    318317 
     
    10951094 
    10961095 
    1097 void KdTree::ProcessLeafObjects(KdLeaf *leaf, KdLeaf *parent) const 
    1098 { 
    1099         ObjectContainer::const_iterator oit, oit_end = leaf->mObjects.end(); 
    1100  
    1101         for (oit = leaf->mObjects.begin(); oit != oit_end; ++ oit) 
     1096void KdTree::ProcessLeafObjects(KdLeaf *parent, KdLeaf *front, KdLeaf *back) const 
     1097{ 
     1098        if (parent) 
    11021099        { 
    1103                 Intersectable *object = *oit; 
    1104  
    1105                 if (parent) 
     1100                // remove the parents from the set 
     1101                ObjectContainer::const_iterator oit, oit_end = parent->mObjects.end(); 
     1102 
     1103                for (oit = parent->mObjects.begin(); oit != oit_end; ++ oit) 
    11061104                { 
     1105                        Intersectable *object = *oit; 
     1106 
    11071107                        set<KdLeaf *>::iterator kdit = object->mKdLeaves.find(parent); 
    11081108 
     
    11111111                                object->mKdLeaves.erase(kdit); 
    11121112                } 
    1113  
    1114                 object->mKdLeaves.insert(leaf); 
    1115  
    1116                 if (object->mKdLeaves.size() > 1) 
    1117                         leaf->mMultipleObjects.push_back(object); 
    11181113        } 
    1119 } 
    1120  
    1121  
    1122 } 
     1114 
     1115        //Intersectable::NewMail(); 
     1116 
     1117        if (front) 
     1118        { 
     1119                // Add front to leaf kd cells 
     1120                ObjectContainer::const_iterator oit, oit_end = front->mObjects.end(); 
     1121 
     1122                for (oit = front->mObjects.begin(); oit != oit_end; ++ oit) 
     1123                { 
     1124                        Intersectable *object = *oit; 
     1125                        object->mKdLeaves.insert(front); 
     1126                } 
     1127        } 
     1128 
     1129        if (back) 
     1130        { 
     1131                // Add back to leaf kd cells 
     1132                ObjectContainer::const_iterator oit, oit_end = back->mObjects.end(); 
     1133 
     1134                for (oit = back->mObjects.begin(); oit != oit_end; ++ oit) 
     1135                { 
     1136                        Intersectable *object = *oit; 
     1137                        object->mKdLeaves.insert(back);  
     1138                } 
     1139        } 
     1140 
     1141        // note: can find out about multiple objects only now after adding and deleting 
     1142        // finished  
     1143        if (front) 
     1144        { 
     1145                // find objects from multiple kd-leaves 
     1146                ObjectContainer::const_iterator oit, oit_end = front->mObjects.end(); 
     1147 
     1148                for (oit = front->mObjects.begin(); oit != oit_end; ++ oit) 
     1149                { 
     1150                        Intersectable *object = *oit; 
     1151 
     1152                        if (object->mKdLeaves.size() > 1) 
     1153                                front->mMultipleObjects.push_back(object); 
     1154                } 
     1155        } 
     1156 
     1157        if (back)  
     1158        { 
     1159                // find objects from multiple kd-leaves 
     1160                ObjectContainer::const_iterator oit, oit_end = back->mObjects.end(); 
     1161 
     1162                for (oit = back->mObjects.begin(); oit != oit_end; ++ oit) 
     1163                { 
     1164                        Intersectable *object = *oit; 
     1165 
     1166                        if (object->mKdLeaves.size() > 1) 
     1167                                back->mMultipleObjects.push_back(object); 
     1168                } 
     1169        } 
     1170         
     1171} 
     1172 
     1173 
     1174} 
Note: See TracChangeset for help on using the changeset viewer.