コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: MyTreeNode.cs プロジェクト: sakpung/webstudy
 public MyTreeNode(string s, DicomDataSet ds, DicomElement de)
     : base(s)
 {
     m_DS       = ds;
     m_DicomIOD = null;
     m_Element  = de;
 }
コード例 #3
0
ファイル: MyTreeNode.cs プロジェクト: sakpung/webstudy
 public MyTreeNode(string s, DicomDataSet ds, DicomIod dIod)
     : base(s)
 {
     m_DS       = ds;
     m_DicomIOD = dIod;
     m_Element  = null;
 }
コード例 #4
0
ファイル: MyTreeNode.cs プロジェクト: sakpung/webstudy
 public MyTreeNode(string s)
     : base(s)
 {
     m_DS       = null;
     m_Element  = null;
     m_DicomIOD = null;
 }
コード例 #5
0
ファイル: MyTreeView.cs プロジェクト: sakpung/webstudy
        /*
         * 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());
            }
        }
コード例 #6
0
        /*
         * 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);
        }
コード例 #7
0
        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);
                    }
                }
            }
        }
コード例 #8
0
        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();
        }
コード例 #9
0
ファイル: MyTreeView.cs プロジェクト: sakpung/webstudy
        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());
                }
            }
        }
コード例 #10
0
        /*
         * 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());
            }
        }