←Select platform

FindFirstDescendant Method

Summary
Finds the first descendant of a parentElement with the specified tag.
Syntax
C#
Objective-C
C++/CLI
public DicomElement FindFirstDescendant( 
   DicomElement parentElement, 
   long tag, 
   bool nextLevelOnly 
) 
- (nullable LTDicomElement *)findFirstDescendant:(LTDicomElement *)parentElement tag:(LTDicomTagCode)tag nextLevelOnly:(BOOL)nextLevelOnly; 
public: 
DicomElement^ FindFirstDescendant(  
   DicomElement^ parentElement, 
   int64 tag, 
   bool nextLevelOnly 
)  

Parameters

parentElement
a parent item in the Data Set.

tag
tag for the item to find.

nextLevelOnly
if set to true, search for items in the next level only; otherwise, search for items recursively in all of the next levels.

Return Value

The first item in the Data Set with the specified Tag, or a null reference (Nothing in VB) if an item with the specified Tag was not found.

Remarks

This method finds the first descendant of the parentElement element that has a DICOM tag equivalent to the specified tag.

The diagram below represents 14 DICOM elements stored in a DICOM dataset.

FindFirstDescendant

Behavior when nextLevelOnly is true

Returns the first item on the next level of parentElement with that has tag equivalent to tag. Elements included in the search include child elements in the next level only.

  • Case 1

    nextLevelOnly is true
    parentElement points to element 1
    Searches elements 2, 8, 11, 12 and returns the first element that has a tag of tag.

  • Case 2

    nextLevelOnly is true
    parentElement points to element 2
    Searches elements 3, 4, 7 and returns the first element that has a tag of tag.

  • Case 3

    nextLevelOnly is true
    parentElement points to element 4
    Searches nodes 5, 6 and returns the first element that has a tag of tag.

  • Case 4

    nextLevelOnly is true
    parentElement points to element 11
    Returns null

Behavior when nextLevelOnly is false

Returns the first item that has a tag equivalent to tag using a pre-order search algorithm rooted at the parentElement.

  • Case 5

    nextLevelOnly is false

    parentElement points to element 1
    Searches elements 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 and returns the first element that has a tag of tag.

  • Case 6

    nextLevelOnly is false

    parentElement points to element 2
    Searches elements 3, 4, 5, 6, 7 and returns the first element that has a tag of tag.

  • Case 7

    nextLevelOnly is false

    parentElement points to element 4
    Searches elements 5, 6 and returns the first element that has a tag of tag.

To find elements in the Data Set with a specific Tag, use the following methods:

To find specific modules in the Data Set, use the following methods:

Example

This example displays searches for TAG_CODE_VALUE values in 'image1.dcm' using the FindFirstDescendant() and FindNextDescendant() methods.

C#
using Leadtools; 
using Leadtools.Dicom; 
 
 
/// 
///  
void DisplayElementValue(DicomDataSet ds, DicomElement element) 
{ 
   if (element != null) 
   { 
      string value = ds.GetStringValue(element, 0); 
      Console.WriteLine(value); 
   } 
} 
 
private void DicomFindFirstDescendantTest() 
{ 
   string file = Path.Combine(LEAD_VARS.ImagesDir, "DICOM", "image1.dcm"); 
   DicomDataSet ds = new DicomDataSet(); 
   ds.Load(file, DicomDataSetLoadFlags.None); 
 
   // Example 1:  
   // Find all occurrences of TAG_CODE_VALUE in the dataset, searching recursively 
   // Output should be: 
   //    T-A2000 
   //    F-10450 
   Console.WriteLine("Example 1"); 
   DicomElement element = ds.FindFirstDescendant(null, DicomTag.CodeValue, false); 
   while (element != null) 
   { 
      DisplayElementValue(ds, element); 
      element = ds.FindNextDescendant(null, element, false); 
   } 
 
   // For the next examples, we need the two parent sequences that contain the code items 
   DicomElement elementAnatomicRegionSequence = ds.FindFirstDescendant(null, DicomTag.AnatomicRegionSequence, true); 
   DicomElement elementPatientOrientationCodeSequence = ds.FindFirstDescendant(null, DicomTag.PatientOrientationCodeSequence, true); 
 
   Assert.IsNotNull(elementAnatomicRegionSequence, elementAnatomicRegionSequence.ToString()); 
   Assert.IsNotNull(elementPatientOrientationCodeSequence, elementPatientOrientationCodeSequence.ToString()); 
 
   // Example 2: 
   // Find all occurrences of TAG_CODE_VALUE with (0028,2218) Anatomic Region Sequence as pParent 
   // Search only the next level 
   // Output should be empty, because TAG_CODE_VALUE are not at next level 
   Console.WriteLine("Example 2"); 
   element = ds.FindFirstDescendant(elementAnatomicRegionSequence, DicomTag.CodeValue, true); 
   while (element != null) 
   { 
      DisplayElementValue(ds, element); 
      element = ds.FindNextDescendant(elementAnatomicRegionSequence, element, true); 
   } 
 
   // Example 3: 
   // Find all occurrences of TAG_CODE_VALUE with (0028,2218) Anatomic Region Sequence as pParent 
   // Search recursively 
   // Output should be 
   //    T-A2000 
   Console.WriteLine("Example 3"); 
   element = ds.FindFirstDescendant(elementAnatomicRegionSequence, DicomTag.CodeValue, false); 
   while (element != null) 
   { 
      DisplayElementValue(ds, element); 
      element = ds.FindNextDescendant(elementAnatomicRegionSequence, element, false); 
   } 
 
   // Example 4: 
   // Find all occurrences of TAG_CODE_VALUE with (0028,2218) Anatomic Region Sequence as pParent 
   // Search recursively 
   // Output should be 
   //    F-10450 
   Console.WriteLine("Example 4"); 
   element = ds.FindFirstDescendant(elementPatientOrientationCodeSequence, DicomTag.CodeValue, false); 
   while (element != null) 
   { 
      DisplayElementValue(ds, element); 
      element = ds.FindNextDescendant(elementPatientOrientationCodeSequence, element, false); 
   } 
 
   Console.WriteLine("Finished"); 
} 
///  
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
Requirements

Target Platforms

Help Version 23.0.2024.8.20
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Dicom Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.