Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

Walker.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_ImageSet_Walker_h
00002 #define Impala_Core_ImageSet_Walker_h
00003 
00004 #include <vector>
00005 #include "Core/ImageSet/ImageSet.h"
00006 #include "Core/ImageSet/Listener.h"
00007 #include "Core/Geometry/FileReadIxRectangle.h"
00008 
00009 namespace Impala
00010 {
00011 namespace Core
00012 {
00013 namespace ImageSet
00014 {
00015 
00016 
00017 class Walker
00018 {
00019 public:
00020 
00021     Walker(ImageSet* imageSet)
00022     {
00023         mImageSet = imageSet;
00024     }
00025 
00026     void
00027     AddListener(Listener* listener)
00028     {
00029         mListeners.push_back(listener);
00030     }
00031 
00032     int
00033     NrListeners() const
00034     {
00035         return mListeners.size();
00036     }
00037 
00038     void
00039     LoadBookmarks(String fileName)
00040     {
00041         mIrList.clear();
00042         Geometry::FileReadIxRectangle(std::back_inserter(mIrList), fileName);
00043     }
00044 
00045     // Walking part
00046 
00047     void
00048     DoWalk(int startDir, int numberDirs)
00049     {
00050         if (startDir >= mImageSet->NrDirs())
00051         {
00052             ILOG_ERROR("DoWalk: startDir out of range");
00053             return;
00054         }
00055         CmdOptions& options = CmdOptions::GetInstance();
00056         bool useIm = ! options.GetBool("virtualWalk");
00057         if (numberDirs == -1)
00058             numberDirs = mImageSet->NrDirs() - startDir;
00059         if (startDir + numberDirs >= mImageSet->NrDirs())
00060             numberDirs = mImageSet->NrDirs() - startDir;
00061 
00062         for (size_t l=0 ; l<mListeners.size() ; l++)
00063         {
00064             mListeners[l]->HandleNewWalk(mImageSet);
00065             mListeners[l]->HandleNewWalk(mImageSet, String("Image"));
00066         }
00067         for (int dirId=startDir ; dirId<startDir+numberDirs ; dirId++)
00068         {
00069             for (size_t l=0 ; l<mListeners.size() ; l++)
00070                 mListeners[l]->HandleNewDir(mImageSet, dirId);
00071 
00072             int startFile = options.GetInt("startFile");
00073             int numberFiles = options.GetInt("numberFiles");
00074             int startF = mImageSet->GetFirstFileId(dirId);
00075             int numberF = mImageSet->GetNrFiles(dirId);
00076             if (startFile < numberF)
00077                 startF += startFile;
00078             if (numberFiles == -1)
00079                 numberFiles = numberF;
00080             if (startFile + numberFiles <= numberF)
00081                 numberF = numberFiles;
00082             for (int fileId=startF ; fileId<startF+numberF ; fileId++)
00083             {
00084                 ILOG_NDC_PUSH("image " << fileId);
00085                 Array::Array2dVec3UInt8* im = 0;
00086                 if (useIm)
00087                     im = mImageSet->GetImage(fileId);
00088                 for (size_t l=0 ; l<mListeners.size() ; l++)
00089                     mListeners[l]->HandleNewFile(mImageSet, fileId, im);
00090                 if (im)
00091                     delete im;
00092                 ILOG_NDC_POP;
00093             }
00094             for (size_t l=0 ; l<mListeners.size() ; l++)
00095                 mListeners[l]->HandleDoneDir(mImageSet, dirId);
00096         }
00097         for (size_t l=0 ; l<mListeners.size() ; l++)
00098             mListeners[l]->HandleDoneWalk(mImageSet);
00099     }
00100 
00101     void
00102     DoWalkBookmarks()
00103     {
00104         CmdOptions& options = CmdOptions::GetInstance();
00105         bool useIm = ! options.GetBool("virtualWalk");
00106         for (size_t l=0 ; l<mListeners.size() ; l++)
00107         {
00108             mListeners[l]->HandleNewWalk(mImageSet, mIrList.size());
00109             mListeners[l]->HandleNewWalk(mImageSet, String("Bookmarks"));
00110         }
00111         for (size_t i=0 ; i<mIrList.size() ; i++)
00112         {
00113             Geometry::IxRectangle ir = mIrList[i];
00114             int fileId = mImageSet->GetFileId(ir.mSection, ir.mDir,
00115                                               ir.mImageName);
00116             Array::Array2dVec3UInt8* im = 0;
00117             if (useIm)
00118                 im = mImageSet->GetImage(fileId);
00119             Geometry::Rectangle r = ir.mRect;
00120             String s = ir.mAnno;
00121             for (size_t l=0 ; l<mListeners.size() ; l++)
00122                 mListeners[l]->HandleNewFile(mImageSet, fileId, im, r, s);
00123             if (im)
00124                 delete im;
00125         }
00126         for (size_t l=0 ; l<mListeners.size() ; l++)
00127             mListeners[l]->HandleDoneWalk(mImageSet, mIrList.size());
00128     }
00129 
00130 protected:
00131 
00132     ImageSet*                          mImageSet;
00133     std::vector<Geometry::IxRectangle> mIrList;
00134     std::vector<Listener*>             mListeners;
00135 
00136     ILOG_VAR_DEC;
00137 
00138 };
00139 
00140 ILOG_VAR_INIT(Walker, Impala.Core.ImageSet);
00141 
00142 } // namespace ImageSet
00143 } // namespace Core
00144 } // namespace Impala
00145 
00146 #endif

Generated on Thu Jan 13 09:04:32 2011 for ImpalaSrc by  doxygen 1.5.1