X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src%2FgdcmDicomDir.cxx;h=f52529f5ec55046447fa78204dee1c14566a8ba2;hb=23bf35e484c4c7de2386af04dfbdc7f41ee431bb;hp=a5902b911e288bf7fe00107cedc9ca560fc56645;hpb=63b1baaa4ffc54e72247d80978c79456618281ce;p=gdcm.git diff --git a/src/gdcmDicomDir.cxx b/src/gdcmDicomDir.cxx index a5902b91..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/11/30 11:41:35 $ - Version: $Revision: 1.179 $ + 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 @@ -353,7 +353,7 @@ bool DicomDir::Write(std::string const &fileName) { int i; uint16_t sq[6] = { 0x0004, 0x1220, 0x5153, 0x0000, 0xffff, 0xffff }; - uint16_t sqt[4]= { 0xfffe, 0xe0dd, 0xffff, 0xffff }; + uint16_t sqt[4]= { 0xfffe, 0xe0dd, 0x0000, 0x0000 }; std::ofstream *fp = new std::ofstream(fileName.c_str(), std::ios::out | std::ios::binary); @@ -387,7 +387,7 @@ bool DicomDir::Write(std::string const &fileName) // force writing Sequence Delimitation Item for(i=0;i<4;++i) { - binary_write(*fp, sqt[i]); // fffe e0dd ffff ffff + binary_write(*fp, sqt[i]); // fffe e0dd 0000 0000 } fp->close(); @@ -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(); }