#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 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 ); 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); // 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; // ==================== Just to see ============================== std::cout << std::endl << " ---------------------------------------- Recap" << std::endl; l = sh->GetFirstSingleSerieUIDFileSet(); while (l) { it = l->begin(); std::cout << "SerieUID [" << (*it)->GetEntryString(0x0020,0x000e) <<"] Serie Description [" << (*it)->GetEntryString(0x0008,0x103e) << "] " << " : " << l->size() << " files" << std::endl; l = sh->GetNextSingleSerieUIDFileSet(); } std::cout << " ----------------------------------------End Recap" << std::endl << std::endl; if(l->size() > 1) std::cout << " --------------------------- More than ONE Serie UID ?!?" << std::endl << std::endl; // ============================================================ // Should only contain one! l = sh->GetFirstSingleSerieUIDFileSet(); int nbFiles; double zspacing = 0.; nbFiles = l->size() ; sh->OrderFileList(l); zspacing = sh->GetZSpacing(); std::cout << "GetZSpacing() of sorted SingleSerieUIDFileSet " << "from GDCM_NAME_SPACE::SerieHelper: " << zspacing << std::endl; std::cout << " ('-1' means all the files have the same position)" << std::endl; bbSetOutputInterSlice(zspacing); reader = vtkGdcmReader::New(); //reader->SetFileName( bbGetInputIn().c_str() ); reader->SetCoherentFileList(l); reader->Update(); reader->GetOutput(); vtkIndent indent ; reader->GetOutput()->PrintSelf(std::cout, indent); bbSetOutputOut( reader->GetOutput() ); } void GetXCoherentInfoGdcmReader::bbUserConstructor() { std::vector init; init.push_back(""); bbSetInputIn(init); } void GetXCoherentInfoGdcmReader::bbUserCopyConstructor(bbtk::BlackBox::Pointer) { } void GetXCoherentInfoGdcmReader::bbUserDestructor() { if(reader) reader->Delete(); if(f) f->Delete(); if(sh) sh->Delete(); } } // EO namespace bbgdcmvtk