X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOGimmickView.cpp;h=9d2b3dcb199d5a61c17dcb10a0bfdcf1b4bde850;hb=cac026929f2431aa4a966bf9ae3c8ff263f5dd63;hp=49297e9be755c074c127bafa89adf24931ddb479;hpb=403cc3cf787a717b7a9cdf2d148758a66dbdce27;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index 49297e9..9d2b3dc 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -1,8 +1,13 @@ #include #include +#include "boost/filesystem.hpp" + +namespace fs = boost::filesystem; + namespace creaImageIO { + //====================================================================== // CTor GimmickView::GimmickView(Gimmick* gimmick, int threads) @@ -11,8 +16,10 @@ namespace creaImageIO { GimmickDebugMessage(1,"GimmickView::GimmickView" <second->UpdateLevel(l); } + //====================================================================== + /// Clears the status and begins a new selection process + void GimmickView::ClearStatus() + { + row=""; + col=""; + plane=""; + selectionSize=0; + valid=true; + } + + + class ImageExtent + { + public: + ImageExtent(const std::string& x, const std::string& y, const std::string& z, const std::string& t); + + void Clear() { mExtent[0] = mExtent[1] = mExtent[2] = mExtent[3] = 1; } + + bool IsCompatible( const ImageExtent& ); + + void Add ( const ImageExtent& ); + + int Get(int i) { return mExtent[i]; } + + int GetDimension() { return mDim; } + + private: + int mExtent[4]; + int mDim; + }; + + //====================================================================== ///Validates the dimension compliance of the images with the maximum and ///minimum given, and between their sizes - bool GimmickView::ValidateSelected (std::vector& sel, int min_dim, int max_dim) + bool GimmickView::ValidateSelected (tree::Node* sel, int min_dim, int max_dim) { GimmickMessage(2,"Validating selected"<0) + if(sel==0) { - std::vector::iterator i; - std::string row; - std::string col; - std::string plane; - - //Validation between image sizes - for (i=sel.begin(); i!=sel.end() && valid; ++i) - { - if(i==sel.begin()) - { - row=(*i)->GetAttribute("D0028_0010"); - col=(*i)->GetAttribute("D0028_0011"); - plane=(*i)->GetAttribute("D0028_0012"); - level=(*i)->GetLevel(); - - } - else + mMessage="Cannot have 0 images selected!"; + valid=false; + } + if(valid) + { + selectionSize++; + /*// EED validate all + mValidationSignal(valid); + return valid;*/ + + int level; + + + if(row.compare("")==0 || col.compare("")==0) + { + row=(*sel).GetAttribute("D0028_0010"); + col=(*sel).GetAttribute("D0028_0011"); + plane=(*sel).GetAttribute("D0028_0012"); + level=(*sel).GetLevel(); + } + else + { + if(((*sel).GetAttribute("D0028_0010"))!=row || + ((*sel).GetAttribute("D0028_0011"))!=col || + ((*sel).GetAttribute("D0028_0012"))!=plane) { - if(((*i)->GetAttribute("D0028_0010"))!=row || - ((*i)->GetAttribute("D0028_0011"))!=col || - ((*i)->GetAttribute("D0028_0012"))!=plane) - { - mMessage="The selected images are not compatible."; - valid=false; - } + mMessage="The selected images are not compatible."; + valid=false; } - } - - //Dimention validation - //Compatibility with maximum - if(valid) - { - - int rows; - int cols; - int planes; - std::string s; - std::istringstream t(s); - s=row; - t >> rows; - if(row==""){rows=1;} - s=col; - t >> cols; - if(col==""){cols=1;} - s=plane; - t >> planes; - if(plane==""){planes=1;} + } + + + int dim = 0; + int rows; + int cols; + int planes; + + //Dimention validation + //Compatibility with maximum and minimum + if(valid) + { + sscanf(row.c_str(),"%d",&rows); + sscanf(col.c_str(),"%d",&cols); + sscanf(plane.c_str(),"%d",&planes); + if(row==""){rows=1;} + if(col==""){cols=1;} + if(plane==""){planes=1;} + + std::cout << cols << "x"<1) dim=3; - else if (cols>1) dim=2; - else if (rows>1) dim=1; - - if (dim == 0) - { - mMessage="Unknown image dimension : cannot select !"; - valid= false; - } - else if (dim>max_dim) - { - mMessage="Selecting "; - mMessage+=dim; - mMessage+="D images is not allowed !"; - valid= false; - } - if ( dim == max_dim ) - { - mMessage="Cannot add this image to selection : would result in a "; - mMessage+=(dim+1); - mMessage+="D image!"; - - valid= false; - } - if ( dim < min_dim && sel.size()<2 ) - { - GimmickDebugMessage(2, "State Check: Dim: " - <1) dim=3; + else if (cols>1) dim=2; + else if (rows>1) dim=1; + + if (dim == 0) + { + mMessage="Unknown image dimension : cannot select !"; + valid= false; + } + else if (dim>max_dim) + { + mMessage="Selecting "; + mMessage+=dim; + mMessage+="D images is not allowed !"; + valid= false; + } + if ( dim == max_dim ) + { + mMessage="Cannot add this image to selection : would result in a "; + mMessage+=(dim+1); + mMessage+="D image!"; + + valid= false; + } + if ( dim < min_dim ) + { + GimmickMessage(1, "State Check: Dim: " + <GetAttribute("FullFileName")] = t; + mReader.Request(this,n->GetAttribute("FullFileName"),prio); + } + //====================================================================== + + //====================================================================== + void GimmickView:: + OnMultiThreadImageReaderEvent(const std::string& filename, + MultiThreadImageReaderUser::EventType e, + vtkImageData* image) + { + GimmickDebugMessage(7, + "MultiThreadImageReader event : "<second); + ie.image = image; + ie.pointerHolder->Set(ie.image); + //mImageEventMap.erase(i); + } + } + else if (e==Error) + { + std::string mess="ERROR: MultiThreadImageReader: Cannot read image in file "; + mess+=filename; + mess+="\n"; + GimmickMessage(1,mess); + ImageEventTypeMap::iterator i; + i = mImageEventMap.find(filename); + if (i!=mImageEventMap.end()) + { + ImageEventType ie(i->second); + ie.image = image; + ie.pointerHolder->Set(GetDefaultImage()); + //mImageEventMap.erase(i); + } + } + + else if (e==ImageUnloaded) + { + std::string mess="Unloaded image in file "; + mess+=filename; + mess+="\n"; + GimmickMessage(1,mess); + ImageEventTypeMap::iterator i; + i = mImageEventMap.find(filename); + if (i!=mImageEventMap.end()) + { + ImageEventType ie(i->second); + ie.image = image; + ie.pointerHolder->Set(GetDefaultImage()); + //mImageEventMap.erase(i); + } + + } + } + + //==================================================================== + + //==================================================================== + void GimmickView::ConnectValidationObserver(ValidationCallbackType callback) + { + mValidationSignal.connect(callback); + } } // EO namespace creaImageIO