X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDicomDir.cxx;h=f52529f5ec55046447fa78204dee1c14566a8ba2;hb=a98b52385287bd4c6855758bdaa1d1ce2b7333be;hp=e79743c3492f27a36a65864c95c3bcc33f10cf87;hpb=591ddc3eab16229e7b419051d490d6e3e73408f9;p=gdcm.git diff --git a/src/gdcmDicomDir.cxx b/src/gdcmDicomDir.cxx index e79743c3..f52529f5 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/13 15:08:17 $ - Version: $Revision: 1.180 $ + Date: $Date: 2006/01/18 10:17:40 $ + Version: $Revision: 1.184 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -588,7 +588,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 " ) { @@ -927,51 +927,70 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, if ( tmpGr == 0x0004 ) // never present in File ! { switch (tmpEl) - { - case 0x1130: // File-set ID - // force to the *end* File Name - val = Util::GetName( path ); - break; + { + case 0x1130: // File-set ID + // force to the *end* File Name + val = Util::GetName( path ); + break; - case 0x1500: // Only used for image + case 0x1500: // Only used for image if ( header->GetFileName().substr(0, path.length()) != path ) - { - gdcmWarningMacro( "The base path of file name is incorrect"); - val = header->GetFileName(); + { + gdcmWarningMacro( "The base path of file name is incorrect"); + val = header->GetFileName(); } else - { - val = &(header->GetFileName().c_str()[path.length()+1]); + { + // avoid the first '/' in File name ! + 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; + break; - case 0x1510: // Referenced SOP Class UID in File - referencedVal = header->GetEntryString(0x0008, 0x0016); - // FIXME : probabely something to check - val = referencedVal; - break; + case 0x1510: // Referenced SOP Class UID in File + referencedVal = header->GetEntryString(0x0008, 0x0016); + // FIXME : probabely something to check + val = referencedVal; + break; - case 0x1511: // Referenced SOP Instance UID in File - referencedVal = header->GetEntryString(0x0008, 0x0018); - // FIXME : probabely something to check - val = referencedVal; - break; + case 0x1511: // Referenced SOP Instance UID in File + referencedVal = header->GetEntryString(0x0008, 0x0018); + // FIXME : probabely something to check + val = referencedVal; + break; - case 0x1512: // Referenced Transfer Syntax UID in File - referencedVal = header->GetEntryString(0x0002, 0x0010); - // FIXME : probabely something to check - val = referencedVal; - break; + case 0x1512: // Referenced Transfer Syntax UID in File + referencedVal = header->GetEntryString(0x0002, 0x0010); + // FIXME : probabely something to check + val = referencedVal; + break; - default : - val = it->Value; - } + default : + val = it->Value; + } } + else + { + // If the entry is not found in the Header, don't write its 'value' in the DICOMDIR ! + entry->Delete(); + continue; + } } else { if ( header->GetEntryLength(tmpGr,tmpEl) == 0 ) + { val = it->Value; + // Don't polute the DICOMDIR with empty fields + if (val == "") + { + entry->Delete(); + continue; + } + } } /* FIX later the pb of creating the 'Implementation Version Name'! @@ -986,12 +1005,14 @@ void DicomDir::SetElement(std::string const &path, DicomDirType type, val += Util::GetVersion(); } */ + entry->SetString( val ); // troubles expected when vr=SQ ... if ( type == GDCM_DICOMDIR_META ) // fusible : should never print ! { gdcmDebugMacro("GDCM_DICOMDIR_META ?!? should never print that"); } + si->AddEntry(entry); entry->Delete(); }