X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOGimmickView.cpp;h=46ab5643d04fd73baae7da439846cef77cd3dbbd;hb=6ce1377c642f91e9b173b8a5440543eb5320fcd5;hp=c24a7c3c3534638640762fc75d1eaaf1e61b3e0f;hpb=6cab96fd8ca99341053a1a6f8a9286940c535313;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index c24a7c3..46ab564 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -1,6 +1,5 @@ #include #include - #include "boost/filesystem.hpp" namespace fs = boost::filesystem; @@ -58,7 +57,7 @@ namespace creaImageIO //====================================================================== // CTor - GimmickView::GimmickView(Gimmick* gimmick, int threads) + GimmickView::GimmickView(boost::shared_ptr gimmick, int threads) : mGimmick(gimmick), mReader(threads) { @@ -86,7 +85,6 @@ namespace creaImageIO /// void GimmickView::Initialize() { - mImageExtent=0; mReaderStarted=false; } //====================================================================== @@ -112,6 +110,15 @@ namespace creaImageIO this->CreateTreeView(i->second); } } + + /// Create a tree view with a given name + void GimmickView::CreateSingleTreeView(std::string &i_name) + { + this->CreateTreeView(mGimmick->GetTreeHandlerMap()[i_name]); + + } + + //====================================================================== //====================================================================== @@ -134,7 +141,7 @@ namespace creaImageIO { if(mImageExtent!=0) { - mImageExtent=0; + mImageExtent.reset(); } valid=true; } @@ -162,7 +169,23 @@ namespace creaImageIO { ImageExtent * extent= (ImageExtent*)&ie; mExtent[2]+=(*extent).Get(2); + if(mExtent[2]>1) + { SetDimension(3); + } + } + + //====================================================================== + /// 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; @@ -236,114 +259,162 @@ namespace creaImageIO 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; } - } + } } - - mValidationSignal(valid); + modifyValidationSignal(valid); SetMessage(mMessage); return valid; } -//====================================================================== + //====================================================================== + void GimmickView::modifyValidationSignal(bool ivalid) + { + 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) +{ // Create the output data if (im.size()==1) - { - + { // Only one image : give it vtkImageData* out = vtkImageData::New(); - GimmickMessage(1, "State Check: Full Filename: " - <GetAttribute("FullFileName") + GimmickDebugMessage(3, "State Check: Full Filename: " + <ShallowCopy(mReader.GetImage(im.front()->GetAttribute("FullFileName"))); + out->ShallowCopy(mReader.GetImage(im.front())); s.push_back( out ); - } - - else if (im.size()>1) - { - vtkImageData* first = mReader.GetImage( im.front()->GetAttribute("FullFileName")); - if (dimension==2) - { - // n2D to 3D - vtkImageData* out = vtkImageData::New(); - out->CopyStructure(first); - out->SetScalarType(first->GetScalarType()); - int ext[6]; - first->GetExtent(ext); - ext[5] = im.size(); - out->SetExtent(ext); - // LG : TODO : Z Spacing ? - - out->AllocateScalars(); - - //first->Print(std::cout); - // out->Print(std::cout); - - int dim[3]; - first->GetDimensions(dim); - unsigned long imsize = - ( (unsigned long)first->GetScalarPointer(0,1,0) - - (unsigned long)first->GetScalarPointer(0,0,0)) - *dim[1]; - - int slice = 0; - std::vector::iterator it; - for (it=im.begin(); it!=im.end(); ++it) - { - //std::cout << "copying slice "<GetAttribute("FullFileName")); + } + 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 + vtkImageData* out = vtkImageData::New(); + out->CopyStructure(first); + out->SetScalarType(first->GetScalarType()); + int ext[6]; + first->GetExtent(ext); + 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); + // LG : TODO : Z Spacing ? + + out->AllocateScalars(); + + //first->Print(std::cout); + // out->Print(std::cout); + + int dim[3]; + first->GetDimensions(dim); + unsigned long imsize = dim[0] * dim[1]; + imsize = imsize * dim[2] ; // deal with multiframes// JPR + + /* + ( (unsigned long)first->GetScalarPointer(0,1,0) + - (unsigned long)first->GetScalarPointer(0,0,0)) + *dim[1];*/ + + int slice = 0; + std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) + { - void* src = cur->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); } @@ -359,28 +430,31 @@ namespace creaImageIO "MultiThreadImageReader event : "<second); - ie.image = image; - ie.pointerHolder->Set(ie.image); - //mImageEventMap.erase(i); - } + mImageEventQueue.push_back(ImageEventType(image));*/ + return; + } + ImageEventTypeMap::iterator i; +//JCP 22-06-2009, test mImageEventMap.size() > 0 + if(mImageEventMap.size()>0){ + i = mImageEventMap.find(filename); + if (i!=mImageEventMap.end()) + { + GimmickDebugMessage(5, + "Putting image of file '"<second); + ie.image = image; + ie.pointerHolder->Set(ie.image); + //mImageEventMap.erase(i); + } + } } else if (e==Error) { @@ -414,7 +488,6 @@ namespace creaImageIO ie.pointerHolder->Set(GetDefaultImage()); //mImageEventMap.erase(i); } - } } @@ -424,9 +497,7 @@ namespace creaImageIO void GimmickView::ConnectValidationObserver(ValidationCallbackType callback) { mValidationSignal.connect(callback); - } - + } } // EO namespace creaImageIO -