X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOGimmickView.cpp;h=6df7fc0132413e211c5a4c9d9b326a009654dba2;hb=cb539b100d38f3092d06430575f846c916235db4;hp=c2ece7433afe15826af0a878010a2f7b059c1135;hpb=37692ca5ea7fb8414cb70bcae0ce16e51da57568;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index c2ece74..6df7fc0 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -1,9 +1,10 @@ #include #include #include "boost/filesystem.hpp" - +#include +#include +#include namespace fs = boost::filesystem; - namespace creaImageIO { @@ -28,6 +29,7 @@ namespace creaImageIO else if (mExtent[0]>1) mDim=1; else mDim=0; } + ///Clears the extent void Clear() { mExtent[0] = mExtent[1] = mExtent[2] = mExtent[3] = 1; } @@ -65,6 +67,7 @@ namespace creaImageIO // Anciently started the threads ... // Threads now automatically start at first image request //mReader.Start(); + } //====================================================================== @@ -116,6 +119,7 @@ namespace creaImageIO } + //====================================================================== //====================================================================== @@ -280,7 +284,7 @@ namespace creaImageIO ///Reads Images (Non Threaded) void GimmickView::ReadImagesNotThreaded(std::vector& s, std::vector im, int dimension) { - + mReader.Stop(); /* remember! #define GIMMICK_NO_IMAGE_SELECTION 0 @@ -296,19 +300,13 @@ void GimmickView::ReadImagesNotThreaded(std::vector& s, std::vect // 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 ); + s.push_back(out); } - else if (im.size()>1) // Test inutile ? JPR + else if (im.size()>1) // Test inutile ? JPR { - // Read the FIRST image to get info ... about all the other ones. ?!? // JPR vtkImageData* first = mReader.GetImage( im.front()); - if (dimension == 2) { // n3D @@ -320,23 +318,16 @@ void GimmickView::ReadImagesNotThreaded(std::vector& s, std::vect s.push_back(out); } } - else if (dimension == 3) + else { - // n*2D to 3D :: --> NON ! Ca va tres bien pour du 2D+T (le ZSpacing, on s'en tape) - // // ne convient pas pour du n*2D a  lire comme un 3D - // // Il faut un gdcmSerieHelper ! + // n*2D to 3D vtkImageData* out = vtkImageData::New(); - out->CopyStructure(first); +// out->CopyStructure(first); out->SetScalarType(first->GetScalarType()); + out->SetNumberOfScalarComponents(first->GetNumberOfScalarComponents()); int ext[6]; - //first->GetExtent(ext); // JPR + //first->GetExtent(ext); // JPR first->GetWholeExtent(ext); // renvoie egalement 0,0 en Z // JPR - // Normal : - -std::cout <<"in GimmickView::ReadImagesNotThreaded GetWholeExtent ext ="; -for (int jjj=0;jjj<6;jjj++) - std:cout << " [" << jjj << "]=" << ext[jjj]; -std::cout << std::endl; if(ext[5] == 0) { @@ -348,33 +339,98 @@ std::cout << std::endl; } out->SetExtent(ext); - // LG : TODO : Z Spacing ? // Voir + loin // JPR - - out->AllocateScalars(); + // LG : TODO : Z Spacing ? int dim[3]; first->GetDimensions(dim); + + 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 - imsize = imsize * first->GetScalarSize(); + // 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]; + first->GetSpacing(spc); + spc[2]=OrderTheFileNameVector(im); + out->SetSpacing(spc); int slice = 0; std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) { - vtkImageData* cur = mReader.GetImage( (*it)); - // void* src = cur->GetScalarPointer(0,0,0); - // void* dst = out->GetScalarPointer(0,0,slice); + vtkImageData* cur = mReader.GetImage( (*it) ); memcpy(out->GetScalarPointer(0,0,slice), cur->GetScalarPointer(0,0,0), imsize); - slice++; } s.push_back(out); + + } // dimension == 3 + + } // size >1 + +} + //====================================================================== + + +double GimmickView::OrderTheFileNameVector(std::vector &im) +{ + double spacing=1; + typedef std::vector FileList; + FileList fileVector; + //GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New(); + GDCM_NAME_SPACE::SerieHelper *sh = GDCM_NAME_SPACE::SerieHelper::New(); + std::vector lstAux; + std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) + { + ///\TODO liberer les GDCM_NAME_SPACE::File a la fin! // JPR + GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New(); + f->SetFileName(*it); + f->Load(); + if (f->IsReadable()) + { + fileVector.push_back(f); + } else { + lstAux.push_back(*it); } + } // for + + + if ((fileVector.size()>1) && (sh->IsCoherent( &fileVector ))) + { + sh->OrderFileList(&fileVector); + spacing= sh->GetZSpacing(); + im.clear(); + int i; + for (i=0; iGetFileName() ); + } + for (i=0; i& s, std::vector im, int dimension) { @@ -395,10 +451,9 @@ void GimmickView::ReadImagesNotThreadedInVector(std::vector& s, s if (dimension == 2) { // n3D - std::vector::iterator it; + std::vector::iterator it; for (it=im.begin(); it!=im.end(); ++it) { - std::cout << "----------------------------------------n3D" << std::endl; vtkImageData* out = vtkImageData::New(); out->ShallowCopy(mReader.GetImage(*it)); s.push_back(out); @@ -408,15 +463,11 @@ void GimmickView::ReadImagesNotThreadedInVector(std::vector& s, s { // n2D to 3D // NO! // n *2D + T in a vector : - std::cout << "---------------------------------------- n *2D + T" << std::endl; + std::vector::iterator it; for (it=im.begin(); it!=im.end(); ++it) { - std::cout << "---------------------------------------- [" << *it << "]" << std::endl; - //vtkImageData* out = mReader.GetImage( (*it)); - //s.push_back(out); - vtkImageData* out = vtkImageData::New(); - out->ShallowCopy(mReader.GetImage(*it)); + vtkImageData* out = mReader.GetImage( (*it)); s.push_back(out); } } @@ -429,15 +480,15 @@ void GimmickView::ReadImagesNotThreadedInVector(std::vector& s, s void GimmickView::RequestReading(tree::Node* n, int prio, int selection_index, boost::shared_ptr p) { - if(!mReaderStarted) - { - mReader.Start(); - mReaderStarted=true; - } - ImageEventType t(n,selection_index); - t.pointerHolder = p; - mImageEventMap[n->GetAttribute("FullFileName")] = t; - mReader.Request(this,n->GetAttribute("FullFileName"),prio); + if(!mReaderStarted) + { + mReader.Start(); + mReaderStarted=true; + } + ImageEventType t(n,selection_index); + t.pointerHolder = p; + mImageEventMap[n->GetAttribute("FullFileName")] = t; + mReader.Request(this,n->GetAttribute("FullFileName"),prio); } //======================================================================