- * \ingroup gdcmDicomDir
- * \brief adds to the HTable and at the end of the Chained List
- * the gdcmEntries (Dicom Elements) corresponding to the given type
- * @param path full path file name(only used when type = GDCM_DICOMDIR_IMAGE
- * @param type gdcmObject type to create (GDCM_DICOMDIR_PATIENT, GDCM_DICOMDIR_STUDY, GDCM_DICOMDIR_SERIE ...)
- * @param header gdcmHeader of the current file
- */
-void gdcmDicomDir::SetElement(std::string &path,gdcmDicomDirType type,gdcmHeader *header)
-{
- std::list<gdcmElement> elemList;
- std::list<gdcmElement>::iterator it;
- guint16 tmpGr, tmpEl;
- gdcmDictEntry *dictEntry;
- gdcmHeaderEntry *entry;
- std::string val;
-
- switch(type)
- {
- case GDCM_DICOMDIR_PATIENT:
- elemList=gdcmGlobal::GetDicomDirElements()->GetDicomDirPatientElements();
- break;
- case GDCM_DICOMDIR_STUDY:
- elemList=gdcmGlobal::GetDicomDirElements()->GetDicomDirStudyElements();
- break;
- case GDCM_DICOMDIR_SERIE:
- elemList=gdcmGlobal::GetDicomDirElements()->GetDicomDirSerieElements();
- break;
- case GDCM_DICOMDIR_IMAGE:
- elemList=gdcmGlobal::GetDicomDirElements()->GetDicomDirImageElements();
- break;
- case GDCM_DICOMDIR_META:
- elemList=gdcmGlobal::GetDicomDirElements()->GetDicomDirMetaElements();
- break;
- default:
- return;
- }
-
- for(it=elemList.begin();it!=elemList.end();++it)
- {
- tmpGr=it->group;
- tmpEl=it->elem;
- dictEntry=GetPubDict()->GetDictEntryByNumber(tmpGr,tmpEl);
- entry=new gdcmHeaderEntry(dictEntry);
- entry->SetOffset(0); // just to avoid missprinting
-
- if(header)
- val=header->GetEntryByNumber(tmpGr,tmpEl);
- else
- val=GDCM_UNFOUND;
-
- if(val==GDCM_UNFOUND)
- {
- if((tmpGr==0x0004) &&(tmpEl==0x1130) ) // File-set ID
- {
- // force to the *end* File Name
- val=GetName(path);
- }
- else if( (tmpGr==0x0004) && (tmpEl==0x1500) ) // Only used for image
- {
- if(header->GetFileName().substr(0,path.length())!=path)
- {
- dbg.Verbose(0, "gdcmDicomDir::SetElement : the base path of file name is incorrect");
- val=header->GetFileName();
- }
- else {
- val=&(header->GetFileName().c_str()[path.length()]);
- }
- }
- else
- {
- val=it->value;
- }
- }
- else
- {
- if (header->GetEntryLengthByNumber(tmpGr,tmpEl)== 0)
- val=it->value;
- }
-
- entry->SetValue(val);
-
- if(dictEntry)
- {
- if(dictEntry->GetGroup()==0xfffe)
- {
- entry->SetLength(entry->GetValue().length());
- }
- else if( (dictEntry->GetVR()=="UL") || (dictEntry->GetVR()=="SL") )
- {
- entry->SetLength(4);
- }
- else if( (dictEntry->GetVR()=="US") || (dictEntry->GetVR()=="SS") )
- {
- entry->SetLength(2);
- }
- else if(dictEntry->GetVR()=="SQ")
- {
- entry->SetLength(0xffffffff);
- }
- else
- {
- entry->SetLength(entry->GetValue().length());
- }
- }
- //AddHeaderEntry(entry); // both in H Table and in chained list
- tagHT.insert( PairHT( entry->GetKey(),entry) );
- listEntries.push_back(entry);
- //wasUpdated = 1; // is private
- }
-}
-/**
- * \ingroup gdcmDicomDir