X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDicomDir.cxx;h=6c42fea238370cea60848fd12c63a526b885273d;hb=ea7eafb27b49a3d467d3d752af40db6e94ebdd13;hp=08be083ff00dcba018619cc0f06969b8cdd29fa4;hpb=fa58db03afe3f478ac949e176a273a5de4345496;p=gdcm.git diff --git a/src/gdcmDicomDir.cxx b/src/gdcmDicomDir.cxx index 08be083f..6c42fea2 100644 --- a/src/gdcmDicomDir.cxx +++ b/src/gdcmDicomDir.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDir.cxx,v $ Language: C++ - Date: $Date: 2005/12/21 14:50:59 $ - Version: $Revision: 1.182 $ + Date: $Date: 2006/05/30 08:10:19 $ + Version: $Revision: 1.189 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -53,6 +53,11 @@ #else # include #endif + +#if defined(__BORLANDC__) + #include // for memset +#endif + // ---------------------------------------------------------------------------- // Note for future developpers // ---------------------------------------------------------------------------- @@ -124,6 +129,38 @@ DicomDir::DicomDir() NewMeta(); } +//#ifndef GDCM_LEGACY_REMOVE +/** + * \brief Constructor Parses recursively the directory and creates the DicomDir + * or uses an already built DICOMDIR, depending on 'parseDir' value. + * @param fileName name + * - of the root directory (parseDir = true) + * - of the DICOMDIR (parseDir = false) + * @param parseDir boolean + * - true if user passed an entry point + * and wants to explore recursively the directories + * - false if user passed an already built DICOMDIR file + * and wants to use it + * @deprecated use : new DicomDir() + [ SetLoadMode(lm) + ] SetDirectoryName(name) + * or : new DicomDir() + SetFileName(name) + */ + /* +DicomDir::DicomDir(std::string const &fileName, bool parseDir ): + Document( ) +{ + // At this step, Document constructor is already executed, + // whatever user passed (either a root directory or a DICOMDIR) + // and whatever the value of parseDir was. + // (nothing is cheked in Document constructor, to avoid overhead) + + ParseDir = parseDir; + SetLoadMode (LD_ALL); // concerns only dicom files + SetFileName( fileName ); + Load( ); +} +*/ +//#endif + /** * \brief Canonical destructor */ @@ -154,6 +191,30 @@ bool DicomDir::Load( ) } return DoTheLoadingJob( ); } +//#ifndef GDCM_LEGACY_REMOVE +/** + * \brief Loader. (DEPRECATED : kept not to break the API) + * @param fileName file to be open for parsing + * @return false if file cannot be open or no swap info was found, + * or no tag was found. + * @deprecated use SetFileName(n) + Load() instead + */ + /* +bool DicomDir::Load(std::string const &fileName ) +{ + // We should clean out anything that already exists. + Initialize(); // sets all private fields to NULL + + SetFileName( fileName ); + if (!ParseDir) + { + if ( ! this->Document::Load( ) ) + return false; + } + return DoTheLoadingJob( ); +} +*/ +//#endif /** * \brief Does the Loading Job (internal use only) @@ -203,11 +264,11 @@ bool DicomDir::DoTheLoadingJob( ) const char *cwd = getcwd(buf, 2048); if( cwd ) { - SetFileName( buf ); // will be converted into a string + SetFileName( buf ); // will be converted into a string } else { - gdcmErrorMacro( "Path was too long to fit on 2048 bytes" ); + gdcmErrorMacro( "Path was too long to fit on 2048 bytes" ); } } NewMeta(); @@ -588,7 +649,7 @@ void DicomDir::CreateDicomDir() // A decent DICOMDIR has much more images than series, // more series than studies, and so on. - // This is the right order to preform the tests + // This is the right order to perform the tests if ( v == "IMAGE " ) { @@ -832,7 +893,7 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, ListDicomDirElem elemList; ListDicomDirElem::const_iterator it; uint16_t tmpGr, tmpEl; - DictEntry *dictEntry; + //DictEntry *dictEntry; DataEntry *entry; std::string val; SQItem *si; @@ -888,9 +949,9 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, default: return; } - + // FIXME : troubles found when it's a SeqEntry - + // removed all the seems-to-be-useless stuff about Referenced Image Sequence // to avoid further troubles // imageElem 0008 1140 "" // Referenced Image Sequence @@ -905,17 +966,17 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, { tmpGr = it->Group; tmpEl = it->Elem; - dictEntry = GetPubDict()->GetEntry(tmpGr, tmpEl); - - entry = DataEntry::New( dictEntry ); + //dictEntry = GetPubDict()->GetEntry(tmpGr, tmpEl); + //entry = DataEntry::New( dictEntry ); + + entry = DataEntry::New(tmpGr, tmpEl, GDCM_VRUNKNOWN); /// \todo : modify dicomelements file, to store VR entry->SetOffset(0); // just to avoid further missprinting if ( header ) { // NULL when we Build Up (ex nihilo) a DICOMDIR // or when we add the META elems - - val = header->GetEntryString(tmpGr, tmpEl); + val = header->GetEntryString(tmpGr, tmpEl); } else { @@ -923,7 +984,7 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, } if ( val == GDCM_UNFOUND) - { + { if ( tmpGr == 0x0004 ) // never present in File ! { switch (tmpEl) @@ -942,8 +1003,11 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, else { // avoid the first '/' in File name ! - //val = &(header->GetFileName().c_str()[path.length()]); - val = &(header->GetFileName().c_str()[path.length()+1]); + if ( header->GetFileName().c_str()[path.length()] + == GDCM_FILESEPARATOR ) + val = &(header->GetFileName().c_str()[path.length()+1]); + else + val = &(header->GetFileName().c_str()[path.length()]); } break; @@ -1002,8 +1066,8 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, val += Util::GetVersion(); } */ - if (val == "") - entry->SetString( val ); // troubles expected when vr=SQ ... + + entry->SetString( val ); // troubles expected when vr=SQ ... if ( type == GDCM_DICOMDIR_META ) // fusible : should never print ! {