Changeset 1197


Ignore:
Timestamp:
08/11/06 03:05:12 (18 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/Lib/Vis/Preprocessing/src
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/Exporter.h

    r1139 r1197  
    5757 
    5858  virtual bool 
    59   ExportKdTree(const KdTree &tree) = 0; 
     59  ExportKdTree(const KdTree &tree, const bool exportGeometry = false) = 0; 
    6060 
    6161  virtual bool 
  • GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.cpp

    r1196 r1197  
    1414int KdNode::sMailId = 1; 
    1515int KdNode::sReservedMailboxes = 1; 
     16 
     17inline static bool ilt(Intersectable *obj1, Intersectable *obj2) 
     18{ 
     19        return obj1->mId < obj2->mId; 
     20} 
     21 
    1622 
    1723KdNode::KdNode(KdInterior *parent):mParent(parent), mMailbox(0) 
     
    11271133#define TYPE_INTERIOR -2 
    11281134#define TYPE_LEAF -3 
    1129 //#define LEAF_END_ID -4 
     1135 
    11301136 
    11311137 
     
    11481154                stream.write(reinterpret_cast<char *>(&id), sizeof(int)); 
    11491155    } 
    1150          
    1151         // end leaf 
    1152         //int leafEndId = LEAF_END_ID; stream.write(reinterpret_cast<char *>(&leafEndId), sizeof(int)); 
    1153 } 
    1154  
    1155  
    1156 KdLeaf *KdTree::ImportBinLeaf(ifstream &stream, KdInterior *parent) 
     1156} 
     1157 
     1158 
     1159KdLeaf *KdTree::ImportBinLeaf(ifstream &stream,  
     1160                                                          KdInterior *parent, 
     1161                                                          const ObjectContainer &objects) 
    11571162{ 
    11581163        int leafId = TYPE_LEAF; 
     
    11611166 
    11621167        stream.read(reinterpret_cast<char *>(&size), sizeof(int)); 
    1163  
    11641168        KdLeaf *leaf = new KdLeaf(parent, size); 
    11651169 
    1166         Debug << "objects size: " << size << endl; 
     1170        MeshInstance dummyInst(NULL); 
     1171        //Debug << "objects size: " << size << endl; 
     1172 
    11671173        // read object ids 
    11681174        for (int i = 0; i < size; ++ i) 
    11691175        {        
    11701176                stream.read(reinterpret_cast<char *>(&objId), sizeof(int)); 
    1171                  //if (samplesIn.eof()) break; 
    1172     } 
     1177                dummyInst.SetId(objId); 
     1178 
     1179                ObjectContainer::const_iterator oit = 
     1180                        lower_bound(objects.begin(), objects.end(), (Intersectable *)&dummyInst, ilt); 
     1181                                                                 
     1182                if ((oit != objects.end()) && ((*oit)->GetId() == objId)) 
     1183                { 
     1184                        leaf->mObjects.push_back(*oit); 
     1185                } 
     1186                else 
     1187                { 
     1188                        Debug << "error: object with id " << objId << " does not exist" << endl; 
     1189                } 
     1190        } 
    11731191 
    11741192        return leaf; 
     
    12141232 
    12151233        // export binary version of mesh 
    1216         stack<KdNode *> tStack; 
     1234        queue<KdNode *> tStack; 
    12171235        tStack.push(mRoot); 
    12181236 
    12191237        while(!tStack.empty()) 
    12201238        { 
    1221                 KdNode *node = tStack.top(); 
     1239                KdNode *node = tStack.front(); 
    12221240                tStack.pop(); 
    12231241                 
    12241242                if (node->IsLeaf()) 
    12251243                { 
    1226                         Debug << "l"; 
     1244                        //Debug << "l"; 
    12271245                        ExportBinLeaf(stream, dynamic_cast<KdLeaf *>(node)); 
    12281246                } 
    12291247                else 
    12301248                { 
    1231                         Debug << "i"; 
     1249                        //Debug << "i"; 
    12321250                        KdInterior *interior = dynamic_cast<KdInterior *>(node); 
    12331251 
    12341252                        ExportBinInterior(stream, interior); 
    12351253                         
     1254                        tStack.push(interior->mFront); 
    12361255                        tStack.push(interior->mBack); 
    1237                         tStack.push(interior->mFront); 
    1238                 } 
    1239  
    1240                 if (tStack.empty()) 
    1241                         break; 
    1242  
    1243                 node = tStack.top(); 
    1244                 tStack.pop(); 
    1245          
    1246                 if (node->IsLeaf()) 
    1247                 { 
    1248                         Debug << "l"; 
    1249                         ExportBinLeaf(stream, dynamic_cast<KdLeaf *>(node)); 
    1250                 } 
    1251                 else 
    1252                 { 
    1253                         Debug << "i"; 
    1254                         KdInterior *interior = dynamic_cast<KdInterior *>(node); 
    1255  
    1256                         ExportBinInterior(stream, interior); 
    1257                          
    1258                         tStack.push(interior->mBack); 
    1259                         tStack.push(interior->mFront); 
    12601256                } 
    12611257        } 
     
    12651261 
    12661262 
    1267 KdNode *KdTree::LoadNextNode(ifstream &stream, KdInterior *parent) 
     1263KdNode *KdTree::LoadNextNode(ifstream &stream,  
     1264                                                         KdInterior *parent, 
     1265                                                         const ObjectContainer &objects) 
    12681266{ 
    12691267        int nodeType; 
     
    12721270        if (nodeType == TYPE_LEAF) 
    12731271        { 
    1274                 return ImportBinLeaf(stream, dynamic_cast<KdInterior *>(parent)); 
     1272                return ImportBinLeaf(stream, dynamic_cast<KdInterior *>(parent), objects); 
    12751273        } 
    12761274 
     
    12861284 
    12871285 
    1288 bool KdTree::LoadBinTree(const string &filename, const ObjectContainer &objects) 
     1286bool KdTree::LoadBinTree(const string &filename, ObjectContainer &objects) 
    12891287{ 
    12901288        // export binary version of mesh 
    1291         stack<TraversalData> tStack; 
     1289        queue<TraversalData> tStack; 
    12921290        ifstream stream(filename.c_str(), ios::binary); 
    1293         Debug << "here94" << endl; 
     1291 
    12941292        if (!stream.is_open()) 
    12951293                return false; 
    12961294 
     1295        std::stable_sort(objects.begin(), objects.end(), ilt); 
     1296 
    12971297        mBox.Initialize(); 
    1298  
    12991298        ObjectContainer::const_iterator oit, oit_end = objects.end(); 
    13001299 
     
    13091308 
    13101309        DEL_PTR(mRoot); // we make a new root 
    1311     Debug << "here44" << endl; 
    1312         KdNode *node = LoadNextNode(stream, NULL); 
     1310   
     1311        KdNode *node = LoadNextNode(stream, NULL, objects); 
    13131312        mRoot = node; 
    13141313 
     
    13191318        while(!tStack.empty()) 
    13201319        { 
    1321                 TraversalData tData = tStack.top(); 
     1320                TraversalData tData = tStack.front(); 
    13221321                tStack.pop(); 
    13231322 
     
    13281327                        mStat.nodes += 2; 
    13291328 
    1330                         Debug << "i" ; 
     1329                        //Debug << "i" ; 
    13311330                        KdInterior *interior = dynamic_cast<KdInterior *>(node); 
    13321331                        interior->mBox = tData.mBox; 
    13331332 
    1334             KdNode *front = LoadNextNode(stream, interior); 
    1335                         KdNode *back = LoadNextNode(stream, interior); 
     1333            KdNode *front = LoadNextNode(stream, interior, objects); 
     1334                        KdNode *back = LoadNextNode(stream, interior, objects); 
    13361335         
    13371336                        interior->SetupChildLinks(back, front); 
     
    13391338                        ++ mStat.splits[interior->mAxis]; 
    13401339 
    1341                         Debug << "plane: " << interior->mAxis << " " << interior->mPosition << endl; 
    1342                         Debug << "box: " << tData.mBox << endl; 
     1340                        //Debug << "plane: " << interior->mAxis << " " << interior->mPosition << endl; 
     1341                        //Debug << "box: " << tData.mBox << endl; 
    13431342 
    13441343                        // compute new bounding box 
     
    13501349                                                         backBox); 
    13511350 
     1351                        tStack.push(TraversalData(front, frontBox, tData.mDepth + 1));                   
    13521352                        tStack.push(TraversalData(back, backBox, tData.mDepth + 1)); 
    1353                         tStack.push(TraversalData(front, frontBox, tData.mDepth + 1));                   
    13541353                } 
    13551354                else 
    13561355                { 
    13571356                        EvaluateLeafStats(tData); 
    1358                         //dynamic_cast<KdLeaf *>(node)->mBox = tData.mBox; 
    1359                         Debug << "l" << endl; 
    1360                 } 
    1361         } 
    1362  
    1363         Debug << "\nhere85" << endl; 
     1357                        //Debug << "l" << endl; 
     1358                } 
     1359        } 
     1360 
    13641361        Debug << mStat << endl; 
    13651362 
  • GTP/trunk/Lib/Vis/Preprocessing/src/KdTree.h

    r1196 r1197  
    392392 
    393393  bool ExportBinTree(const string &filename); 
    394   bool LoadBinTree(const string &filename, const ObjectContainer &object); 
     394  bool LoadBinTree(const string &filename, ObjectContainer &object); 
    395395 
    396396protected: 
     
    559559        void ExportBinLeaf(ofstream &stream, KdLeaf *leaf); 
    560560        void ExportBinInterior(ofstream &stream, KdInterior *interior); 
    561         KdLeaf *ImportBinLeaf(ifstream &stream, KdInterior *parent); 
     561        KdLeaf *ImportBinLeaf(ifstream &stream, KdInterior *parent, const ObjectContainer &objects); 
    562562        KdInterior *ImportBinInterior(ifstream &stream, KdInterior *parent); 
    563         KdNode *LoadNextNode(ifstream &stream, KdInterior *parent); 
     563        KdNode *LoadNextNode(ifstream &stream, KdInterior *parent, const ObjectContainer &objects); 
    564564 
    565565  int mTermMaxNodes; 
  • GTP/trunk/Lib/Vis/Preprocessing/src/Preprocessor.cpp

    r1194 r1197  
    478478 
    479479 
     480bool Preprocessor::LoadKdTree() 
     481{ 
     482        return true; 
     483} 
     484 
     485bool Preprocessor::ExportKdTree() 
     486{ 
     487        return true; 
     488} 
     489 
     490 
    480491bool Preprocessor::LoadSamples(VssRayContainer &samples,  
    481492                                                           ObjectContainer &objects) const 
  • GTP/trunk/Lib/Vis/Preprocessing/src/Preprocessor.h

    r1145 r1197  
    113113  bool ExportSamples(const VssRayContainer &samples) const; 
    114114 
     115  bool LoadKdTree(); 
     116  bool ExportKdTree(); 
     117 
    115118  /** Get Sample rays of particular type, returns false if this 
    116119          type of rays is not supported by the preprocessor 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ResourceManager.h

    r1141 r1197  
    9191        } 
    9292         
     93        bool ExportEntries(const string &filename) 
     94        { 
     95                ofstream stream(filename.c_str(), ios::binary); 
     96         
     97                if (!stream.is_open()) 
     98                        return false; 
     99 
     100                std::map<unsigned int, T *>::const_iterator mit, mit_end = mEntries.end(); 
     101 
     102                for (mit = mEntries.begin(); mit != mit_end; ++ mit) 
     103                { 
     104                        int id = (*mit).first; 
     105                        stream.write(reinterpret_cast<char *>(&id), sizeof(int)); 
     106                } 
     107 
     108                return true; 
     109        } 
    93110 
    94111        /** Returns size of resource container. 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsParser.cpp

    r1194 r1197  
    6262 
    6363 
     64inline static bool ilt(Intersectable *obj1, Intersectable *obj2) 
     65{ 
     66        return obj1->mId < obj2->mId; 
     67} 
    6468 
    6569 
     
    8387  , mBoundingBoxConverter(bconverter) 
    8488{ 
     89        std::stable_sort(mObjects->begin(), mObjects->end(), ilt); 
    8590} 
    8691 
     
    283288 
    284289 
    285 inline bool ilt(Intersectable *obj1, Intersectable *obj2) 
    286 { 
    287         return obj1->mId < obj2->mId; 
    288 } 
    289  
    290  
    291290void ViewCellsParseHandlers::StartViewCell(ViewCell *viewCell,  
    292291                                                                                   AttributeList&  attributes) 
     
    331330 
    332331                                ObjectContainer::iterator oit = 
    333                                   lower_bound(mObjects->begin(), mObjects->end(), (Intersectable *)&dummyInst, ilt); 
    334                                  
     332                                        lower_bound(mObjects->begin(), mObjects->end(), (Intersectable *)&dummyInst, ilt);       
    335333                                                         
    336334                                if ((oit != mObjects->end()) && ((*oit)->GetId() == objId)) 
     
    501499                         
    502500                BspViewCell *viewCell = dynamic_cast<BspViewCell *>(*vit); 
    503  
    504501         
    505502                if (viewCell->GetId() == viewCellId) 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VrmlExporter.cpp

    r1168 r1197  
    605605 
    606606 
    607 bool VrmlExporter::ExportKdTree(const KdTree &tree) 
     607bool VrmlExporter::ExportKdTree(const KdTree &tree, const bool exportGeometry) 
    608608{ 
    609609         if (mExportRayDensity)  
     
    13041304 
    13051305 
    1306  
    13071306void VrmlExporter::ExportBeam(const Beam &beam, const AxisAlignedBox3 &box) 
    13081307{ 
  • GTP/trunk/Lib/Vis/Preprocessing/src/VrmlExporter.h

    r1121 r1197  
    4545 
    4646  bool 
    47   ExportKdTree(const KdTree &tree); 
     47  ExportKdTree(const KdTree &tree, const bool exportGeometry = false); 
    4848 
    4949  //bool ExportOspTree(const OspTree &tree); 
  • GTP/trunk/Lib/Vis/Preprocessing/src/X3dExporter.cpp

    r1178 r1197  
    594594 
    595595 
    596 bool X3dExporter::ExportKdTree(const KdTree &tree) 
     596bool X3dExporter::ExportKdTree(const KdTree &tree,  
     597                                                           const bool exportGeometry) 
    597598{ 
    598599         if (mExportRayDensity) { 
     
    630631      tStack.push(interior->mBack); 
    631632    } 
     633        else if (exportGeometry) 
     634        { 
     635                SetFilled(); 
     636                SetForcedMaterial(RandomMaterial()); 
     637                ExportGeometry(dynamic_cast<KdLeaf *>(node)->mObjects);  
     638                SetWireframe(); 
     639        } 
    632640  } 
    633641   
     
    637645  return true; 
    638646} 
    639  
    640  
    641647 
    642648 
  • GTP/trunk/Lib/Vis/Preprocessing/src/X3dExporter.h

    r1121 r1197  
    4545 
    4646  bool 
    47   ExportKdTree(const KdTree &tree); 
     47  ExportKdTree(const KdTree &tree, const bool exportGeometry = false); 
    4848 
    4949  bool 
  • GTP/trunk/Lib/Vis/Preprocessing/src/main.cpp

    r1196 r1197  
    162162        preprocessor->mKdTree->ExportBinTree("kd.bin"); 
    163163         
     164        MeshManager::GetSingleton()->ExportEntries("meshes.bin"); 
     165 
    164166        KdTree *kdTree2 = new KdTree; 
    165167        kdTree2->LoadBinTree("kd.bin", preprocessor->mObjects); 
    166168        Exporter *exporter = Exporter::GetExporter("testkd.x3d"); 
    167169         
     170        MeshManager::GetSingleton()->ExportEntries("meshes.bin"); 
     171 
    168172        if (exporter)  
    169173        { 
    170174                exporter->SetWireframe(); 
    171                 exporter->ExportKdTree(*kdTree2); 
     175                exporter->ExportKdTree(*kdTree2, true); 
    172176 
    173177                delete exporter; 
Note: See TracChangeset for help on using the changeset viewer.