Changeset 1122 for GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.cpp
- Timestamp:
- 07/12/06 01:30:05 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.cpp
r1108 r1122 91 91 mBox.Include((*mi)->GetBox()); 92 92 } 93 94 ProcessLeafObjects(NULL, leaf, NULL);95 93 96 94 cout <<"KdTree Root Box:"<<mBox<<endl; … … 307 305 mStat.objectRefs += objectsBack + objectsFront; 308 306 } 309 310 ProcessLeafObjects(leaf, front, back);311 312 307 313 308 delete leaf; … … 1094 1089 1095 1090 1096 void KdTree::ProcessLeafObjects(KdLeaf *parent, KdLeaf *front, KdLeaf *back) const 1097 { 1098 if (parent) 1099 { 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) 1104 { 1105 Intersectable *object = *oit; 1106 1107 set<KdLeaf *>::iterator kdit = object->mKdLeaves.find(parent); 1108 1109 // remove parent leaf 1110 if (kdit != object->mKdLeaves.end()) 1111 object->mKdLeaves.erase(kdit); 1112 } 1113 } 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 } 1091 }
Note: See TracChangeset
for help on using the changeset viewer.