#include "bbgdcmvtkGetXCoherentInfoGdcmReader.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,GetXCoherentInfoGdcmReader) BBTK_BLACK_BOX_IMPLEMENTATION(GetXCoherentInfoGdcmReader,bbtk::AtomicBlackBox); 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] ); bool res = f->Load(); if ( !res ) { f->Delete(); bbSetOutputOut(0); return; } // Get info from the first image file 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 ); // Add *all the files* to the SerieHelper sh = GDCM_NAME_SPACE::SerieHelper::New(); std::vector gii = bbGetInputIn(); for(std::vector::iterator it = gii.begin(); it != gii.end(); ++it) { 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); zspacing = sh->GetZSpacing(); std::vector v_pixelspacing; v_pixelspacing.push_back( f->GetXSpacing() ); v_pixelspacing.push_back( f->GetYSpacing() ); v_pixelspacing.push_back( zspacing ); // if (f->GetZSize() != 1) { // v_pixelspacing.push_back(f->GetZSpacing()); // } bbSetOutputPixelSpacing(v_pixelspacing); if (reader!=NULL) { reader->Delete(); reader=NULL; } reader = vtkGdcmReader::New(); //reader->SetFileName( bbGetInputIn().c_str() ); reader->SetCoherentFileList(l); reader->Update(); reader->GetOutput(); bbSetOutputOut( reader->GetOutput() ); } void GetXCoherentInfoGdcmReader::bbUserSetDefaultValues() { std::vector init; init.push_back(""); bbSetInputIn(init); reader=NULL; } void GetXCoherentInfoGdcmReader::bbUserInitializeProcessing() { } void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() { if(reader) reader->Delete(); if(f) f->Delete(); if(sh) sh->Delete(); } } // EO namespace bbgdcmvtk