LDicomDS::InsertKey

#include "ltdic.h"

pDICOMELEMENT LDicomDS::InsertKey(pParent, pszKey, bOptional)

pDICOMELEMENT pParent;

pointer to a DICOMELEMENT structure

L_TCHAR * pszKey;

type of key element to insert

L_BOOL bOptional;

flag that indicates which elements to insert

Inserts a new key element in the Dicom Dir Data Set.

Parameter Description
pParent Pointer to a DICOMELEMENT structure that contains a key element in the Data Set. The new key element will be inserted as a child of this key element.
pszKey Character string that contains the type of key element to find. Possible values are:
  Value Meaning
  "PATIENT" Patient key element
  "STUDY" Study key element
  "SERIES" Series key element
  "IMAGE" Image key element
  "OVERLAY" Overlay key element
  "MODALITY LUT" Modality-LUT key element
  "VOI LUT" VOI-LUT key element
  "CURVE" Curve key element
  "STORED PRINT" Stored print key element
  "RT DOSE" RT dose key element
  "RT STRUCTURE SET" RT structure set key element
  "RT PLAN" RT plan key element
  "RT TREAT RECORD" RT treatment record key element
  "TOPIC" Topic key element
  "VISIT" Visit key element
  "RESULTS" Results key element
  "INTERPRETATION" Interpretation key element
  "STUDY COMPONENT" Study Component key element
  "PRESENTATION" Presentation key element
  "WAVEFORM" Waveform key element
  "SR DOCUMENT" Structured Reporting Document key element
  "PRIVATE" Private key element
  "KEY OBJECT DOC" Key Object Document key element
  "SPECTROSCOPY" Spectroscopy key element
  "RAW DATA" Raw Data key element
  "REGISTRATION" Registration key element
  "FIDUCIAL" Fiducial key element
  "HANGING PROTOCOL" Hanging key element
  "ENCAP DOC" Encapsulated Document key element
  "HL7 STRUC DOC" HL7 Structured Document key element
  "VALUE MAP" Real World Value Mapping key element
  "STEREOMETRIC" Stereometric Relationship key element

 

bOptional Flag that indicates which parts of the key element to insert. Possible values are:
  Value Meaning
  TRUE Insert all parts of the specified key element.
  FALSE Insert only the mandatory parts of the specified key element.

Returns

!NULL

A pointer to a DICOMELEMENT structure containing the newly inserted item.

NULL

Not enough memory to insert the item.

Comments

The newly inserted key element is inserted as a child of pParent.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

Platforms

Win32, x64

See Also

Functions:

LDicomDS::GetValueKey, LDicomDS::DeleteKey, LDicomDS::GetRootKey, LDicomDS::GetParentKey, LDicomDS::GetChildKey, LDicomDS::GetFirstKey, LDicomDS::GetLastKey, LDicomDS::GetPrevKey, LDicomDS::GetNextKey, LDicomDS::GetValueKey, LDicomDS::FindFirstKey, LDicomDS::FindLastKey, LDicomDS::FindPrevKey, LDicomDS::FindNextKey

Topics:

Working with Basic Directory Key Elements

 

How to Disable the Automatic Loading of the default DICOM IOD Table

Example

#define MAKE_IMAGE_PATH(pFileName) TEXT("C:\\Users\\Public\\Documents\\LEADTOOLS Images\\")pFileName 
void DisplayKeyInfo1(LDicomDS *pDicomDS) 
{ 
   CString strMsg; 
   CString strTmp; 
   LDicomDS DicomDS; 
   //move to root KEY (PATIENT) 
   pDICOMELEMENT pRootKey = pDicomDS->GetFirstKey(NULL, FALSE); 
   CString strRootKey = pDicomDS->GetValueKey(pRootKey); 
   strMsg.Format(TEXT("Root Key[%s]\n"), strRootKey); 
   //move to child KEY (STUDY) 
   pDICOMELEMENT pStudyKey  = pDicomDS->GetChildKey(pRootKey); 
   CString strStudyKey = pDicomDS->GetValueKey(pStudyKey); 
   strTmp.Format(TEXT("Root Key[%s]\n"), strStudyKey); 
   strMsg = strMsg + strTmp; 
   //move to child KEY (SERIES) 
   pDICOMELEMENT pSeriesKey = pDicomDS->GetChildKey(pStudyKey); 
   //find first SERIES key 
   pDICOMELEMENT pElement = pDicomDS->FindFirstKey(pSeriesKey, TEXT("SERIES"), TRUE); 
   pElement = pDicomDS->GetChildElement(pElement, TRUE); 
   pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
   strTmp.Format(TEXT("First Series[%s]\n"), pDicomDS->GetStringValue(pElement, 0, 1) ); 
   strMsg = strMsg + strTmp; 
   //find next series key 
   pElement = pDicomDS->FindNextKey(pElement,  TRUE); 
   pElement = pDicomDS->GetChildElement(pElement, TRUE); 
   pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
   strTmp.Format(TEXT("Next Series[%s]\n"), pDicomDS->GetStringValue(pElement, 0, 1) ); 
   strMsg = strMsg + strTmp; 
   //find last SERIES key 
   pElement = pDicomDS->FindLastKey(pElement, TEXT("SERIES"), TRUE); 
   pElement = pDicomDS->GetChildElement(pElement, TRUE); 
   pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
   strTmp.Format(TEXT("Last Series[%s]\n"), pDicomDS->GetStringValue(pElement, 0, 1) ); 
   strMsg = strMsg + strTmp; 
   //find previous SERIES key 
   pElement = pDicomDS->FindPrevKey(pElement, TRUE); 
   pElement = pDicomDS->GetChildElement(pElement, TRUE); 
   pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
   strTmp.Format(TEXT("Previous Series[%s]\n"), pDicomDS->GetStringValue(pElement, 0, 1) ); 
   strMsg = strMsg + strTmp; 
   //Find root KEY another way 
   pRootKey = pDicomDS->GetRootKey(pElement); 
   strRootKey = pDicomDS->GetValueKey(pRootKey); 
   strTmp.Format(TEXT("Root Key[%s]\n"), strRootKey); 
   strMsg = strMsg + strTmp; 
   AfxMessageBox(strMsg); 
} 
void DisplayKeyInfo2(LDicomDS *pDicomDS) 
{ 
   CString strMsg; 
   CString strTmp; 
   LDicomDS DicomDS; 
   //move to root KEY (PATIENT) 
   pDICOMELEMENT pRootKey = pDicomDS->GetFirstKey(NULL, FALSE); 
   CString strRootKey = pDicomDS->GetValueKey(pRootKey); 
   strMsg.Format(TEXT("Root Key[%s]\n"), strRootKey); 
   //move to child KEY (STUDY) 
   pDICOMELEMENT pStudyKey  = pDicomDS->GetChildKey(pRootKey); 
   CString strStudyKey = pDicomDS->GetValueKey(pStudyKey); 
   strTmp.Format(TEXT("Root Key[%s]\n"), strStudyKey); 
   strMsg = strMsg + strTmp; 
   //move to child KEY (SERIES) 
   pDICOMELEMENT pSeriesKey = pDicomDS->GetChildKey(pStudyKey); 
   //find first SERIES key 
   pDICOMELEMENT pElement = pDicomDS->GetFirstKey(pSeriesKey, TRUE); 
   pElement = pDicomDS->GetChildElement(pElement, TRUE); 
   pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
   strTmp.Format(TEXT("First Series[%s]\n"), pDicomDS->GetStringValue(pElement, 0, 1) ); 
   strMsg = strMsg + strTmp; 
   //find next series key 
   pElement = pDicomDS->GetNextKey(pElement,  TRUE); 
   pElement = pDicomDS->GetChildElement(pElement, TRUE); 
   pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
   strTmp.Format(TEXT("Next Series[%s]\n"), pDicomDS->GetStringValue(pElement, 0, 1) ); 
   strMsg = strMsg + strTmp; 
   //find last SERIES key 
   pElement = pDicomDS->GetLastKey(pElement, TRUE); 
   pElement = pDicomDS->GetChildElement(pElement, TRUE); 
   pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
   strTmp.Format(TEXT("Last Series[%s]\n"), pDicomDS->GetStringValue(pElement, 0, 1) ); 
   strMsg = strMsg + strTmp; 
   //find previous SERIES key 
   pElement = pDicomDS->GetPrevKey(pElement, TRUE); 
   pElement = pDicomDS->GetChildElement(pElement, TRUE); 
   pElement = pDicomDS->FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
   strTmp.Format(TEXT("Previous Series[%s]\n"), pDicomDS->GetStringValue(pElement, 0, 1) ); 
   strMsg = strMsg + strTmp; 
   //Find root KEY another way 
   pRootKey = pDicomDS->GetRootKey(pElement); 
   strRootKey = pDicomDS->GetValueKey(pRootKey); 
   strTmp.Format(TEXT("Root Key[%s]\n"), strRootKey); 
   strMsg = strMsg + strTmp; 
   AfxMessageBox(strMsg); 
} 
L_INT LDicomDS_InsertKeyExample() 
{ 
   L_INT          nRet; 
   CString        strMsg; 
   CString        strTmp; 
   LDicomDS       DicomDS; 
   pDICOMELEMENT  pElement, pKey; 
   DicomDS.InitDS(CLASS_BASIC_DIRECTORY, 0); 
   //insert some keys 
   pKey = DicomDS.InsertKey(NULL, TEXT("PATIENT"), TRUE); //insert PATIENT level key 
   pKey = DicomDS.InsertKey(pKey, TEXT("STUDY"), TRUE);   //insert STUDY level key 
   //insert 5 SERIES level keys and some data 
   for (int i = 0 ; i < 5 ; i++) 
   { 
      pKey = DicomDS.InsertKey(pKey, TEXT("SERIES"), TRUE); 
      pElement = DicomDS.GetChildElement(pKey, FALSE); 
      pElement = DicomDS.FindFirstElement(pElement, TAG_REFERENCED_FILE_ID, TRUE); 
      strTmp.Format(TEXT("%d"), i); 
      DicomDS.SetStringValue(pElement, (L_TCHAR*) (LPCTSTR)strTmp, 1, DICOM_CHARACTER_SET_DEFAULT); 
      pKey = DicomDS.GetParentKey(pKey); 
   } 
   //DisplayKeyInfo1 displays the information in the tree 
   DisplayKeyInfo1(&DicomDS); 
   nRet = DicomDS.SaveDS(MAKE_IMAGE_PATH(TEXT("one.dcm")), 0); 
   if(nRet != DICOM_SUCCESS) 
      return nRet; 
   //find last SERIES and delete it 
   pElement = DicomDS.GetChildKey(pKey); 
   pKey = DicomDS.FindLastKey(pElement, TEXT("SERIES"), TRUE); 
   DicomDS.DeleteKey(pKey); 
   AfxMessageBox(TEXT("Deleting Last Series Key...")); 
   //DisplayKeyInfo2 displays the same information as DisplayKeyInfo1 using different functions 
   DisplayKeyInfo2(&DicomDS); 
   nRet = DicomDS.SaveDS(MAKE_IMAGE_PATH(TEXT("two.dcm")), 0); 
   if(nRet != DICOM_SUCCESS) 
      return nRet; 
   return DICOM_SUCCESS; 
} 

Help Version 19.0.2017.10.27
Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.
LEADTOOLS DICOM C++ Class Library Help