Ignore:
Timestamp:
08/10/06 09:23:38 (18 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r1184 r1194  
    11251125 
    11261126 
    1127 } 
     1127#define INTERIOR_START_ID -2 
     1128#define LEAF_START_ID -3 
     1129#define LEAF_END_ID -4 
     1130 
     1131 
     1132void 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 
     1154void 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 
     1169void 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 
     1182void 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 
     1195bool 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 
     1230bool 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.