X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Example%2FSplitIntoXCoherentDirectoriesIgnoreSerieUID.cxx;fp=Example%2FSplitIntoXCoherentDirectoriesIgnoreSerieUID.cxx;h=bec07d82fc046fbf6fa44669c253048726067d6e;hb=6fc9a59ce58ba4bb71d63a57e6b1ef2c3c87292a;hp=5b5a22633b73347bd44d98f301fd084f7e4fa0b0;hpb=80075429b6ab9db9e885b9bb9ae1427530c7bef8;p=gdcm.git diff --git a/Example/SplitIntoXCoherentDirectoriesIgnoreSerieUID.cxx b/Example/SplitIntoXCoherentDirectoriesIgnoreSerieUID.cxx index 5b5a2263..bec07d82 100755 --- a/Example/SplitIntoXCoherentDirectoriesIgnoreSerieUID.cxx +++ b/Example/SplitIntoXCoherentDirectoriesIgnoreSerieUID.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: SplitIntoXCoherentDirectoriesIgnoreSerieUID.cxx,v $ Language: C++ - Date: $Date: 2007/10/01 09:56:42 $ - Version: $Revision: 1.1 $ + Date: $Date: 2009/05/28 15:44:34 $ + Version: $Revision: 1.2 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -34,7 +34,7 @@ int main(int argc, char *argv[]) "usage: SplitIntoCoherentFileSetIgnoreSerieUID{dirin=inputDirectoryName} ", " dirout=outputDirectoryName ", " { tag=group-elem | pos | ori } [sort] ", - " [{ write | copy }] ", + " [{ write | copy }] ", " [ { [noshadowseq] | [noshadow][noseq] } ] [debug] ", " [studyUID = ] ", " dirin : user wants to analyze *all* the files ", @@ -89,10 +89,18 @@ int main(int argc, char *argv[]) bool pos = ( 0 != am->ArgMgrDefined("pos") ); bool ori = ( 0 != am->ArgMgrDefined("ori") ); bool sort = ( 0 != am->ArgMgrDefined("sort") ); + bool copy = ( 0 != am->ArgMgrDefined("copy") ); 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; + } + if( (tag && (pos || ori)) || (pos && (tag || ori)) || (ori && (tag || pos)) ) { std::cout << " POS, ORI and TAG are mutually exclusive" << std::endl; @@ -133,7 +141,6 @@ 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(); @@ -155,14 +162,14 @@ int main(int argc, char *argv[]) f->SetMaxSizeLoadEntry(0x7fff); // load any length f->SetFileName( *it ); f->Load(); - l->push_back(f); + l->push_back(f); } /* ===========================================================================================*/ std::string systemCommand; - std::string filenameout; - if (write) { + std::string filenameout; + if (write) { if (verbose) std::cout << "Check for output directory :[" << dirNameout << "]." < End of checking supposed-to-be-directory names int nbFiles; @@ -201,26 +207,26 @@ 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();//===> Ignore 'Serie UID" GDCM_NAME_SPACE::XCoherentFileSetmap xcm; std::string serieUID; std::string currentSerieWriteDir = ""; std::string xCoherentWriteDir = ""; - std::string xCoherentName = ""; + std::string xCoherentName = ""; std::string serieDirectory; 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 // The user may add images to a 'Manufacturer Study', // adding new Series to an already existing Study std::string strStudyUID; - if ( !userDefinedStudy) + if ( !userDefinedStudy ) strStudyUID = GDCM_NAME_SPACE::Util::CreateUniqueUID(); else strStudyUID = studyUID; @@ -233,9 +239,10 @@ int main(int argc, char *argv[]) // Why not ? Just an example, for testing! { // Just not to make too many modif in the code - serieUID = "aaaa"; //s->GetCurrentSerieUIDFileSetUID(); + //serieUID = "SingleSerie"; // s->GetCurrentSerieUIDFileSetUID(); + serieUID = s->GetCurrentSerieUIDFileSetUID(); GDCM_NAME_SPACE::Util::ReplaceSpecChar(serieUID, rep); - + // --- for write if (write) { @@ -267,19 +274,19 @@ int main(int argc, char *argv[]) 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; xcm = s->SplitOnTagValue(l, groupelem[0],groupelem[1] ); } - + GDCM_NAME_SPACE::FileHelper *fh; - + for (GDCM_NAME_SPACE::XCoherentFileSetmap::iterator i = xcm.begin(); i != xcm.end(); ++i) { - xCoherentName = (*i).first; + xCoherentName = (*i).first; if (verbose) std::cout << "xCoherentName = " << xCoherentName << std::endl; GDCM_NAME_SPACE::Util::ReplaceSpecChar(xCoherentName, rep); @@ -313,7 +320,7 @@ int main(int argc, char *argv[]) // OrderFileList() causes trouble, since some files // (eg:MIP views) don't have 'Position', now considered as mandatory // --> Activated on user demand. - + if (sort) { s->OrderFileList((*i).second); // sort the XCoherent Fileset std::cout << "ZSpacing for the file set " << s->GetZSpacing() @@ -321,7 +328,7 @@ int main(int argc, char *argv[]) } std::string strSerieUID = GDCM_NAME_SPACE::Util::CreateUniqueUID(); - + for (GDCM_NAME_SPACE::FileList::iterator it2 = ((*i).second)->begin(); it2 != ((*i).second)->end(); ++it2) @@ -333,32 +340,32 @@ int main(int argc, char *argv[]) // --- for write if (write) { - fh = GDCM_NAME_SPACE::FileHelper::New( (*it2) ); + fh = GDCM_NAME_SPACE::FileHelper::New( (*it2) ); fh->SetKeepOverlays( true ); fh->InsertEntryString(strSerieUID,0x0020,0x000e,"UI"); 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; lastFilename = GDCM_NAME_SPACE::Util::GetName( fileName ); filenameout = xCoherentWriteDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR+ lastFilename; //systemCommand = "cp " + fileName + " " + filenameout; //system( systemCommand.c_str()); - + fh->SetWriteTypeToDcmExplVR(); fh->SetContentType(GDCM_NAME_SPACE::UNMODIFIED_PIXELS_IMAGE); if (!fh->Write(filenameout)) { std::cout << "Fail to write :[" << filenameout << "]" << std::endl; - } + } if (verbose) std::cout << "3 " << systemCommand << std::endl; fh->Delete(); - } - // --- end for write + } + // --- end for write } - std::cout << std::endl; + std::cout << std::endl; } } // l = s->GetNextSingleSerieUIDFileSet(); //===> Ignore 'Serie UID" @@ -366,7 +373,7 @@ int main(int argc, char *argv[]) if ( controlCount == 0 ) std::cout << "No suitable file was found!" << std::endl; - + s->Delete(); /*===============================================================================================*/ return 0;