X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Example%2FSplitIntoXCoherentDirectories.cxx;h=6e83fd58b61bb39891213464d89402e7843192a8;hb=6fc9a59ce58ba4bb71d63a57e6b1ef2c3c87292a;hp=47de2ea03fa7e77b73203fe0550ed098d4021f45;hpb=80075429b6ab9db9e885b9bb9ae1427530c7bef8;p=gdcm.git diff --git a/Example/SplitIntoXCoherentDirectories.cxx b/Example/SplitIntoXCoherentDirectories.cxx index 47de2ea0..6e83fd58 100755 --- a/Example/SplitIntoXCoherentDirectories.cxx +++ b/Example/SplitIntoXCoherentDirectories.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: SplitIntoXCoherentDirectories.cxx,v $ Language: C++ - Date: $Date: 2007/10/24 08:03:10 $ - Version: $Revision: 1.3 $ + Date: $Date: 2009/05/28 15:44:34 $ + Version: $Revision: 1.4 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -30,7 +30,7 @@ int main(int argc, char *argv[]) START_USAGE(usage) "\n exXCoherentFileSet :\n ", "Shows the various 'XCoherent' Filesets within a directory ", - "Optionaly copis the images in a Directories tree ", + "Optionaly copies the images in a Directories tree ", "usage: exXCoherentFileSet {dirin=inputDirectoryName} ", " dirout=outputDirectoryName ", " { tag=group-elem | pos | ori } [sort] ", @@ -74,7 +74,7 @@ int main(int argc, char *argv[]) int loadMode; int maxSize; - + const char *dirName = am->ArgMgrGetString("dirin"); if (dirName == 0) { @@ -96,13 +96,13 @@ int main(int argc, char *argv[]) bool write = ( 0 != am->ArgMgrDefined("write") ); bool verbose = ( 0 != am->ArgMgrDefined("verbose") ); bool tag = ( 0 != am->ArgMgrDefined("tag") ); - + if( copy && write ) { std::cout << "COPY and WRITE are mutually exclusive" << std::endl; delete am; - return 0; - } + return 0; + } if( (tag && (pos || ori)) || (pos && (tag || ori)) || (ori && (tag || pos)) ) { @@ -143,10 +143,13 @@ int main(int argc, char *argv[]) delete am; // ------ we don't need Arguments Manager any longer ------ - + GDCM_NAME_SPACE::SerieHelper *s; s = GDCM_NAME_SPACE::SerieHelper::New(); - + + s->SetLoadMode(GDCM_NAME_SPACE::LD_ALL); // Load everything for each File + s->SetDirectory(dirName, true); // true : recursive exploration + GDCM_NAME_SPACE::File *f; GDCM_NAME_SPACE::DirList dirlist(dirName, true); // recursive exploration @@ -163,7 +166,7 @@ int main(int argc, char *argv[]) if (write) { loadMode = GDCM_NAME_SPACE::LD_ALL; // load any DataElement - maxSize = 0x7fff; // load any length + maxSize = 0x7fff; // load any length } else { loadMode = GDCM_NAME_SPACE::LD_NOSEQ | GDCM_NAME_SPACE::LD_NOSHADOW ; maxSize = 0x0100; @@ -217,7 +220,13 @@ int main(int argc, char *argv[]) // For all the Single SerieUID Files Sets of the GDCM_NAME_SPACE::Serie - //GDCM_NAME_SPACE::FileList *l = s->GetFirstSingleSerieUIDFileSet();//===> Ignore 'Serie UID" + // GDCM_NAME_SPACE::FileList *l = s->GetFirstSingleSerieUIDFileSet(); + + l = s->GetFirstSingleSerieUIDFileSet(); + if (l == NULL) { + std::cout << "No Serie found ?!?" << std::endl; + exit (0); + } GDCM_NAME_SPACE::XCoherentFileSetmap xcm; @@ -229,7 +238,7 @@ int main(int argc, char *argv[]) std::string lastFilename; std::string rep("_"); int controlCount = 0; - + // 'Study Instance UID' // The user is allowed to create his own Study, // keeping the same 'Study Instance UID' for various images @@ -243,16 +252,19 @@ int main(int argc, char *argv[]) strStudyUID = studyUID; } -// while (l) // for each 'Single SerieUID FileSet' //===> Ignore 'Serie UID" -// { + while (l) // for each 'Single SerieUID FileSet' //===> Ignore 'Serie UID" + { + currentSerieWriteDir = ""; nbFiles = l->size() ; if ( l->size() > 2 ) // ignore a Directory with less than 2 images. // Why not ? Just an example, for testing! { // Just not to make too many modif in the code - serieUID = "SingleSerie"; //s->GetCurrentSerieUIDFileSetUID(); + //serieUID = "SingleSerie"; // s->GetCurrentSerieUIDFileSetUID(); + serieUID = s->GetCurrentSerieUIDFileSetUID(); + GDCM_NAME_SPACE::Util::ReplaceSpecChar(serieUID, rep); - + // --- for write if (write || copy) { @@ -278,17 +290,14 @@ int main(int argc, char *argv[]) << serieUID << "] " << nbFiles << " long" << std::endl; std::cout << "-----------------------------------" << std::endl; - -GDCM_NAME_SPACE::Debug::DebugOn(); - if (ori) xcm = s->SplitOnOrientation(l); else if (pos) xcm = s->SplitOnPosition(l); else if (groupelem != 0) { - - std:: cout << GDCM_NAME_SPACE::Global::GetDicts()->GetDefaultPubDict()->GetEntry(groupelem[0],groupelem[1])->GetName() << std::endl; + // Crashes if DataElement not found + //std:: cout << GDCM_NAME_SPACE::Global::GetDicts()->GetDefaultPubDict()->GetEntry(groupelem[0],groupelem[1])->GetName() << std::endl; xcm = s->SplitOnTagValue(l, groupelem[0],groupelem[1] ); } @@ -301,7 +310,7 @@ GDCM_NAME_SPACE::Debug::DebugOn(); { xCoherentName = (*i).first; if (verbose) - std::cout << "xCoherentName = " << xCoherentName << std::endl; + std::cout << "==========================================xCoherentName = " << xCoherentName << std::endl; GDCM_NAME_SPACE::Util::ReplaceSpecChar(xCoherentName, rep); // --- for write if (write || copy) @@ -334,11 +343,11 @@ GDCM_NAME_SPACE::Debug::DebugOn(); // (eg:MIP views) don't have 'Position', now considered as mandatory // --> Activated on user demand. - if (sort) { + if (sort) { s->OrderFileList((*i).second); // sort the XCoherent Fileset std::cout << "ZSpacing for the file set " << s->GetZSpacing() << std::endl; - } + } std::string strSerieUID = GDCM_NAME_SPACE::Util::CreateUniqueUID(); @@ -348,11 +357,9 @@ GDCM_NAME_SPACE::Debug::DebugOn(); { controlCount ++; fileName = (*it2)->GetFileName(); - std::cout << " " << fileName << std::endl; - // --- for write lastFilename = GDCM_NAME_SPACE::Util::GetName( fileName ); - filenameout = xCoherentWriteDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR+ lastFilename; + filenameout = xCoherentWriteDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR+ lastFilename; if (write) { fh = GDCM_NAME_SPACE::FileHelper::New( (*it2) ); @@ -361,7 +368,7 @@ GDCM_NAME_SPACE::Debug::DebugOn(); unsigned int dataSize = fh->GetImageDataRawSize(); uint8_t *imageData = fh->GetImageDataRaw();// somewhat important : Loads the Pixels in memory ! if (!imageData) - std::cout << "fail to read [" << (*it2)->GetFileName() << std::endl; + std::cout << "fail to read [" << (*it2)->GetFileName() << std::endl; fh->SetWriteTypeToDcmExplVR(); fh->SetContentType(GDCM_NAME_SPACE::UNMODIFIED_PIXELS_IMAGE); if (!fh->Write(filenameout)) @@ -379,10 +386,11 @@ GDCM_NAME_SPACE::Debug::DebugOn(); if (verbose) std::cout << "3 " << systemCommand << std::endl; } - std::cout << std::endl; } + std::cout << std::endl; } - // l = s->GetNextSingleSerieUIDFileSet(); //===> Ignore 'Serie UID" + l = s->GetNextSingleSerieUIDFileSet(); + } if ( controlCount == 0 ) std::cout << "No suitable file was found!" << std::endl;