#include "bbgdcmvtkGetInfoGdcmReader.h" #include "bbgdcmvtkPackage.h" #include "gdcmFile.h" #include "gdcmFileHelper.h" #include "vtkImageData.h" #include "vtkGdcmReader.h" #include namespace bbgdcmvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetInfoGdcmReader) BBTK_BLACK_BOX_IMPLEMENTATION(GetInfoGdcmReader,bbtk::AtomicBlackBox); void GetInfoGdcmReader::Process() { // Reset de reader, f bbUserFinalizeProcessing(); f = GDCM_NAME_SPACE::File::New(); f->SetFileName( bbGetInputIn() ); bool res = f->Load(); if ( !res ) { f->Delete(); bbSetOutputOut(0); return; } // 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 ); 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 ); std::vector v_pixelspacing; v_pixelspacing.push_back(f->GetXSpacing()); v_pixelspacing.push_back(f->GetYSpacing()); if (f->GetZSize() != 1) { v_pixelspacing.push_back(f->GetZSpacing()); } bbSetOutputPixelSpacing(v_pixelspacing); //double interslice; bbSetOutputInterSlice(f->GetZSpacing()); reader = vtkGdcmReader::New(); reader->SetFileName( bbGetInputIn().c_str() ); reader->Update(); reader->GetOutput(); vtkIndent indent ; reader->GetOutput()->PrintSelf(std::cout, indent); bbSetOutputOut( reader->GetOutput() ); } void GetInfoGdcmReader::bbUserSetDefaultValues() { reader=NULL; f=NULL; bbSetInputIn(""); } void GetInfoGdcmReader::bbUserInitializeProcessing() { } void GetInfoGdcmReader::bbUserFinalizeProcessing() { if( reader ) { reader->Delete(); reader=NULL; } if(f) { f->Delete(); f=NULL; } } } // EO namespace bbgdcmvtk