private void FillSubTree(DicomIod iod, TreeNode ParentNode) { TreeNode node; DicomIod tempIOD; if (ParentNode != null) { node = ParentNode.Nodes.Add(iod.Name); } else { node = treeViewIOD.Nodes.Add(iod.Name); } node.Tag = iod; tempIOD = DicomIodTable.Instance.GetChild(iod); if (tempIOD != null) { FillSubTree(tempIOD, node); } tempIOD = DicomIodTable.Instance.GetNext(iod, true); if (tempIOD != null) { FillSubTree(tempIOD, ParentNode); } }
public MyTreeNode(string s, DicomDataSet ds, DicomElement de) : base(s) { m_DS = ds; m_DicomIOD = null; m_Element = de; }
public MyTreeNode(string s, DicomDataSet ds, DicomIod dIod) : base(s) { m_DS = ds; m_DicomIOD = dIod; m_Element = null; }
public MyTreeNode(string s) : base(s) { m_DS = null; m_Element = null; m_DicomIOD = null; }
/* * Recursively add children of an element TreeNode */ private void AddChildrenOfElement(DicomDataSet ds, MyTreeNode parentNode, DicomElement parentElement) { try { DicomElement currentElement = ds.GetChildElement(parentElement, true); int parentNodeChildCount = 0; while (currentElement != null) { DicomIod dIod = DicomIodTable.Instance.Find(null, parentElement.Tag, DicomIodType.Element, false); // Determine the element tag DicomTag tag; long tagValue; #if (LTV15_CONFIG) if (currentElement.Tag != DemoDicomTags.Undefined) { tag = DicomTagTable.Instance.Find(currentElement.Tag); tagValue = (long)currentElement.Tag; } else { tag = DicomTagTable.Instance.Find(currentElement.UserTag); tagValue = currentElement.UserTag; } #else tag = DicomTagTable.Instance.Find(currentElement.Tag); tagValue = (long)currentElement.Tag; #endif // Add new element TreeNode parentNode.Nodes.Add( new MyTreeNode(String.Format("{0:X4}:{1:X4} - {2}", Utils.GetGroup(tagValue), Utils.GetElement(tagValue), tag.Name), ds, currentElement)); // Check to see if the element has children if (ds.GetChildElement(currentElement, true) != null) { parentNode.Nodes[parentNodeChildCount].ImageIndex = (int)MyIconIndex.Sequence; parentNode.Nodes[parentNodeChildCount].SelectedImageIndex = (int)MyIconIndex.Sequence; // Recursively add children of this element AddChildrenOfElement(ds, (MyTreeNode)parentNode.Nodes[parentNode.Nodes.Count - 1], currentElement); } currentElement = ds.GetNextElement(currentElement, true, true); parentNodeChildCount++; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
/* * Returns the next empty type 1 mandatory element in the dataset */ public DicomElement GetNextEmptyElementType1(DicomElement element, DicomClassType nClass, ref string strTag, ref string strDesc) { if (element == null) { return(null); } try { DicomIod IODClass = DicomIodTable.Instance.FindClass(nClass); if (IODClass != null) { DicomIod IOD; element = GetNextElement(element, false, true); long tagValue; while (element != null) { // Get the IOD class of the element #if (LTV15_CONFIG) if (element.Tag != DemoDicomTags.Undefined) { IOD = DicomIodTable.Instance.Find(IODClass, element.Tag, DicomIodType.Element, false); tagValue = (long)element.Tag; } else { IOD = DicomIodTable.Instance.Find(IODClass, (DicomTagType)element.UserTag, DicomIodType.Element, false); tagValue = element.UserTag; } #else IOD = DicomIodTable.Instance.Find(IODClass, element.Tag, DicomIodType.Element, false); tagValue = (long)element.Tag; #endif // if the element is an empty type 1 mandatory element, update the tag string and return // the element if ((IOD != null) && (IOD.Usage == DicomIodUsageType.Type1MandatoryElement) && (element.Length == 0) && (element.Length != ELEMENT_LENGTH_MAX)) { strTag = String.Format("{0:X4}:{1:X4}", Utils.GetGroup(tagValue), Utils.GetElement(tagValue)); strDesc = IOD.Name; return(element); } element = GetNextElement(element, false, true); } } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.ToString()); } return(element); }
void RemoveClasses() { DicomIod pClass = null; for (DicomClassType nClass = DicomClassType.CRImageStorage; nClass < DicomClassType.Max; nClass++) { if (!IsSupportedIod(nClass)) { pClass = DicomIodTable.Instance.FindClass(nClass); if (pClass != null) { DicomIodTable.Instance.Delete(pClass); } } } }
private void treeViewIOD_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { DicomIod iod = treeViewIOD.SelectedNode.Tag as DicomIod; if (iod == null) { return; } textBoxDescription.Text = iod.Description; if (iod.TagCode == DemoDicomTags.Undefined) { textBoxCode.Text = ""; } else { textBoxCode.Text = string.Format("{0:x4}:{1:x4}", Utils.GetGroup((long)iod.TagCode), Utils.GetElement((long)iod.TagCode)); } textBoxUsage.Text = iod.Usage.ToString(); textBoxType.Text = iod.Type.ToString(); }
public void BuildTreeFromDataset(DicomDataSet ds, bool IsMWLDS) { if (Globals._closing == true || this.Disposing || this.IsDisposed) { return; } if (InvokeRequired) { Invoke(new BuildTreeFromDatasetDelegate(BuildTreeFromDataset), ds, IsMWLDS); } else { try { TreeNodeCollection IODClassNodes; if (IsMWLDS) { // Add a root level node since there could be multiple MWL datasets to be displayed string parentNodeString = String.Format( "{0:D3} Modality Work List - {1} ", (Nodes.Count + 1), Utils.GetStringValue(ds, DemoDicomTags.Modality, false)); MyTreeNode rootNode = new MyTreeNode(parentNodeString, ds); Nodes.Add(rootNode); rootNode.ImageIndex = (int)MyIconIndex.Worklist; rootNode.SelectedImageIndex = (int)MyIconIndex.Worklist; IODClassNodes = rootNode.Nodes; } else { // Use the tree's root for IOD classes IODClassNodes = Nodes; } // Insert nodes for IOD classes for (int i = 0; i < ds.ModuleCount; i++) { DicomModule dm = ds.FindModuleByIndex(i); DicomIod dIod = DicomIodTable.Instance.FindModule(ds.InformationClass, dm.Type); if (dIod != null) { IODClassNodes.Add( new MyTreeNode(dIod.Name, ds, dIod)); IODClassNodes[i].ImageIndex = (int)MyIconIndex.Folder; IODClassNodes[i].SelectedImageIndex = (int)MyIconIndex.Folder; } else { IODClassNodes.Add( new MyTreeNode("UNKNOWN")); IODClassNodes[i].ImageIndex = (int)MyIconIndex.Missing; IODClassNodes[i].SelectedImageIndex = (int)MyIconIndex.Missing; } // Insert nodes for the elements within the current IOD class for (int j = 0; j < dm.Elements.Length; j++) { // Determine the element tag DicomTag tag; long tagValue; #if (LTV15_CONFIG) if (dm.Elements[j].Tag != DemoDicomTags.Undefined) { tag = DicomTagTable.Instance.Find(dm.Elements[j].Tag); tagValue = (long)dm.Elements[j].Tag; } else { tag = DicomTagTable.Instance.Find(dm.Elements[j].UserTag); tagValue = dm.Elements[j].UserTag; } #else tag = DicomTagTable.Instance.Find(dm.Elements[j].Tag); tagValue = (long)dm.Elements[j].Tag; #endif // Add new element TreeNode IODClassNodes[i].Nodes.Add( new MyTreeNode(String.Format("{0:X4}:{1:X4} - {2}", Utils.GetGroup(tagValue), Utils.GetElement(tagValue), tag.Name), ds, dm.Elements[j])); IODClassNodes[i].Nodes[j].ImageIndex = (int)MyIconIndex.Element; IODClassNodes[i].Nodes[j].SelectedImageIndex = (int)MyIconIndex.Element; // Check to see if the element has children if (ds.GetChildElement(dm.Elements[j], true) != null) { IODClassNodes[i].Nodes[j].ImageIndex = (int)MyIconIndex.Sequence; IODClassNodes[i].Nodes[j].SelectedImageIndex = (int)MyIconIndex.Sequence; // Recursively add children of this element AddChildrenOfElement(ds, (MyTreeNode)IODClassNodes[i].Nodes[j], dm.Elements[j]); } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }
/* * Traverse dataset as a list, and for each empty element do the following: * Type 3 sequence: if entire sequence empty, delete the sequence * Type 3 element: delete element */ public void DeleteEmptyElementsType3(DicomClassType nClass) { try { DicomElement PrevElement = null; DicomElement element; DicomIod IODClass = DicomIodTable.Instance.FindClass(nClass); if (IODClass != null) { DicomIod IOD; element = GetFirstElement(null, false, true); PrevElement = null; while (element != null) { // Get the IOD class of the element. #if (LTV15_CONFIG) if (element.Tag != DemoDicomTags.Undefined) { IOD = DicomIodTable.Instance.Find(IODClass, element.Tag, DicomIodType.Element, false); } else { IOD = DicomIodTable.Instance.Find(IODClass, (DicomTagType)element.UserTag, DicomIodType.Element, false); } #else IOD = DicomIodTable.Instance.Find(IODClass, element.Tag, DicomIodType.Element, false); #endif if ((IOD != null) && (IOD.Usage == DicomIodUsageType.OptionalElement)) { if (element.Length == ELEMENT_LENGTH_MAX) // Sequence { bool bEmptySequence = IsEmptySequence(element); if (bEmptySequence) { DeleteElement(element); element = PrevElement; // if deleting the first element, PrevElement is null, // therefore we must call GetFirstElement if (element == null) { element = GetFirstElement(null, false, true); } } } else if (element.Length == 0) // Empty element { DeleteElement(element); element = PrevElement; // if deleting the first element, PrevElement is null, // therefore we must call GetFirstElement if (element == null) { element = GetFirstElement(null, false, true); } } } PrevElement = element; element = GetNextElement(element, false, true); } } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.ToString()); } }