X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fgdcmvtk%2Fsrc%2FbbgdcmvtkGetXCoherentInfoGdcmReader.cxx;h=105e782da39bb023ec4b70cfa860ace18527ff23;hb=5d332eae2105106da042e76430b810b9efe95c81;hp=092a2a834c1df10f6d009a4d8024c6adb66b0f16;hpb=ae867ce6752785393a3f4b209f3f76c46f04470c;p=bbtk.git diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx index 092a2a8..105e782 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx +++ b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx @@ -1,17 +1,54 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la SantÈ) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + #include "bbgdcmvtkGetXCoherentInfoGdcmReader.h" #include "bbgdcmvtkPackage.h" #include "gdcmFile.h" -#include "gdcmFileHelper.h" #include "vtkImageData.h" -#include "vtkGdcmReader.h" #include +#if defined USE_GDCM + #include "gdcmFileHelper.h" +#endif + +#if defined USE_GDCM2 + #include + #include + #include + #include + #include "vtkStringArray.h" +#endif + namespace bbgdcmvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetXCoherentInfoGdcmReader) BBTK_BLACK_BOX_IMPLEMENTATION(GetXCoherentInfoGdcmReader,bbtk::AtomicBlackBox); +#if defined USE_GDCM void GetXCoherentInfoGdcmReader::Process() { // Read the *first* image file (a SET of file names is given as input) @@ -79,6 +116,11 @@ void GetXCoherentInfoGdcmReader::Process() reader=NULL; } reader = vtkGdcmReader::New(); + + //EED 21 mars 2012 FLIP probleme ..PLOP.. + reader->SetFlipY(false); + + //reader->SetFileName( bbGetInputIn().c_str() ); reader->SetCoherentFileList(l); reader->Update(); @@ -86,13 +128,95 @@ void GetXCoherentInfoGdcmReader::Process() bbSetOutputOut( reader->GetOutput() ); } +#endif +// endif USE_GDCM + +#if defined USE_GDCM2 +void GetXCoherentInfoGdcmReader::Process() +{ + // Read the *first* image file (a SET of file names is given as input) + gdcm::Reader *read = new gdcm::Reader(); + reader->SetFileName( bbGetInputIn()[0].c_str() ); + + bool res = read->Read(); + if ( !res ) + { + delete read; + printf("EED GetXCoherentInfoGdcmReader::Process resultImage NULL\n"); + bbSetOutputOut(NULL); + return; + } + + + + // Get info from the first image file + const gdcm::File &f = read->GetFile(); + int i; + std::vector v_iop; + const gdcm::DataElement &deIop = f.GetDataSet().GetDataElement(gdcm::Tag(0x0020, 0x0037)); + std::stringstream ss; + deIop.GetValue().Print(ss); + gdcm::Element iop; + iop.Read( ss ); + for(i=0; i< 6; i++) + v_iop.push_back((float)(iop[i])); + bbSetOutputIOP(v_iop ); + + std::vector v_ipp; + const gdcm::DataElement &deIpp = f.GetDataSet().GetDataElement(gdcm::Tag((0x0020,0x0032))); + deIpp.GetValue().Print(ss); + gdcm::Element ipp; + ipp.Read( ss ); + for(i=0; i< 3; i++) + v_ipp.push_back((float)(ipp[i])); + bbSetOutputIPP(v_ipp ); + +// Add *all the files* to the IPPsorter + gdcm::IPPSorter s; + s.SetComputeZSpacing( true ); + s.SetZSpacingTolerance( 1e-3 ); + std::vector gii = bbGetInputIn(); + s.Sort(gii); + + //l = sh->GetFirstSingleSerieUIDFileSet(); + // no Test if we have multiple series + //s.GetFilenames(); + //int nbFiles; + + double zspacing = 0.; + zspacing = s.GetZSpacing(); + std::vector v_pixelspacing = gdcm::ImageHelper::GetSpacingValue(f); + v_pixelspacing.push_back( v_pixelspacing[0] ); + v_pixelspacing.push_back( v_pixelspacing[1] ); + v_pixelspacing.push_back( zspacing ); + bbSetOutputPixelSpacing(v_pixelspacing); + + if (reader!=NULL) + { + reader->Delete(); + reader=NULL; + } + reader = vtkGDCMImageReader::New(); + vtkStringArray *files = vtkStringArray::New(); + std::vector< std::string >::const_iterator it = s.GetFilenames().begin(); + for( ; it != s.GetFilenames().end(); ++it) + { + const std::string &f = *it; + files->InsertNextValue( f.c_str() ); + } + reader->SetFileNames(files); + reader->Update(); + bbSetOutputOut( reader->GetOutput() ); +} +#endif +// endif USE_GDCM2 void GetXCoherentInfoGdcmReader::bbUserSetDefaultValues() { std::vector init; init.push_back(""); bbSetInputIn(init); - reader=NULL; + //reader=NULL; /// \TODO fixme JPR } void GetXCoherentInfoGdcmReader::bbUserInitializeProcessing() @@ -100,6 +224,7 @@ void GetXCoherentInfoGdcmReader::bbUserInitializeProcessing() } +#if defined USE_GDCM void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() { if(reader) @@ -109,6 +234,15 @@ void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() if(sh) sh->Delete(); } +#endif + +#if defined USE_GDCM2 +void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() +{ + if(reader) + reader->Delete(); +} +#endif } // EO namespace bbgdcmvtk