X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fgdcmvtk%2Fsrc%2FbbgdcmvtkGetXCoherentInfoGdcmReader.cxx;h=faabc03cf6eca63b458e6c3cfe119ddf5864f823;hb=3f88d1b429d99eca0b5ca0627063e1d08fadefd6;hp=eb9a13454a71d5fb92d88f4331e1037c610a98bd;hpb=a26b760bbfe886312cbe54bd83b7211f621edf80;p=bbtk.git diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx index eb9a134..faabc03 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx +++ b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx @@ -1,12 +1,40 @@ +/* +# --------------------------------------------------------------------- +# +# 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 "vtkImageData.h" #include + #if defined USE_GDCM -#include "gdcmFileHelper.h" + #include "gdcmFileHelper.h" #endif + #if defined USE_GDCM2 #include #include @@ -20,18 +48,56 @@ namespace bbgdcmvtk BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetXCoherentInfoGdcmReader) BBTK_BLACK_BOX_IMPLEMENTATION(GetXCoherentInfoGdcmReader,bbtk::AtomicBlackBox); + + +vtkImageData* GetXCoherentInfoGdcmReader::CreateDefaultImage() +{ + int i; + int sizeX, sizeY, sizeZ; + sizeX = 200; + sizeY = sizeX; + sizeZ = 1; + vtkImageData *newImage = vtkImageData::New(); + newImage->Initialize(); + newImage->SetScalarTypeToUnsignedChar(); + newImage->SetSpacing( 1,1,1 ); + newImage->SetDimensions( sizeX,sizeY,sizeZ ); + newImage->SetWholeExtent(0, sizeX-1,0,sizeY-1,0,sizeZ-1 ); + newImage->SetExtent(0, sizeX-1,0,sizeY-1,0,sizeZ-1 ); + newImage->SetNumberOfScalarComponents(1); + newImage->AllocateScalars(); + newImage->Update(); + memset ( (void*)newImage->GetScalarPointer(), 0, sizeX*sizeY*1 ); + for (i=0; iSetScalarComponentFromDouble(i,i,0, 0, 255 ); + newImage->SetScalarComponentFromDouble(i,sizeY-1-i,0, 0, 255 ); + } // for i + return newImage; +} + + #if defined USE_GDCM void GetXCoherentInfoGdcmReader::Process() { + // Read the *first* image file (a SET of file names is given as input) f = GDCM_NAME_SPACE::File::New(); - f->SetFileName( bbGetInputIn()[0] ); + + if ( bbGetInputIn().size()!=0 ) + { + f->SetFileName( bbGetInputIn()[0] ); + } else { + f->SetFileName( "" ); + } + bool res = f->Load(); if ( !res ) { - f->Delete(); - bbSetOutputOut(0); - return; + printf("EED GetXCoherentInfoGdcmReader::Process resultImage NULL\n"); + f->Delete(); + bbSetOutputOut( CreateDefaultImage() ); + return; } // Get info from the first image file int i; @@ -40,7 +106,9 @@ void GetXCoherentInfoGdcmReader::Process() f->GetImageOrientationPatient(iop); for(i=0; i< 6; i++) + { v_iop.push_back(iop[i]); + } bbSetOutputIOP(v_iop ); std::vector v_ipp; @@ -48,7 +116,9 @@ void GetXCoherentInfoGdcmReader::Process() f->GetImagePositionPatient(ipp); for(i=0; i< 3; i++) + { v_ipp.push_back(ipp[i]); + } bbSetOutputIPP(v_ipp ); // Add *all the files* to the SerieHelper @@ -62,15 +132,14 @@ void GetXCoherentInfoGdcmReader::Process() sh->AddFileName(*it); } + GDCM_NAME_SPACE::FileList::const_iterator it; GDCM_NAME_SPACE::FileList *l; // Should only contain one! l = sh->GetFirstSingleSerieUIDFileSet(); - int nbFiles; double zspacing = 0.; - nbFiles = l->size() ; sh->OrderFileList(l); // this one should compute the *actual* Z Spacing! zspacing = sh->GetZSpacing(); std::vector v_pixelspacing; @@ -82,36 +151,70 @@ void GetXCoherentInfoGdcmReader::Process() // } bbSetOutputPixelSpacing(v_pixelspacing); + VectorMapInfoDicom vectormapinfodicom; + uint16_t group; + uint16_t elem; + std::string key; + std::string strTagValue; // read on disc + int iTag,sizeDicomTagsVector=bbGetInputDicomTags().size(); + GDCM_NAME_SPACE::FileList::const_iterator iitt = l->begin(); + //iitt ++; + for ( ; iitt != l->end(); ++iitt) + { + MapInfoDicom mapinfodicom; + + for (iTag=0; iTagGetEntryString(group,elem); + mapinfodicom.insert ( std::pair(key,strTagValue) ); + } // for iTag + + vectormapinfodicom.push_back( mapinfodicom ); + } // for iitt + bbSetOutputDicomInfo( vectormapinfodicom ); + if (reader!=NULL) { reader->Delete(); 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(); - reader->GetOutput(); - bbSetOutputOut( reader->GetOutput() ); } -#endif USE_GDCM +#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()); + reader->SetFileName( bbGetInputIn()[0].c_str() ); bool res = read->Read(); - if ( !res ) - { - delete read; - bbSetOutputOut(0); - return; - } + if ( !res ) + { + delete read; + bbSetOutputOut(NULL); + return; + } + + // Get info from the first image file const gdcm::File &f = read->GetFile(); int i; @@ -166,20 +269,20 @@ void GetXCoherentInfoGdcmReader::Process() { const std::string &f = *it; files->InsertNextValue( f.c_str() ); - } + } reader->SetFileNames(files); reader->Update(); - reader->GetOutput(); bbSetOutputOut( reader->GetOutput() ); } -#endif USE_GDCM2 +#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()