Changeset 1194 for GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.cpp
- Timestamp:
- 08/10/06 09:23:38 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.cpp
r1184 r1194 1125 1125 1126 1126 1127 } 1127 #define INTERIOR_START_ID -2 1128 #define LEAF_START_ID -3 1129 #define LEAF_END_ID -4 1130 1131 1132 void KdTree::ExportBinLeaf(ofstream &stream, KdLeaf *leaf) 1133 { 1134 ObjectContainer::const_iterator it, it_end = leaf->mObjects.end(); 1135 1136 int leafStartId = LEAF_START_ID; 1137 stream.write(reinterpret_cast<char *>(&leafStartId), sizeof(int)); 1138 for (it = leaf->mObjects.begin(); it != it_end; ++ it) 1139 { 1140 Intersectable *obj = *it; 1141 1142 int id = obj->mId; 1143 1144 //stream.write(reinterpret_cast<char *>(&origin), sizeof(Vector3)); 1145 stream.write(reinterpret_cast<char *>(&id), sizeof(int)); 1146 } 1147 1148 // end leaf 1149 int leafEndId = LEAF_END_ID; 1150 stream.write(reinterpret_cast<char *>(&leafEndId), sizeof(int)); 1151 } 1152 1153 1154 void KdTree::ImportBinLeaf(ifstream &stream, KdLeaf *leaf) 1155 { 1156 ObjectContainer::const_iterator it, it_end = leaf->mObjects.end(); 1157 1158 int leafId = LEAF_START_ID; 1159 int objId = leafId; 1160 1161 while (objId != LEAF_END_ID) 1162 { 1163 stream.read(reinterpret_cast<char *>(&objId), sizeof(int)); 1164 //if (samplesIn.eof()) break; 1165 } 1166 } 1167 1168 1169 void KdTree::ExportBinInterior(ofstream &stream, KdInterior *interior) 1170 { 1171 int interiorid = INTERIOR_START_ID; 1172 stream.write(reinterpret_cast<char *>(&interiorid), sizeof(int)); 1173 1174 int axis = interior->mAxis; 1175 Vector3 pos = interior->mPosition; 1176 1177 stream.write(reinterpret_cast<char *>(&axis), sizeof(int)); 1178 stream.write(reinterpret_cast<char *>(&pos), sizeof(Vector3)); 1179 } 1180 1181 1182 void KdTree::ImportBinInterior(ifstream &stream, KdInterior *interior) 1183 { 1184 int interiorid = -2; 1185 stream.read(reinterpret_cast<char *>(&interiorid), sizeof(int)); 1186 1187 int axis = interior->mAxis; 1188 Vector3 pos = interior->mPosition; 1189 1190 stream.read(reinterpret_cast<char *>(&axis), sizeof(int)); 1191 stream.read(reinterpret_cast<char *>(&pos), sizeof(Vector3)); 1192 } 1193 1194 1195 bool KdTree::ExportBinTree(const string &filename) 1196 { 1197 ofstream stream(filename.c_str(), ios::binary); 1198 1199 if (!stream.is_open()) 1200 return false; 1201 1202 // export binary version of mesh 1203 stack<KdNode *> tStack; 1204 1205 tStack.push(mRoot); 1206 1207 while(!tStack.empty()) 1208 { 1209 KdNode *node = tStack.top(); 1210 1211 if (node->IsLeaf()) 1212 { 1213 ExportBinLeaf(stream, dynamic_cast<KdLeaf *>(node)); 1214 } 1215 else 1216 { 1217 KdInterior *interior = dynamic_cast<KdInterior *>(node); 1218 1219 ExportBinInterior(stream, interior); 1220 1221 tStack.push(interior->mFront); 1222 tStack.push(interior->mBack); 1223 } 1224 } 1225 1226 return true; 1227 } 1228 1229 1230 bool KdTree::LoadBinTree(const string &filename) 1231 { 1232 ofstream stream(filename.c_str(), ios::binary); 1233 1234 if (!stream.is_open()) 1235 return false; 1236 1237 // export binary version of mesh 1238 stack<KdNode *> tStack; 1239 1240 tStack.push(mRoot); 1241 1242 while(!tStack.empty()) 1243 { 1244 KdNode *node = tStack.top(); 1245 1246 if (node->IsLeaf()) 1247 { 1248 ExportBinLeaf(stream, dynamic_cast<KdLeaf *>(node)); 1249 } 1250 else 1251 { 1252 KdInterior *interior = dynamic_cast<KdInterior *>(node); 1253 1254 ExportBinInterior(stream, interior); 1255 1256 tStack.push(interior->mFront); 1257 tStack.push(interior->mBack); 1258 } 1259 } 1260 1261 return true; 1262 } 1263 1264 1265 }
Note: See TracChangeset
for help on using the changeset viewer.