X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOGimmickView.cpp;h=d990cb56b942e509197655e39841dd74c612c30a;hb=b0843014c5482f70050fab8036c6780172e3b6c9;hp=3e759dd4d5b67382251a843116c95841cf499632;hpb=33867ec27dd1743cd11b50939fdbb0f9ebd549f2;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index 3e759dd..d990cb5 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -1,8 +1,9 @@ #include #include - #include "boost/filesystem.hpp" - +#include +#include +#include namespace fs = boost::filesystem; namespace creaImageIO @@ -58,7 +59,7 @@ namespace creaImageIO //====================================================================== // CTor - GimmickView::GimmickView(Gimmick* gimmick, int threads) + GimmickView::GimmickView(boost::shared_ptr gimmick, int threads) : mGimmick(gimmick), mReader(threads) { @@ -67,7 +68,7 @@ namespace creaImageIO // Anciently started the threads ... // Threads now automatically start at first image request //mReader.Start(); - + } //====================================================================== @@ -86,11 +87,10 @@ namespace creaImageIO /// void GimmickView::Initialize() { - mImageExtent=0; mReaderStarted=false; } //====================================================================== - + //====================================================================== /// Finalize void GimmickView::Finalize() @@ -116,7 +116,7 @@ namespace creaImageIO /// Create a tree view with a given name void GimmickView::CreateSingleTreeView(std::string &i_name) { - this->CreateTreeView(mGimmick->GetTreeHandlerMap()[i_name]); + this->CreateTreeView(mGimmick->GetTreeHandlerMap()[i_name]); } @@ -135,22 +135,22 @@ namespace creaImageIO GimmickError("INTERNAL ERROR : GimmickView::UpdateTreeView : '" <second->UpdateLevel(l); + i->second->UpdateLevel(l); } + //====================================================================== /// Clears the status and begins a new selection process void GimmickView::ResetExtent() { if(mImageExtent!=0) { - mImageExtent=0; + mImageExtent.reset(); } valid=true; } - //====================================================================== - + //====================================================================== bool ImageExtent::IsCompatible(const ImageExtent& ie) { @@ -165,7 +165,7 @@ namespace creaImageIO } //====================================================================== - + //====================================================================== void ImageExtent::Add(const ImageExtent& ie) { @@ -177,6 +177,19 @@ namespace creaImageIO } } + //====================================================================== + /// No selected image + bool GimmickView::NoValidateSelected () + { + GimmickDebugMessage(2,"Validating selected"< ie=boost::shared_ptr(new ImageExtent((*sel).GetAttribute("D0028_0010"), + (*sel).GetAttribute("D0028_0011"), + (*sel).GetAttribute("D0028_0012"), + "")); if(mImageExtent==0) { mImageExtent=ie; @@ -207,7 +220,7 @@ namespace creaImageIO { std::stringstream out; out << mImageExtent->GetDimension() << "D image " << mImageExtent->Get(0) << "x"<< mImageExtent->Get(1) << "x"<< mImageExtent->Get(2) <<" selected"; - mMessage = out.str(); + mMessage = out.str(); mImageExtent->SetDimension(2); valid=true; } @@ -243,22 +256,20 @@ namespace creaImageIO } else { - mImageExtent->Add(*ie); - std::stringstream out; - out << mImageExtent->GetDimension() << "D image " << mImageExtent->Get(0) << "x"<< mImageExtent->Get(1) << "x"<< mImageExtent->Get(2) <<" selected"; - mMessage = out.str(); + mImageExtent->Add(*ie); + std::stringstream out; + out << mImageExtent->GetDimension() << "D image " << mImageExtent->Get(0) << "x"<< mImageExtent->Get(1) << "x"<< mImageExtent->Get(2) <<" selected"; + mMessage = out.str(); } - } else { mMessage="The selected images are not compatible."; valid=false; } - } + } } - modifyValidationSignal(valid); SetMessage(mMessage); return valid; @@ -270,30 +281,35 @@ namespace creaImageIO mValidationSignal(ivalid); } - //====================================================================== ///Reads Images (Non Threaded) -void GimmickView::ReadImagesNotThreaded(std::vector& s,std::vector im, int dimension) +void GimmickView::ReadImagesNotThreaded(std::vector& s, std::vector im, int dimension) { - + +/* remember! + +#define GIMMICK_NO_IMAGE_SELECTION 0 +#define GIMMICK_2D_IMAGE_SELECTION 2 +#define GIMMICK_3D_IMAGE_SELECTION 3 +#define GIMMICK_4D_IMAGE_SELECTION 4 + +#define NATIVE 0 +#define _2D 2 +#define _3D 3 + +*/ // Create the output data if (im.size()==1) - { - // Only one image : give it - vtkImageData* out = vtkImageData::New(); - GimmickDebugMessage(3, "State Check: Full Filename: " - <ShallowCopy(mReader.GetImage(im.front())); - s.push_back( out ); - } - else if (im.size()>1) + { + // O0. + } + else if (im.size()>1) // Test inutile ? JPR { vtkImageData* first = mReader.GetImage( im.front()); - if (dimension == 2) - { + if (dimension == 2) + { // n3D - std::vector::iterator it; + std::vector::iterator it; for (it=im.begin(); it!=im.end(); ++it) { vtkImageData* out = vtkImageData::New(); @@ -303,63 +319,173 @@ void GimmickView::ReadImagesNotThreaded(std::vector& s,std::vecto } else { - // n2D to 3D + // n*2D to 3D vtkImageData* out = vtkImageData::New(); out->CopyStructure(first); out->SetScalarType(first->GetScalarType()); + out->SetNumberOfScalarComponents(first->GetNumberOfScalarComponents()); int ext[6]; - first->GetExtent(ext); - ext[5] = im.size(); - out->SetExtent(ext) -1; - // LG : TODO : Z Spacing ? + //first->GetExtent(ext); // JPR + first->GetWholeExtent(ext); // renvoie egalement 0,0 en Z // JPR - out->AllocateScalars(); + if(ext[5] == 0) + { + ext[5] = im.size()-1; + } + else + { + ext[5] = ext[5] * im.size()-1; // to deal with multiframes - JPR + } + out->SetExtent(ext); - //first->Print(std::cout); - // out->Print(std::cout); + // LG : TODO : Z Spacing ? int dim[3]; first->GetDimensions(dim); - unsigned long imsize = dim[0] * dim[1];/* - ( (unsigned long)first->GetScalarPointer(0,1,0) - - (unsigned long)first->GetScalarPointer(0,0,0)) - *dim[1];*/ + out->SetDimensions(dim[0], dim[1], im.size() ); + out->AllocateScalars(); + out->Update(); + + unsigned long imsize = dim[0] * dim[1]; + imsize = imsize * dim[2] ; // deal with multiframes // JPR + + +//EED 03-11-2009 + // differents formats char , short, etc... + // differents components 1..3 ex. jpg ->RGB 3 + imsize = imsize * first->GetScalarSize() * first->GetNumberOfScalarComponents(); + + + // Order the file name vector + + double spc[3]; + out->GetSpacing(spc); + spc[2]=OrderTheFileNameVector(im); + out->SetSpacing(spc); int slice = 0; std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) - { - //std::cout << "copying slice "<GetScalarPointer(0,0,0); - void* dst = out->GetScalarPointer(0,0,slice); - // std::cout << "src="<ShallowCopy(mReader.GetImage(im.front())); + s.push_back( out ); + } + else if (im.size()>1) // Test inutile ? JPR + { + vtkImageData* first = mReader.GetImage( im.front()); + if (dimension == 2) + { + // n3D + std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) + { + vtkImageData* out = vtkImageData::New(); + out->ShallowCopy(mReader.GetImage(*it)); + s.push_back(out); + } } - } + else + { + // n2D to 3D // NO! + // n *2D + T in a vector : + + std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) + { + vtkImageData* out = mReader.GetImage( (*it)); + s.push_back(out); + } + } + } } //====================================================================== //====================================================================== ///Requests the reading of an image void GimmickView::RequestReading(tree::Node* n, - int prio, int selection_index, ImagePointerHolder *p) + int prio, int selection_index, boost::shared_ptr p) { if(!mReaderStarted) { mReader.Start(); mReaderStarted=true; } - ImageEventType t(n,selection_index, p); + ImageEventType t(n,selection_index); + t.pointerHolder = p; mImageEventMap[n->GetAttribute("FullFileName")] = t; mReader.Request(this,n->GetAttribute("FullFileName"),prio); } @@ -379,10 +505,10 @@ void GimmickView::ReadImagesNotThreaded(std::vector& s,std::vecto { //What to do in this case? /* - GimmickDebugMessage(5, + GimmickDebugMessage(5, "Pushing unknown image in queue" <& s,std::vecto if (i!=mImageEventMap.end()) { GimmickDebugMessage(5, - "Putting image of file '"<second); ie.image = image; ie.pointerHolder->Set(ie.image); @@ -433,7 +559,6 @@ void GimmickView::ReadImagesNotThreaded(std::vector& s,std::vecto ie.pointerHolder->Set(GetDefaultImage()); //mImageEventMap.erase(i); } - } } @@ -443,9 +568,7 @@ void GimmickView::ReadImagesNotThreaded(std::vector& s,std::vecto void GimmickView::ConnectValidationObserver(ValidationCallbackType callback) { mValidationSignal.connect(callback); - } - + } } // EO namespace creaImageIO -