Home || Architecture || Video Search || Visual Search || Scripts || Applications || 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                 Array::Array2dVec3UInt8* im = 0;
00085                 if (useIm)
00086                     im = mImageSet->GetImage(fileId);
00087                 for (size_t l=0 ; l<mListeners.size() ; l++)
00088                     mListeners[l]->HandleNewFile(mImageSet, fileId, im);
00089                 if (im)
00090                     delete im;
00091             }
00092             for (size_t l=0 ; l<mListeners.size() ; l++)
00093                 mListeners[l]->HandleDoneDir(mImageSet, dirId);
00094         }
00095         for (size_t l=0 ; l<mListeners.size() ; l++)
00096             mListeners[l]->HandleDoneWalk(mImageSet);
00097     }
00098 
00099     void
00100     DoWalkBookmarks()
00101     {
00102         CmdOptions& options = CmdOptions::GetInstance();
00103         bool useIm = ! options.GetBool("virtualWalk");
00104         for (size_t l=0 ; l<mListeners.size() ; l++)
00105         {
00106             mListeners[l]->HandleNewWalk(mImageSet, mIrList.size());
00107             mListeners[l]->HandleNewWalk(mImageSet, String("Bookmarks"));
00108         }
00109         for (size_t i=0 ; i<mIrList.size() ; i++)
00110         {
00111             Geometry::IxRectangle ir = mIrList[i];
00112             int fileId = mImageSet->GetFileId(ir.mSection, ir.mDir,
00113                                               ir.mImageName);
00114             Array::Array2dVec3UInt8* im = 0;
00115             if (useIm)
00116                 im = mImageSet->GetImage(fileId);
00117             Geometry::Rectangle r = ir.mRect;
00118             String s = ir.mAnno;
00119             for (size_t l=0 ; l<mListeners.size() ; l++)
00120                 mListeners[l]->HandleNewFile(mImageSet, fileId, im, r, s);
00121             if (im)
00122                 delete im;
00123         }
00124         for (size_t l=0 ; l<mListeners.size() ; l++)
00125             mListeners[l]->HandleDoneWalk(mImageSet, mIrList.size());
00126     }
00127 
00128 protected:
00129 
00130     ImageSet*                          mImageSet;
00131     std::vector<Geometry::IxRectangle> mIrList;
00132     std::vector<Listener*>             mListeners;
00133 
00134     ILOG_VAR_DEC;
00135 
00136 };
00137 
00138 ILOG_VAR_INIT(Walker, Impala.Core.ImageSet);
00139 
00140 } // namespace ImageSet
00141 } // namespace Core
00142 } // namespace Impala
00143 
00144 #endif

Generated on Fri Mar 19 09:31:14 2010 for ImpalaSrc by  doxygen 1.5.1