Example #1
0
        /// <summary>
        /// Gets a sequence item.
        /// </summary>
        /// <remarks>
        /// This method is only meaningfull if this instance has a VR SQ.
        /// </remarks>
        /// <param name="oneBasedIndex">The one based index.</param>
        /// <returns>The sequence item.</returns>
        public override SequenceItem GetItem(int oneBasedIndex)
        {
            SequenceItem sequenceItem = null;

            if (this.VR == VR.SQ)
            {
                if ((oneBasedIndex >= 1) && (oneBasedIndex <= ItemCount))
                {
                    TagSequence sequenceItemTagSequence = TagSequence.Clone();
                    Tag         lastTag = sequenceItemTagSequence.Tags[sequenceItemTagSequence.Tags.Count - 1] as Tag;
                    lastTag.IndexNumber = oneBasedIndex;

                    sequenceItem = new SequenceItem(sequenceItemTagSequence, DvtkDataSequence[oneBasedIndex - 1]);
                }
                else
                {
                    sequenceItem = new SequenceItem();
                    Thread.WriteWarningCurrentThread("Getting sequence item " + oneBasedIndex.ToString() + " from attribute with tag sequence " + TagSequence.ToString() + " containing " + ItemCount.ToString() + " items. Returning an empty sequence item.");
                }
            }
            else
            {
                sequenceItem = new SequenceItem();
                Thread.WriteWarningCurrentThread("Getting a sequence item from attribute with tag sequence " + TagSequence.ToString() + " and VR " + this.VR.ToString() + ". Returning an empty sequence item.");
            }

            return(sequenceItem);
        }
Example #2
0
        /// <summary>
        /// Get all attributes that are refered to by this tag sequence.
        ///
        /// Precondition for the supplied TagSequence:
        /// All but the last tag contains an index.
        /// The last tag doesn't contain an index.
        /// </summary>
        /// <param name="tagSequence">The tag sequence.</param>
        /// <returns>The attributes.</returns>
        internal AttributeCollection GetAttributes(TagSequence tagSequence)
        {
            AttributeCollection attributeCollection = new AttributeCollection();

            Tag firstTag = (tagSequence.Tags[0]) as Tag;

            Attribute firstAttribute = GetAttribute(firstTag.AsUInt32);

            if (firstAttribute is InvalidAttribute)
            {
                // Do nothing, just return an empty set.
            }
            else
            {
                if (tagSequence.Tags.Count > 1)
                // Expecting a sequence attribute as first tag.
                {
                    if (firstAttribute.VR == VR.SQ)
                    {
                        int fromIndex = 0;
                        int toIndex   = 0;

                        if (firstTag.ContainsWildcardIndex)
                        {
                            fromIndex = 1;
                            toIndex   = firstAttribute.ItemCount;
                        }
                        else
                        {
                            fromIndex = firstTag.IndexNumber;
                            toIndex   = firstTag.IndexNumber;
                        }

                        TagSequence itemTagSequence = tagSequence.Clone();
                        itemTagSequence.Tags.RemoveAt(0);

                        for (int index = fromIndex; index <= toIndex; index++)
                        {
                            SequenceItem item = firstAttribute.GetItem(index);

                            AttributeCollection itemAttributeCollection = item.GetAttributes(itemTagSequence);

                            attributeCollection.AddRange(itemAttributeCollection);
                        }
                    }
                    else
                    {
                        // Do nothing, just return an empty set.
                    }
                }
                else
                // Expecting a non-sequence attribute as tag.
                {
                    attributeCollection.Add(firstAttribute);
                }
            }

            return(attributeCollection);
        }