X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fgdcmvtk%2Fsrc%2FbbgdcmvtkGetInfoGdcmReader.cxx;h=9ef547f624a250136985b9f2d42d74d09e2a5554;hb=cfad95b6e08e6e53846ffcda7fbc5932065f2c47;hp=07da598549592d325533c17d2c0a8562c57c2218;hpb=64953af6e7389a36c4fb533b58bf720ba1342cd7;p=bbtk.git diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx b/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx index 07da598..9ef547f 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx +++ b/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx @@ -1,10 +1,43 @@ +# --------------------------------------------------------------------- +# +# 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 "bbgdcmvtkGetInfoGdcmReader.h" #include "bbgdcmvtkPackage.h" -#include "gdcmFile.h" -#include "gdcmFileHelper.h" -#include "vtkImageData.h" -#include "vtkGdcmReader.h" +#if defined USE_GDCM + #include "gdcmFile.h" + #include "gdcmFileHelper.h" + #include "vtkImageData.h" + #include "vtkGdcmReader.h" +#endif +#if defined USE_GDCM2 + #include +// #include "vtkImageData.h" + #include + #include +#endif #include namespace bbgdcmvtk @@ -12,6 +45,8 @@ namespace bbgdcmvtk BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetInfoGdcmReader) BBTK_BLACK_BOX_IMPLEMENTATION(GetInfoGdcmReader,bbtk::AtomicBlackBox); + +#if defined USE_GDCM void GetInfoGdcmReader::Process() { // Reset de reader, f @@ -26,11 +61,12 @@ void GetInfoGdcmReader::Process() bbSetOutputOut(0); return; } - // Get info from the image file + // Get info from THE image file (only *one* as input) int i; std::vector v_iop; float iop[6]; f->GetImageOrientationPatient(iop); + for(i=0; i< 6; i++) v_iop.push_back(iop[i]); bbSetOutputIOP(v_iop ); @@ -38,6 +74,7 @@ void GetInfoGdcmReader::Process() std::vector v_ipp; float ipp[3]; f->GetImagePositionPatient(ipp); + for(i=0; i< 3; i++) v_ipp.push_back(ipp[i]); bbSetOutputIPP(v_ipp ); @@ -45,7 +82,9 @@ void GetInfoGdcmReader::Process() std::vector v_pixelspacing; v_pixelspacing.push_back(f->GetXSpacing()); v_pixelspacing.push_back(f->GetYSpacing()); - if (f->GetZSize() != 1) { + + if (f->GetZSize() != 1) + { v_pixelspacing.push_back(f->GetZSpacing()); } bbSetOutputPixelSpacing(v_pixelspacing); @@ -62,34 +101,110 @@ void GetInfoGdcmReader::Process() reader->GetOutput()->PrintSelf(std::cout, indent); bbSetOutputOut( reader->GetOutput() ); } +#endif + +#if defined USE_GDCM2 +void GetInfoGdcmReader::Process() +{ + // Reset de reader, f + bbUserFinalizeProcessing(); + gdcm::Reader *read = new gdcm::Reader(); + read->SetFileName( bbGetInputIn().c_str()); + + bool res = read->Read(); + if ( !res ) + { + delete read; + bbSetOutputOut(0); + return; + } + + // Get info from THE image file (only *one* as input) + const gdcm::File &f = read->GetFile(); + + // Image Orientation (Patient) + 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 ); + + // Image Position (Patient) + 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 ); + + std::vector v_pixelspacing = gdcm::ImageHelper::GetSpacingValue(f); + bbSetOutputPixelSpacing(v_pixelspacing); + + //double interslice; ?? ==1 NO? + bbSetOutputInterSlice(v_pixelspacing[2]); + + reader = vtkGDCMImageReader::New(); + reader->SetFileName( bbGetInputIn().c_str() ); + reader->Update(); + reader->GetOutput(); + vtkIndent indent ; + reader->GetOutput()->PrintSelf(std::cout, indent); + bbSetOutputOut( reader->GetOutput() ); +} +#endif + void GetInfoGdcmReader::bbUserSetDefaultValues() { - reader=NULL; - f=NULL; - bbSetInputIn(""); +#if defined USE_GDCM2 + read=NULL; +#endif +#if defined USE_GDCM + reader=NULL; + f=NULL; +#endif + bbSetInputIn(""); } + void GetInfoGdcmReader::bbUserInitializeProcessing() { } - - - + + void GetInfoGdcmReader::bbUserFinalizeProcessing() { - if(reader){ +#if defined USE_GDCM2 + if( reader ) + { reader->Delete(); - reader=NULL; - } - if(f){ + reader=NULL; + } +#endif + +#if defined USE_GDCM + if( reader ) + { + reader->Delete(); + reader=NULL; + } + + if(f) + { f->Delete(); - f=NULL; - } - + f=NULL; + } +#endif } - } + // EO namespace bbgdcmvtk