Changeset 1089 for GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.cpp
- Timestamp:
- 07/06/06 16:22:15 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.cpp
r1076 r1089 92 92 } 93 93 94 ProcessLeafObjects( leaf, NULL);94 ProcessLeafObjects(NULL, leaf, NULL); 95 95 96 96 cout <<"KdTree Root Box:"<<mBox<<endl; … … 308 308 } 309 309 310 ProcessLeafObjects( back, leaf);311 ProcessLeafObjects(front, leaf);310 ProcessLeafObjects(leaf, front, back); 311 312 312 313 313 delete leaf; 314 314 return node; 315 315 } 316 317 316 318 317 … … 1095 1094 1096 1095 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) 1096 void KdTree::ProcessLeafObjects(KdLeaf *parent, KdLeaf *front, KdLeaf *back) const 1097 { 1098 if (parent) 1102 1099 { 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) 1106 1104 { 1105 Intersectable *object = *oit; 1106 1107 1107 set<KdLeaf *>::iterator kdit = object->mKdLeaves.find(parent); 1108 1108 … … 1111 1111 object->mKdLeaves.erase(kdit); 1112 1112 } 1113 1114 object->mKdLeaves.insert(leaf);1115 1116 if (object->mKdLeaves.size() > 1)1117 leaf->mMultipleObjects.push_back(object);1118 1113 } 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.