Exemplo n.º 1
0
 public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     var lengthBytes = BitConverter.GetBytes(length);
     if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
     {
         //Length byte size depends on VR Encoding
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((ushort) length);
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
     {
         Array.Reverse(lengthBytes);
     }
     dw.Write(lengthBytes);
 }
Exemplo n.º 2
0
 public static void WriteLittleEndian(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings,
     IDICOMElement toWrite)
 {
     byte[] data = DataComposer.GetDataLittleEndian(toWrite);
     LengthWriter.Write(dw, vr, settings, data != null ? data.Length : 0);
     dw.Write(data != null ? data : new byte[0]);
 }
Exemplo n.º 3
0
 /// <summary>
 /// Creates the DICOM two letter abbreviation from a VR type.
 /// </summary>
 /// <param name="vr">the VR type</param>
 /// <returns>the DICOM two letter abbreviation</returns>
 public static string GetAbbreviationFromVR(VR vr)
 {
     switch (vr)
     {
         case VR.CodeString: return "CS";
         case VR.ShortString: return "SH";
         case VR.LongString: return "LO";
         case VR.ShortText: return "ST";
         case VR.LongText: return "LT";
         case VR.UnlimitedText: return "UT";
         case VR.ApplicationEntity: return "AE";
         case VR.PersonName: return "PN";
         case VR.UniqueIdentifier: return "UI";
         case VR.Date: return "DA";
         case VR.Time: return "TM";
         case VR.DateTime: return "DT";
         case VR.AgeString: return "AS";
         case VR.IntegerString: return "IS";
         case VR.DecimalString: return "DS";
         case VR.SignedShort: return "SS";
         case VR.UnsignedShort: return "US";
         case VR.SignedLong: return "SL";
         case VR.UnsignedLong: return "UL";
         case VR.AttributeTag: return "AT";
         case VR.FloatingPointSingle: return "FL";
         case VR.FloatingPointDouble: return "FD";
         case VR.OtherByteString: return "OB";
         case VR.OtherWordString: return "OW";
         case VR.OtherFloatString: return "OF";
         case VR.Sequence: return "SQ";
         case VR.Unknown: return "UN";
         default: return string.Empty;
     }
 }
Exemplo n.º 4
0
 public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     var lengthBytes = BitConverter.GetBytes(length);
     if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
     {
         //Length byte size depends on VR Encoding
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((ushort) length);
                 if (length > 65536) { throw new ArgumentOutOfRangeException("Length is greater than allowed for explicit VR syntax. Try using implicit VR"); }
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
     {
         Array.Reverse(lengthBytes);
     }
     dw.Write(lengthBytes);
 }
Exemplo n.º 5
0
 public static void WriteLittleEndian(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     byte[] lengthBytes = new byte[0];
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((short)length);
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     else
     {
         lengthBytes =BitConverter.GetBytes(length);
     }
     dw.Write(lengthBytes);
 }
Exemplo n.º 6
0
 public static byte[] EnforceEvenLength(byte[] data, VR vr)
 {
     switch (vr)
     {
         case VR.UniqueIdentifier:
         case VR.OtherByteString:
         case VR.Unknown:
             return DataPadder.PadNull(data);
         case VR.AgeString:
         case VR.ApplicationEntity:
         case VR.CodeString:
         case VR.Date:
         case VR.DateTime:
         case VR.DecimalString:
         case VR.IntegerString:
         case VR.LongString:
         case VR.LongText:
         case VR.PersonName:
         case VR.ShortString:
         case VR.ShortText:
         case VR.Time:
         case VR.UnlimitedText:
             return DataPadder.PadSpace(data);
         default:
             return data;
     }
 }
Exemplo n.º 7
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="tag">The Tag of this instance.</param>
 /// <param name="vR">The Value Representation(s) of this instance.</param>
 /// <param name="name">The name of this instance.</param>
 /// <param name="parent">The parent of this instance.</param>
 public Attribute(Tag tag, VR valueRepresentations, string name, AttributesAndMacros parent)
 {
     this.tag = tag;
     this.valueRepresentations = valueRepresentations;
     this.name = name;
     this.parent = parent;
 }
Exemplo n.º 8
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="tag">The tag of this instance.</param>
 /// <param name="vr">The VR of this instance.</param>
 /// <param name="parent">The parent of this instance.</param>
 public Attribute(Tag tag, VR vr, AttributeSet parent)
 {
     this.tag = tag;
     this.vr = vr;
     this.parent = parent;
     this.parent.Add(this);
 }
Exemplo n.º 9
0
 public static void WriteVR(DICOMBinaryWriter dw, DICOMWriteSettings settings, VR vr)
 {
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         string abbreviation = VRDictionary.GetAbbreviationFromVR(vr);
         dw.Write(abbreviation);
     }
 }
Exemplo n.º 10
0
 /// <summary>
 ///     Reads the length from a series of bytes in a stream. The number of bytes is automatically determined from
 ///     VR.
 /// </summary>
 /// <param name="vr">the value representation of the element</param>
 /// <param name="dr">the binary stream with a current position on the length parameter</param>
 /// <param name="syntax">the transfer syntax of this element</param>
 /// <returns></returns>
 public static int Read(VR vr, DICOMBinaryReader dr, TransferSyntax syntax)
 {
     switch (syntax)
     {
         case TransferSyntax.EXPLICIT_VR_BIG_ENDIAN:
             return ReadBigEndian(vr, dr);
         default:
             return ReadLittleEndian(vr, dr);
     }
 }
Exemplo n.º 11
0
        /// <summary>
        /// Class constructor.
        /// </summary>
        /// <param name="parentSequenceTag">Parent Sequence Tag</param>
        /// <param name="tag">Comparison Tag</param>
        /// <param name="vr">Tag VR</param>
        /// <param name="commonDataFormat">Data Format for Tag</param>
        public DicomComparisonTag(DvtkData.Dimse.Tag parentSequenceTag, 
									DvtkData.Dimse.Tag tag, 
									VR vr,
									BaseCommonDataFormat commonDataFormat)
        {
            _parentSequenceTag = parentSequenceTag;
            _tag = tag;
            _vr = vr;
            _commonDataFormat = commonDataFormat;
        }
Exemplo n.º 12
0
 /// <summary>
 /// This method helps read non-compliant files. Sometimes, an supposed implicit is encoded explicitly. We'll check here
 /// Returns true if element is actually encoded explicitly (VR is written as starting characters).
 /// </summary>
 /// <param name="tag">the read tag</param>
 /// <param name="dr">the binary reader which is reading the DICOM object</param>
 /// <param name="vr">the determined VR from the tag</param>
 /// <returns></returns>
 private static bool CheckForExplicitness(Tag tag, DICOMBinaryReader dr, ref VR vr)
 {
     if (VRReader.PeekVR(dr) != VR.Null)
     {
         vr = VRReader.ReadVR(dr);
         Logging.EvilLogger.Instance.Log($"{tag} was expectd to be implicit LE but is explicit LE. Attempting to read...");
         return true;
     }
     //Implicilty encoded - All is well
     return false;
 }
Exemplo n.º 13
0
 /// <summary>
 /// Determines the encoding, meaning how many bytes to write the VR and length parameters, from a VR type. 
 /// Options are explicit long (8 bytes), explicit short (4 bytes), or implicit (4 bytes). In Evil DICOM, the null
 /// VR is used to represent an unknown VR (before dictionary lookup) that is implicitly encoded.
 /// </summary>
 /// <param name="vr">the VR type</param>
 /// <returns>the encoding method for this type</returns>
 public static VREncoding GetEncodingFromVR(VR vr)
 {
     switch (vr)
     {
         case VR.OtherByteString:
         case VR.OtherWordString:
         case VR.OtherFloatString:
         case VR.Sequence:
         case VR.Unknown: return VREncoding.ExplicitLong;
         case VR.Null: return VREncoding.Implicit;
         default: return VREncoding.ExplicitShort;
     }
 }
Exemplo n.º 14
0
        /// <summary>
        ///     Reads the length in little endian byte format from a series of bytes in a stream. The number of bytes is
        ///     automatically determined from
        ///     VR.
        /// </summary>
        /// <param name="vr">the value representation of the element</param>
        /// <param name="dr">the binary stream with a current position on the length parameter</param>
        /// <returns></returns>
        public static int ReadLittleEndian(VR vr, DICOMBinaryReader dr)
        {
            int length = 0;

            switch (VRDictionary.GetEncodingFromVR(vr))
            {
                case VREncoding.Implicit:
                    byte[] byteLength = dr.ReadBytes(4);
                    length = BitConverter.ToInt32(byteLength, 0);
                    break;
                case VREncoding.ExplicitLong:
                    byteLength = dr.Skip(2).ReadBytes(4);
                    length = BitConverter.ToInt32(byteLength, 0);
                    break;
                case VREncoding.ExplicitShort:
                    byteLength = dr.ReadBytes(2);
                    length = BitConverter.ToUInt16(byteLength, 0);
                    break;
            }
            return length;
        }
Exemplo n.º 15
0
        bool CompareSeqence(VR vr,DicomValueType thisAttribValue,DicomValueType matchAttribValue )
        {
            bool isFound = true;
            switch (vr)
            {
                case VR.AE:
                    {
                        ApplicationEntity thisApplicationEntity = (ApplicationEntity)thisAttribValue;
                        ApplicationEntity matchApplicationEntity = (ApplicationEntity)matchAttribValue;
                        if (thisApplicationEntity.Values.Count != matchApplicationEntity.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisApplicationEntity.Values.Count; i++)
                            {
                                if (!WildCardMatchString(matchApplicationEntity.Values[i], thisApplicationEntity.Values[i], IsCaseSensitiveAE))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.AS:
                    {
                        AgeString thisAgeString = (AgeString)thisAttribValue;
                        AgeString matchAgeString = (AgeString)matchAttribValue;
                        if (thisAgeString.Values.Count != matchAgeString.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisAgeString.Values.Count; i++)
                            {
                                if (!MatchString(matchAgeString.Values[i], thisAgeString.Values[i]))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.AT:
                    {
                        AttributeTag thisAttributeTag = (AttributeTag)thisAttribValue;
                        AttributeTag matchAttributeTag = (AttributeTag)matchAttribValue;
                        if (thisAttributeTag.Values.Count != matchAttributeTag.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisAttributeTag.Values.Count; i++)
                            {
                                if (matchAttributeTag.Values[i] != thisAttributeTag.Values[i])
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.CS:
                    {
                        CodeString thisCodeString = (CodeString)thisAttribValue;
                        CodeString matchCodeString = (CodeString)matchAttribValue;
                        //if (thisCodeString.Values.Count != matchCodeString.Values.Count)
                        //{
                        //    isFound = false;
                        //}
                        //else
                        //{
                        //    for (int i = 0; i < thisCodeString.Values.Count; i++)
                        //    {
                        //        if (!WildCardMatchString(matchCodeString.Values[i], thisCodeString.Values[i], IsCaseSensitiveCS))
                        //        {
                        //            isFound = false;
                        //            break;
                        //        }
                        //    }
                        //}
                        isFound = false;
                        for (int i = 0; i < thisCodeString.Values.Count; i++)
                        {
                            for (int j = 0; j < matchCodeString.Values.Count; j++)
                            {
                                if (WildCardMatchString(matchCodeString.Values[j], thisCodeString.Values[i], IsCaseSensitiveCS))
                                {
                                    isFound = true;
                                    break;
                                }
                            }
                        }

                        break;
                    }
                case VR.DA:
                    {
                        Date thisDate = (Date)thisAttribValue;
                        Date matchDate = (Date)matchAttribValue;
                        if (thisDate.Values.Count != matchDate.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisDate.Values.Count; i++)
                            {
                                System.String thisDateString = thisDate.Values[i].Trim();
                                System.String matchDateString = matchDate.Values[i].Trim();
                                switch (matchDateString.Length)
                                {
                                    case 9:
                                        // ToDate = -YYYYMMDD
                                        // FromDate = YYYYMMDD-
                                        if (matchDateString.StartsWith("-"))
                                        {
                                            System.String date = matchDateString.Substring(1, 8);
                                            int comparison = thisDateString.CompareTo(date);
                                            if (comparison > 0)
                                            {
                                                isFound = false;
                                            }
                                        }
                                        else if (matchDateString.EndsWith("-"))
                                        {
                                            System.String date = matchDateString.Substring(0, 8);
                                            int comparison = thisDateString.CompareTo(date);
                                            if (comparison < 0)
                                            {
                                                isFound = false;
                                            }
                                        }
                                        break;
                                    case 17:
                                        // DateRange = YYYYMMDD-YYYYMMDD
                                        System.String[] dates = matchDateString.Split('-');
                                        int comparison1 = thisDateString.CompareTo(dates[0]);
                                        int comparison2 = thisDateString.CompareTo(dates[1]);
                                        if ((comparison1 < 0) ||
                                            (comparison2 > 0))
                                        {
                                            isFound = false;
                                        }
                                        break;
                                    case 8:
                                    // Date = YYYYMMDD
                                    default:
                                        if (!MatchString(matchDateString, thisDateString))
                                        {
                                            isFound = false;
                                        }
                                        break;
                                }

                                if (isFound == false)
                                {
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.DS:
                    {
                        DecimalString thisDecimalString = (DecimalString)thisAttribValue;
                        DecimalString matchDecimalString = (DecimalString)matchAttribValue;
                        if (thisDecimalString.Values.Count != matchDecimalString.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisDecimalString.Values.Count; i++)
                            {
                                if (!MatchString(matchDecimalString.Values[i], thisDecimalString.Values[i]))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.DT:
                    {
                        DvtkData.Dimse.DateTime thisDateTime = (DvtkData.Dimse.DateTime)thisAttribValue;
                        DvtkData.Dimse.DateTime matchDateTime = (DvtkData.Dimse.DateTime)matchAttribValue;
                        if (thisDateTime.Values.Count != matchDateTime.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisDateTime.Values.Count; i++)
                            {
                                if (!MatchString(matchDateTime.Values[i], thisDateTime.Values[i]))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.FD:
                    {
                        FloatingPointDouble thisFloatingPointDouble = (FloatingPointDouble)thisAttribValue;
                        FloatingPointDouble matchFloatingPointDouble = (FloatingPointDouble)matchAttribValue;
                        if (thisFloatingPointDouble.Values.Count != matchFloatingPointDouble.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisFloatingPointDouble.Values.Count; i++)
                            {
                                if (matchFloatingPointDouble.Values[i] != thisFloatingPointDouble.Values[i])
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.FL:
                    {
                        FloatingPointSingle thisFloatingPointSingle = (FloatingPointSingle)thisAttribValue;
                        FloatingPointSingle matchFloatingPointSingle = (FloatingPointSingle)matchAttribValue;
                        if (thisFloatingPointSingle.Values.Count != matchFloatingPointSingle.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisFloatingPointSingle.Values.Count; i++)
                            {
                                if (matchFloatingPointSingle.Values[i] != thisFloatingPointSingle.Values[i])
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.IS:
                    {
                        IntegerString thisIntegerString = (IntegerString)thisAttribValue;
                        IntegerString matchIntegerString = (IntegerString)matchAttribValue;
                        if (thisIntegerString.Values.Count != matchIntegerString.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisIntegerString.Values.Count; i++)
                            {
                                if (!MatchString(matchIntegerString.Values[i], thisIntegerString.Values[i]))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.LO:
                    {
                        LongString thisLongString = (LongString)thisAttribValue;
                        LongString matchLongString = (LongString)matchAttribValue;
                        if (thisLongString.Values.Count != matchLongString.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisLongString.Values.Count; i++)
                            {
                                if (!WildCardMatchString(matchLongString.Values[i], thisLongString.Values[i], IsCaseSensitiveLO))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.LT:
                    {
                        break;
                    }
                case VR.OB:
                    {
                        break;
                    }
                case VR.OF:
                    {
                        break;
                    }
                case VR.OW:
                    {
                        break;
                    }
                case VR.PN:
                    {
                        PersonName thisPersonName = (PersonName)thisAttribValue;
                        PersonName matchPersonName = (PersonName)matchAttribValue;
                        if (thisPersonName.Values.Count != matchPersonName.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisPersonName.Values.Count; i++)
                            {
                                if (!WildCardMatchString(matchPersonName.Values[i], thisPersonName.Values[i], IsCaseSensitivePN))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.SH:
                    {
                        ShortString thisShortString = (ShortString)thisAttribValue;
                        ShortString matchShortString = (ShortString)matchAttribValue;
                        if (thisShortString.Values.Count != matchShortString.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisShortString.Values.Count; i++)
                            {
                                if (!WildCardMatchString(matchShortString.Values[i], thisShortString.Values[i], IsCaseSensitiveSH))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.SL:
                    {
                        SignedLong thisSignedLong = (SignedLong)thisAttribValue;
                        SignedLong matchSignedLong = (SignedLong)matchAttribValue;
                        if (thisSignedLong.Values.Count != matchSignedLong.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisSignedLong.Values.Count; i++)
                            {
                                if (matchSignedLong.Values[i] != thisSignedLong.Values[i])
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.SQ:
                    {
                        //										SequenceOfItems sequenceOfItems = (SequenceOfItems)attribute.DicomValue;
                        //										foreach (SequenceItem item in sequenceOfItems.Sequence)
                        //										{
                        //										}
                        break;
                    }
                case VR.SS:
                    {
                        SignedShort thisSignedShort = (SignedShort)thisAttribValue;
                        SignedShort matchSignedShort = (SignedShort)matchAttribValue;
                        if (thisSignedShort.Values.Count != matchSignedShort.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisSignedShort.Values.Count; i++)
                            {
                                if (matchSignedShort.Values[i] != thisSignedShort.Values[i])
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.ST:
                    {
                        break;
                    }
                case VR.TM:
                    {
                        isFound = false;

                        Time thisTime = (Time)thisAttribValue;
                        Time matchTime = (Time)matchAttribValue;

                        for (int i = 0; i < thisTime.Values.Count; i++)
                        {
                            if (TMMatching.Matches(thisTime.Values[i], matchTime.Values[0]))
                            {
                                isFound = true;
                                break;
                            }
                        }

                        break;
                    }
                case VR.UI:
                    {
                        UniqueIdentifier thisUniqueIdentifier = (UniqueIdentifier)thisAttribValue;
                        UniqueIdentifier matchUniqueIdentifier = (UniqueIdentifier)matchAttribValue;

                        // check for list of UID matching
                        if ((thisUniqueIdentifier.Values.Count == 1) &&
                            (matchUniqueIdentifier.Values.Count > 1))
                        {
                            isFound = false;

                            // iterate over all the possible matches
                            for (int i = 0; i < matchUniqueIdentifier.Values.Count; i++)
                            {
                                if (MatchString(matchUniqueIdentifier.Values[i], thisUniqueIdentifier.Values[0]))
                                {
                                    isFound = true;
                                    break;
                                }
                            }
                        }
                        else if (thisUniqueIdentifier.Values.Count == matchUniqueIdentifier.Values.Count)
                        {
                            for (int i = 0; i < thisUniqueIdentifier.Values.Count; i++)
                            {
                                if (!MatchString(matchUniqueIdentifier.Values[i], thisUniqueIdentifier.Values[i]))
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            isFound = false;
                        }
                        break;
                    }
                case VR.UL:
                    {
                        UnsignedLong thisUnsignedLong = (UnsignedLong)thisAttribValue;
                        UnsignedLong matchUnsignedLong = (UnsignedLong)matchAttribValue;
                        if (thisUnsignedLong.Values.Count != matchUnsignedLong.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisUnsignedLong.Values.Count; i++)
                            {
                                if (matchUnsignedLong.Values[i] != thisUnsignedLong.Values[i])
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.UN:
                    {
                        break;
                    }
                case VR.US:
                    {
                        UnsignedShort thisUnsignedShort = (UnsignedShort)thisAttribValue;
                        UnsignedShort matchUnsignedShort = (UnsignedShort)matchAttribValue;
                        if (thisUnsignedShort.Values.Count != matchUnsignedShort.Values.Count)
                        {
                            isFound = false;
                        }
                        else
                        {
                            for (int i = 0; i < thisUnsignedShort.Values.Count; i++)
                            {
                                if (matchUnsignedShort.Values[i] != thisUnsignedShort.Values[i])
                                {
                                    isFound = false;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                case VR.UT:
                    {
                        break;
                    }

                default:
                    isFound = false;
                    break;
            }
            return isFound;
        }
Exemplo n.º 16
0
        /// <summary>
        ///     Checks to see if a certain IDICOMElement is of a given VR type
        /// </summary>
        /// <param name="elem">the DICOM element in question</param>
        /// <param name="vr">the VR type to test the DICOM element</param>
        /// <returns>a boolean indicating whether or not the DICOM element is of a given VR type</returns>
        public static bool IsVR(this IDICOMElement elem, VR vr)
        {
            switch (vr)
            {
            case VR.CodeString:
                return(elem is CodeString);

            case VR.ShortString:
                return(elem is ShortString);

            case VR.LongString:
                return(elem is LongString);

            case VR.ShortText:
                return(elem is ShortText);

            case VR.LongText:
                return(elem is LongText);

            case VR.UnlimitedText:
                return(elem is UnlimitedText);

            case VR.ApplicationEntity:
                return(elem is ApplicationEntity);

            case VR.PersonName:
                return(elem is PersonName);

            case VR.UniqueIdentifier:
                return(elem is UniqueIdentifier);

            case VR.Date:
                return(elem is Date);

            case VR.Time:
                return(elem is Time);

            case VR.DateTime:
                return(elem is DateTime);

            case VR.AgeString:
                return(elem is AgeString);

            case VR.IntegerString:
                return(elem is IntegerString);

            case VR.DecimalString:
                return(elem is DecimalString);

            case VR.SignedShort:
                return(elem is SignedShort);

            case VR.UnsignedShort:
                return(elem is UnsignedShort);

            case VR.SignedLong:
                return(elem is SignedLong);

            case VR.UnsignedLong:
                return(elem is UnsignedLong);

            case VR.AttributeTag:
                return(elem is AttributeTag);

            case VR.FloatingPointSingle:
                return(elem is FloatingPointSingle);

            case VR.FloatingPointDouble:
                return(elem is FloatingPointDouble);

            case VR.OtherByteString:
                return(elem is OtherByteString);

            case VR.OtherWordString:
                return(elem is OtherWordString);

            case VR.OtherFloatString:
                return(elem is OtherFloatString);

            case VR.Sequence:
                return(elem is Sequence);

            case VR.Unknown:
                return(elem is Unknown);

            default:
                return(elem is AbstractElement <object>);
            }
        }
Exemplo n.º 17
0
        /// <summary>
        ///     Creates the DICOM two letter abbreviation from a VR type.
        /// </summary>
        /// <param name="vr">the VR type</param>
        /// <returns>the DICOM two letter abbreviation</returns>
        public static string GetAbbreviationFromVR(VR vr)
        {
            switch (vr)
            {
            case VR.CodeString:
                return("CS");

            case VR.ShortString:
                return("SH");

            case VR.LongString:
                return("LO");

            case VR.ShortText:
                return("ST");

            case VR.LongText:
                return("LT");

            case VR.UnlimitedCharacter:
                return("UC");

            case VR.UniversalResourceId:
                return("UR");

            case VR.UnlimitedText:
                return("UT");

            case VR.ApplicationEntity:
                return("AE");

            case VR.PersonName:
                return("PN");

            case VR.UniqueIdentifier:
                return("UI");

            case VR.Date:
                return("DA");

            case VR.Time:
                return("TM");

            case VR.DateTime:
                return("DT");

            case VR.AgeString:
                return("AS");

            case VR.IntegerString:
                return("IS");

            case VR.DecimalString:
                return("DS");

            case VR.SignedShort:
                return("SS");

            case VR.UnsignedShort:
                return("US");

            case VR.SignedLong:
                return("SL");

            case VR.UnsignedLong:
                return("UL");

            case VR.AttributeTag:
                return("AT");

            case VR.FloatingPointSingle:
                return("FL");

            case VR.FloatingPointDouble:
                return("FD");

            case VR.OtherByteString:
                return("OB");

            case VR.OtherWordString:
                return("OW");

            case VR.OtherFloatString:
                return("OF");

            case VR.OtherDoubleString:
                return("OD");

            case VR.OtherLongString:
                return("OL");

            case VR.Sequence:
                return("SQ");

            case VR.Unknown:
                return("UN");

            default:
                return(string.Empty);
            }
        }
Exemplo n.º 18
0
 /// <summary>
 /// Adds an <see cref="Attribute"/> to the <see cref="AttributeSet"/>.
 /// </summary>
 /// <param name="groupNumberString">The group number for the newly created <see cref="Attribute"/> in hex string format</param>
 /// <param name="elementNumberString">The element number for the newly created <see cref="Attribute"/> in hex string format</param>
 /// <param name="vr">The value representation for the newly created <see cref="Attribute"/></param>
 /// <param name="list"></param>
 /// <returns>The position into which the new <see cref="Attribute"/> was inserted.</returns>
 /// <exception cref="System.InvalidCastException">
 /// The <c>list</c> is an <see cref="object"/> array. 
 /// The items in this <c>list</c> are converted to the underlying <c>vr</c> as much as possible. 
 /// However <see cref="System.InvalidCastException"/> may occur during these run-time conversions.
 /// </exception>
 /// <example>This sample shows how to call the AddAttribute method.
 /// <code>
 ///   AttributeSet attributeSet = new DataSet();
 ///   Attribute attribute = new Attribute("0x12345678", VR.AE, "String0", "String1", "String2");
 ///   attributeSet.AddAttribute(attribute);
 /// </code>
 /// </example>
 public int AddAttribute(
     string groupNumberString,
     string elementNumberString,
     VR vr,
     params object[] list)
 {
     GROUP_NUMBER groupNumber =
         GROUP_NUMBER.Parse(groupNumberString, System.Globalization.NumberStyles.HexNumber);
     ELEMENT_NUMBER elementNumber =
         ELEMENT_NUMBER.Parse(elementNumberString, System.Globalization.NumberStyles.HexNumber);
     return base.Add(new Attribute(groupNumber, elementNumber, vr, list));
 }
Exemplo n.º 19
0
 public DicomTagVr(Tag tag, VR vr)
 {
     _tag = tag;
     _vr = vr;
 }
Exemplo n.º 20
0
        /// <summary>
        ///     Generates a concrete element class from the VR, tag, data and syntax. Also directs the appropriate data
        ///     interpretation.
        /// </summary>
        /// <param name="tag">the tag of the element to be generated</param>
        /// <param name="vr">the VR of the element to be generated</param>
        /// <param name="data">the raw data to be procesed (byte array)</param>
        /// <param name="syntax">the transfer syntax by which to interepret the data</param>
        /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns>
        public static IDICOMElement GenerateElement(Tag tag, VR vr, object data, TransferSyntax syntax)
        {
            //HANDLE NUMBERS
            if (syntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
            {
                switch (vr)
                {
                    case VR.AttributeTag:
                        return new AttributeTag(tag, BigEndianReader.ReadTag(data as byte[]));
                    case VR.FloatingPointDouble:
                        return new FloatingPointDouble(tag, BigEndianReader.ReadDoublePrecision(data as byte[]));
                    case VR.FloatingPointSingle:
                        return new FloatingPointSingle(tag, BigEndianReader.ReadSinglePrecision(data as byte[]));
                    case VR.SignedLong:
                        return new SignedLong(tag, BigEndianReader.ReadSignedLong(data as byte[]));
                    case VR.SignedShort:
                        return new SignedShort(tag, BigEndianReader.ReadSignedShort(data as byte[]));
                    case VR.UnsignedLong:
                        return new UnsignedLong(tag, BigEndianReader.ReadUnsignedLong(data as byte[]));
                    case VR.UnsignedShort:
                        return new UnsignedShort(tag, BigEndianReader.ReadUnsignedShort(data as byte[]));
                }
            }
            else
            {
                switch (vr)
                {
                    case VR.AttributeTag:
                        return new AttributeTag(tag, LittleEndianReader.ReadTag(data as byte[]));
                    case VR.FloatingPointDouble:
                        return new FloatingPointDouble(tag, LittleEndianReader.ReadDoublePrecision(data as byte[]));
                    case VR.FloatingPointSingle:
                        return new FloatingPointSingle(tag, LittleEndianReader.ReadSinglePrecision(data as byte[]));
                    case VR.SignedLong:
                        return new SignedLong(tag, LittleEndianReader.ReadSignedLong(data as byte[]));
                    case VR.SignedShort:
                        return new SignedShort(tag, LittleEndianReader.ReadSignedShort(data as byte[]));
                    case VR.UnsignedLong:
                        return new UnsignedLong(tag, LittleEndianReader.ReadUnsignedLong(data as byte[]));
                    case VR.UnsignedShort:
                        return new UnsignedShort(tag, LittleEndianReader.ReadUnsignedShort(data as byte[]));
                }
            }
            //HANDLE ALL OTHERS
            switch (vr)
            {
                //HANDLE STRINGS
                case VR.AgeString:
                case VR.ApplicationEntity:
                case VR.CodeString:
                case VR.Date:
                case VR.DateTime:
                case VR.DecimalString:
                case VR.IntegerString:
                case VR.LongString:
                case VR.LongText:
                case VR.PersonName:
                case VR.ShortString:
                case VR.ShortText:
                case VR.Time:
                case VR.UnlimitedText:
                case VR.UniqueIdentifier:
                    return ReadString(vr, tag, data);

                //HANDLE BYTE DATA
                case VR.Sequence:
                    return new Sequence { Tag = tag, Items = SequenceReader.ReadItems(data as byte[], syntax) };
                case VR.OtherByteString:
                    return new OtherByteString(tag, data as byte[]);
                case VR.OtherFloatString:
                    return new OtherFloatString(tag, data as byte[]);
                case VR.OtherWordString:
                    return new OtherWordString(tag, data as byte[]);
                default:
                    var unk = new Unknown(tag, data as byte[]);
                    unk.TransferSyntax = syntax;
                    return unk;
            }
        }
Exemplo n.º 21
0
 /// <summary>
 ///     Generates a concrete element class from the VR, tag, data and string data (from XML). 
 /// </summary>
 /// <param name="tag">the tag of the element to be generated</param>
 /// <param name="vr">the VR of the element to be generated</param>
 /// <param name="data">the string data of the element</param>
 /// <param name="syntax">the transfer syntax by which to interepret the data</param>
 /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns>
 public static IDICOMElement GenerateElementFromStringData(Tag tag, VR vr, string[] data)
 {
     switch (vr)
     {
         case VR.AttributeTag:
             return new AttributeTag(tag, new Tag(data.First()));
         case VR.FloatingPointDouble:
             return new FloatingPointDouble(tag, data.Select(d => double.Parse(d)).ToArray());
         case VR.FloatingPointSingle:
             return new FloatingPointSingle(tag, data.Select(d => float.Parse(d)).ToArray());
         case VR.SignedLong:
             return new SignedLong(tag, data.Select(d => int.Parse(d)).ToArray());
         case VR.SignedShort:
             return new SignedShort(tag, data.Select(d => short.Parse(d)).ToArray());
         case VR.UnsignedLong:
             return new UnsignedLong(tag, data.Select(d => uint.Parse(d)).ToArray());
         case VR.UnsignedShort:
             return new UnsignedShort(tag, data.Select(d => ushort.Parse(d)).ToArray());
         //HANDLE STRINGS
         case VR.AgeString: return new AgeString(tag, data.First());
         case VR.ApplicationEntity: return new ApplicationEntity(tag, data.First());
         case VR.CodeString: return new CodeString(tag, data.First());
         case VR.DecimalString: return new DecimalString(tag, data.Select(d => double.Parse(d)).ToArray());
         case VR.IntegerString: return new IntegerString(tag, data.Select(d => int.Parse(d)).ToArray());
         case VR.LongString: return new LongString(tag, data.First());
         case VR.LongText: return new LongText(tag, data.First());
         case VR.PersonName: return new PersonName(tag, data.First());
         case VR.ShortString: return new ShortString(tag, data.First());
         case VR.ShortText: return new ShortText(tag, data.First());
         case VR.UnlimitedText: return new UnlimitedText(tag, data.First());
         case VR.UniqueIdentifier: return new UniqueIdentifier(tag, data.First());
         //HANDLE DATES
         case VR.Date: return new Date(tag, StringDataParser.GetNullableDate(data.First()));
         case VR.DateTime: return new DateTime(tag, StringDataParser.GetNullableDate(data.First()));
         case VR.Time: return new Time(tag, StringDataParser.GetNullableDate(data.First()));
         //HANDLE BYTE DATA
         case VR.Sequence:
             return new Sequence { Tag = tag, Items = data.Select(d => DICOMObject.FromXML(d)).ToList()};
         case VR.OtherByteString:
             return new OtherByteString(tag, ByteHelper.HexStringToByteArray(data.First()));
         case VR.OtherFloatString:
             return new OtherFloatString(tag, ByteHelper.HexStringToByteArray(data.First()));
         case VR.OtherWordString:
             return new OtherWordString(tag, ByteHelper.HexStringToByteArray(data.First()));
         default:
             return new Unknown(tag, ByteHelper.HexStringToByteArray(data.First()));
     }
 }
Exemplo n.º 22
0
 public DicomTagVr(Tag tag, VR vr)
 {
     _tag = tag;
     _vr  = vr;
 }
Exemplo n.º 23
0
        public static byte[] GetStringBytes(VR vr, IDICOMElement el)
        {
            string data;

            byte[] unpadded;
            switch (vr)
            {
            case VR.AgeString:
                var age = el as AgeString;
                data     = age.DataContainer.SingleValue;
                unpadded = GetASCIIBytes(data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.ApplicationEntity:
                var ae = el as ApplicationEntity;
                unpadded = GetASCIIBytes(ae.DataContainer.SingleValue);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.CodeString:
                var cs = el as CodeString;
                unpadded = GetASCIIBytes(cs.Data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.Date:
                var d = el as Date;
                data     = StringDataComposer.ComposeDate(d.Data);
                unpadded = GetASCIIBytes(data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.DateTime:
                var dt = el as DateTime;
                data     = StringDataComposer.ComposeDateTime(dt.DataContainer.SingleValue);
                unpadded = GetASCIIBytes(data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.DecimalString:
                var ds = el as DecimalString;
                data     = StringDataComposer.ComposeDecimalString(ds.DataContainer.MultipicityValue.ToArray());
                unpadded = GetASCIIBytes(data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.IntegerString:
                var iSt = el as IntegerString;
                data     = StringDataComposer.ComposeIntegerString(iSt.DataContainer.MultipicityValue.ToArray());
                unpadded = GetASCIIBytes(data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.LongString:
                var ls = el as LongString;
                unpadded = GetASCIIBytes(ls.Data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.LongText:
                var lt = el as LongText;
                unpadded = GetASCIIBytes(lt.Data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.PersonName:
                var pn = el as PersonName;
                unpadded = GetASCIIBytes(pn.Data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.ShortString:
                var ss = el as ShortString;
                unpadded = GetASCIIBytes(ss.Data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.ShortText:
                var st = el as ShortText;
                unpadded = GetASCIIBytes(st.Data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.Time:
                var t = el as Time;
                data     = StringDataComposer.ComposeTime(t.Data);
                unpadded = GetASCIIBytes(data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.UnlimitedText:
                var ut = el as UnlimitedText;
                unpadded = GetASCIIBytes(ut.Data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.UniqueIdentifier:
                var ui = el as UniqueIdentifier;
                unpadded = GetASCIIBytes(ui.Data);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            default:
                return(null);
            }
        }
Exemplo n.º 24
0
 public static void WriteBigEndian(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, IDICOMElement toWrite)
 {
     byte[] data = DataComposer.GetDataBigEndian(toWrite);
     LengthWriter.Write(dw, vr, settings, data != null ? data.Length : 0);
     dw.Write(data != null ? data : new byte[0]);
 }
Exemplo n.º 25
0
 public Tag(UInt32 id, VR vr, string description)
 {
     ID          = id;
     VR          = vr;
     Description = description;
 }
Exemplo n.º 26
0
 public Tag(UInt16 group, UInt16 element, VR vr, string description) :
     this((UInt32)((group << 16) + element), vr, description)
 {
 }
Exemplo n.º 27
0
        /// <summary>
        ///     Generates a concrete element class from the VR, tag, data and string data (from XML).
        /// </summary>
        /// <param name="tag">the tag of the element to be generated</param>
        /// <param name="vr">the VR of the element to be generated</param>
        /// <param name="data">the string data of the element</param>
        /// <param name="syntax">the transfer syntax by which to interepret the data</param>
        /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns>
        public static IDICOMElement GenerateElementFromStringData(Tag tag, VR vr, string[] data)
        {
            switch (vr)
            {
            case VR.AttributeTag:
                return(new AttributeTag(tag, new Tag(data.First())));

            case VR.FloatingPointDouble:
                return(new FloatingPointDouble(tag, data.Select(d => double.Parse(d)).ToArray()));

            case VR.FloatingPointSingle:
                return(new FloatingPointSingle(tag, data.Select(d => float.Parse(d)).ToArray()));

            case VR.SignedLong:
                return(new SignedLong(tag, data.Select(d => int.Parse(d)).ToArray()));

            case VR.SignedShort:
                return(new SignedShort(tag, data.Select(d => short.Parse(d)).ToArray()));

            case VR.UnsignedLong:
                return(new UnsignedLong(tag, data.Select(d => uint.Parse(d)).ToArray()));

            case VR.UnsignedShort:
                return(new UnsignedShort(tag, data.Select(d => ushort.Parse(d)).ToArray()));

            //HANDLE STRINGS
            case VR.AgeString: return(new AgeString(tag, data.First()));

            case VR.ApplicationEntity: return(new ApplicationEntity(tag, data.First()));

            case VR.CodeString: return(new CodeString(tag, data.First()));

            case VR.DecimalString: return(new DecimalString(tag, data.Select(d => double.Parse(d)).ToArray()));

            case VR.IntegerString: return(new IntegerString(tag, data.Select(d => int.Parse(d)).ToArray()));

            case VR.LongString: return(new LongString(tag, data.First()));

            case VR.LongText: return(new LongText(tag, data.First()));

            case VR.PersonName: return(new PersonName(tag, data.First()));

            case VR.ShortString: return(new ShortString(tag, data.First()));

            case VR.ShortText: return(new ShortText(tag, data.First()));

            case VR.UnlimitedText: return(new UnlimitedText(tag, data.First()));

            case VR.UniqueIdentifier: return(new UniqueIdentifier(tag, data.First()));

            //HANDLE DATES
            case VR.Date: return(new Date(tag, StringDataParser.GetNullableDate(data.First())));

            case VR.DateTime: return(new DateTime(tag, StringDataParser.GetNullableDate(data.First())));

            case VR.Time: return(new Time(tag, StringDataParser.GetNullableDate(data.First())));

            //HANDLE BYTE DATA

            case VR.OtherByteString:
                return(new OtherByteString(tag, ByteHelper.HexStringToByteArray(data.First())));

            case VR.OtherFloatString:
                return(new OtherFloatString(tag, ByteHelper.HexStringToByteArray(data.First())));

            case VR.OtherWordString:
                return(new OtherWordString(tag, ByteHelper.HexStringToByteArray(data.First())));

            case VR.OtherLongString:
                return(new OtherLongString(tag, ByteHelper.HexStringToByteArray(data.First())));

            case VR.OtherDoubleString:
                return(new OtherDoubleString(tag, ByteHelper.HexStringToByteArray(data.First())));

            default:
                return(new Unknown(tag, ByteHelper.HexStringToByteArray(data.First())));
            }
        }
Exemplo n.º 28
0
 public static void WriteBigEndian(DICOMBinaryWriter dw, VR vr, int length)
 {
 }
Exemplo n.º 29
0
        /// <summary>
        /// Generates a concrete element class from the VR, tag, data and syntax. Also directs the appropriate data interpretation.
        /// </summary>
        /// <param name="tag">the tag of the element to be generated</param>
        /// <param name="vr">the VR of the element to be generated</param>
        /// <param name="data">the raw data to be procesed (byte array)</param>
        /// <param name="syntax">the transfer syntax by which to interepret the data</param>
        /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns>
        public static IDICOMElement GenerateElement(Tag tag, VR vr, object data, TransferSyntax syntax)
        {
            //HANDLE NUMBERS
            if (syntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
            {
                switch (vr)
                {
                case VR.AttributeTag: return(new AttributeTag(tag, BigEndianReader.ReadTag(data as byte[])));

                case VR.FloatingPointDouble: return(new FloatingPointDouble(tag, BigEndianReader.ReadDoublePrecision(data as byte[])));

                case VR.FloatingPointSingle: return(new FloatingPointSingle(tag, BigEndianReader.ReadSinglePrecision(data as byte[])));

                case VR.SignedLong: return(new SignedLong(tag, BigEndianReader.ReadSignedLong(data as byte[])));

                case VR.SignedShort: return(new SignedShort(tag, BigEndianReader.ReadSignedShort(data as byte[])));

                case VR.UnsignedLong: return(new UnsignedLong(tag, BigEndianReader.ReadUnsignedLong(data as byte[])));

                case VR.UnsignedShort: return(new UnsignedShort(tag, BigEndianReader.ReadUnsignedShort(data as byte[])));
                }
            }
            else
            {
                switch (vr)
                {
                case VR.AttributeTag: return(new AttributeTag(tag, LittleEndianReader.ReadTag(data as byte[])));

                case VR.FloatingPointDouble: return(new FloatingPointDouble(tag, LittleEndianReader.ReadDoublePrecision(data as byte[])));

                case VR.FloatingPointSingle: return(new FloatingPointSingle(tag, LittleEndianReader.ReadSinglePrecision(data as byte[])));

                case VR.SignedLong: return(new SignedLong(tag, LittleEndianReader.ReadSignedLong(data as byte[])));

                case VR.SignedShort: return(new SignedShort(tag, LittleEndianReader.ReadSignedShort(data as byte[])));

                case VR.UnsignedLong: return(new UnsignedLong(tag, LittleEndianReader.ReadUnsignedLong(data as byte[])));

                case VR.UnsignedShort: return(new UnsignedShort(tag, LittleEndianReader.ReadUnsignedShort(data as byte[])));
                }
            }
            //HANDLE ALL OTHERS
            switch (vr)
            {
            //HANDLE STRINGS
            case VR.AgeString:
            case VR.ApplicationEntity:
            case VR.CodeString:
            case VR.Date:
            case VR.DateTime:
            case VR.DecimalString:
            case VR.IntegerString:
            case VR.LongString:
            case VR.LongText:
            case VR.PersonName:
            case VR.ShortString:
            case VR.ShortText:
            case VR.Time:
            case VR.UnlimitedText:
            case VR.UniqueIdentifier:
                return(ReadString(vr, tag, data));

            //HANDLE BYTE DATA
            case VR.Sequence:
                return(new Sequence {
                    Tag = tag, Items = SequenceReader.ReadItems(data as byte[], syntax)
                });

            case VR.OtherByteString:
                return(new OtherByteString(tag, data as byte[]));

            case VR.OtherFloatString:
                return(new OtherFloatString(tag, data as byte[]));

            case VR.OtherWordString:
                return(new OtherWordString(tag, data as byte[]));

            default:
                return(new Unknown(tag, data as byte[]));
            }
        }
Exemplo n.º 30
0
        /// <summary>
        ///     Reads string data and creates the appropriate DICOM element
        /// </summary>
        /// <param name="data">the string data as an object (fresh from the DICOM reader)</param>
        /// <param name="vr">the VR of the element to be generated</param>
        /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns>
        private static IDICOMElement ReadString(VR vr, Tag tag, object data, StringEncoding enc)
        {
            switch (vr)
            {
            case VR.AgeString:
                return(new AgeString(tag, DICOMString.Read(data as byte[], enc)));

            case VR.ApplicationEntity:
                return(new ApplicationEntity(tag, DICOMString.Read(data as byte[], enc)));

            case VR.CodeString:
                return(new CodeString()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.Date:
                return(new Date(tag, DICOMString.Read(data as byte[], enc)));

            case VR.DateTime:
                return(new DateTime(tag, DICOMString.Read(data as byte[], enc)));

            case VR.DecimalString:
                return(new DecimalString(tag, DICOMString.Read(data as byte[], enc)));

            case VR.IntegerString:
                return(new IntegerString(tag, DICOMString.Read(data as byte[], enc)));

            case VR.LongString:
                return(new LongString(tag, DICOMString.Read(data as byte[], enc)));

            case VR.LongText:
                return(new LongText()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.PersonName:
                return(new PersonName()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.ShortString:
                return(new ShortString()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.ShortText:
                return(new ShortText(tag, DICOMString.Read(data as byte[], enc)));

            case VR.Time:
                return(new Time(tag, DICOMString.Read(data as byte[], enc)));

            case VR.UnlimitedCharacter:
                return(new UnlimitedCharacter()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.UnlimitedText:
                return(new UnlimitedText(tag, DICOMString.Read(data as byte[], enc)));

            case VR.UniqueIdentifier:
                return(new UniqueIdentifier(tag, DICOMString.Read(data as byte[], enc)));

            case VR.UniversalResourceId:
                return(new UniversalResourceId(tag, DICOMString.Read(data as byte[], enc)));

            default:
                return(new Unknown(tag, data as byte[]));
            }
        }
Exemplo n.º 31
0
 /// <summary>
 ///     Checks to see if a certain IDICOMElement is of a given VR type
 /// </summary>
 /// <param name="elem">the DICOM element in question</param>
 /// <param name="vr">the VR type to test the DICOM element</param>
 /// <returns>a boolean indicating whether or not the DICOM element is of a given VR type</returns>
 public static bool IsVR(this IDICOMElement elem, VR vr)
 {
     switch (vr)
     {
         case VR.CodeString:
             return elem is CodeString;
         case VR.ShortString:
             return elem is ShortString;
         case VR.LongString:
             return elem is LongString;
         case VR.ShortText:
             return elem is ShortText;
         case VR.LongText:
             return elem is LongText;
         case VR.UnlimitedText:
             return elem is UnlimitedText;
         case VR.ApplicationEntity:
             return elem is ApplicationEntity;
         case VR.PersonName:
             return elem is PersonName;
         case VR.UniqueIdentifier:
             return elem is UniqueIdentifier;
         case VR.Date:
             return elem is Date;
         case VR.Time:
             return elem is Time;
         case VR.DateTime:
             return elem is DateTime;
         case VR.AgeString:
             return elem is AgeString;
         case VR.IntegerString:
             return elem is IntegerString;
         case VR.DecimalString:
             return elem is DecimalString;
         case VR.SignedShort:
             return elem is SignedShort;
         case VR.UnsignedShort:
             return elem is UnsignedShort;
         case VR.SignedLong:
             return elem is SignedLong;
         case VR.UnsignedLong:
             return elem is UnsignedLong;
         case VR.AttributeTag:
             return elem is AttributeTag;
         case VR.FloatingPointSingle:
             return elem is FloatingPointSingle;
         case VR.FloatingPointDouble:
             return elem is FloatingPointDouble;
         case VR.OtherByteString:
             return elem is OtherByteString;
         case VR.OtherWordString:
             return elem is OtherWordString;
         case VR.OtherFloatString:
             return elem is OtherFloatString;
         case VR.Sequence:
             return elem is Sequence;
         case VR.Unknown:
             return elem is Unknown;
         default:
             return elem is AbstractElement<object>;
     }
 }
Exemplo n.º 32
0
 /// <summary>
 ///     Reads string data and creates the appropriate DICOM element
 /// </summary>
 /// <param name="data">the string data as an object (fresh from the DICOM reader)</param>
 /// <param name="vr">the VR of the element to be generated</param>
 /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns>
 private static IDICOMElement ReadString(VR vr, Tag tag, object data)
 {
     switch (vr)
     {
         case VR.AgeString:
             return new AgeString(tag, DICOMString.Read(data as byte[]));
         case VR.ApplicationEntity:
             return new ApplicationEntity(tag, DICOMString.Read(data as byte[]));
         case VR.CodeString:
             return new CodeString(tag, DICOMString.Read(data as byte[]));
         case VR.Date:
             return new Date(tag, DICOMString.Read(data as byte[]));
         case VR.DateTime:
             return new DateTime(tag, DICOMString.Read(data as byte[]));
         case VR.DecimalString:
             return new DecimalString(tag, DICOMString.Read(data as byte[]));
         case VR.IntegerString:
             return new IntegerString(tag, DICOMString.Read(data as byte[]));
         case VR.LongString:
             return new LongString(tag, DICOMString.Read(data as byte[]));
         case VR.LongText:
             return new LongText(tag, DICOMString.Read(data as byte[]));
         case VR.PersonName:
             return new PersonName(tag, DICOMString.Read(data as byte[]));
         case VR.ShortString:
             return new ShortString(tag, DICOMString.Read(data as byte[]));
         case VR.ShortText:
             return new ShortText(tag, DICOMString.Read(data as byte[]));
         case VR.Time:
             return new Time(tag, DICOMString.Read(data as byte[]));
         case VR.UnlimitedText:
             return new UnlimitedText(tag, DICOMString.Read(data as byte[]));
         case VR.UniqueIdentifier:
             return new UniqueIdentifier(tag, DICOMString.Read(data as byte[]));
         default:
             return new Unknown(tag, data as byte[]);
     }
 }
Exemplo n.º 33
0
 /// <summary>
 /// Adds an <see cref="Attribute"/> to the <see cref="AttributeSet"/>.
 /// </summary>
 /// <param name="groupElementString">The group element hex number for the newly created <see cref="Attribute"/> in hex string format</param>
 /// <param name="vr">The value representation for the newly created <see cref="Attribute"/></param>
 /// <param name="list">The list of values for the newly create <see cref="Attribute"/></param>
 /// <returns>The position into which the new <see cref="Attribute"/> was inserted.</returns>
 /// <exception cref="System.InvalidCastException">
 /// The <c>list</c> is an <see cref="object"/> array. 
 /// The items in this <c>list</c> are converted to the underlying <c>vr</c> as much as possible. 
 /// However <see cref="System.InvalidCastException"/> may occur during these run-time conversions.
 /// </exception>
 /// <example>This sample shows how to call the AddAttribute method.
 /// <code>
 ///   AttributeSet attributeSet = new DataSet();
 ///   attributeSet.AddAttribute("0x12345678", VR.AE, "String0", "String1", "String2");
 /// </code>
 /// </example>
 public int AddAttribute(
     string groupElementString,
     VR vr,
     params object[] list)
 {
     GROUP_ELEMENT groupElement =
         GROUP_ELEMENT.Parse(groupElementString, System.Globalization.NumberStyles.HexNumber);
     return base.Add(new Attribute(groupElement, vr, list));
 }
Exemplo n.º 34
0
 public static void WriteBigEndian(DICOMBinaryWriter dw, VR vr, int length)
 {
 }
Exemplo n.º 35
0
 /// <summary>
 /// Creates an <see cref="Attribute"/>
 /// </summary>
 /// <param name="groupNumber">The group number.</param>
 /// <param name="elementNumber">The element number.</param>
 /// <param name="vr">The value representation.</param>
 /// <param name="list">The list of values.</param>
 /// <exception cref="System.InvalidCastException">
 /// The <c>list</c> is an <see cref="object"/> array. 
 /// The items in this <c>list</c> are converted to the underlying <c>vr</c> as much as possible. 
 /// However <see cref="System.InvalidCastException"/> may occur during these run-time conversions.
 /// </exception>
 // resolve call ambiguity by making this call internal
 internal Attribute(
     GROUP_NUMBER groupNumber,
     ELEMENT_NUMBER elementNumber,
     VR vr,
     params object[] list)
 {
     _InitializeAttribute(groupNumber, elementNumber, vr, list);
 }
Exemplo n.º 36
0
 /// <summary>
 /// Adds an <see cref="Attribute"/> to the <see cref="AttributeSet"/>.
 /// </summary>
 /// <param name="groupNumber">The group number for the newly created <see cref="Attribute"/>.</param>
 /// <param name="elementNumber">The element number for the newly created <see cref="Attribute"/>.</param>
 /// <param name="vr">The value representation for the newly created <see cref="Attribute"/>.</param>
 /// <param name="list">The list of values for the newly create <see cref="Attribute"/></param>
 /// <returns>The position into which the new <see cref="Attribute"/> was inserted.</returns>
 /// <exception cref="System.InvalidCastException">
 /// The <c>list</c> is an <see cref="object"/> array. 
 /// The items in this <c>list</c> are converted to the underlying <c>vr</c> as much as possible. 
 /// However <see cref="System.InvalidCastException"/> may occur during these run-time conversions.
 /// </exception>
 /// <example>This sample shows how to call the AddAttribute method.
 /// <code>
 ///   AttributeSet attributeSet = new DataSet();
 ///   Attribute attribute = new Attribute(0x12345678, VR.AE, "String0", "String1", "String2");
 ///   attributeSet.AddAttribute(attribute);
 /// </code>
 /// </example>
 public int AddAttribute(
     GROUP_NUMBER groupNumber,
     ELEMENT_NUMBER elementNumber,
     VR vr,
     params object[] list)
 {
     return base.Add(new Attribute(groupNumber, elementNumber, vr, list));
 }
Exemplo n.º 37
0
 /// <summary>
 /// Class constructor.
 /// </summary>
 /// <param name="tag">Comparison Tag</param>
 /// <param name="vr">Tag VR.</param>
 /// <param name="commonDataFormat">Data Format for Tag</param>
 public DicomComparisonTag(DvtkData.Dimse.Tag tag, VR vr, BaseCommonDataFormat commonDataFormat)
 {
     _tag = tag;
     _vr = vr;
     _commonDataFormat = commonDataFormat;
 }
Exemplo n.º 38
0
 /// <summary>
 /// Adds an <see cref="Attribute"/> to the <see cref="AttributeSet"/>.
 /// </summary>
 /// <param name="groupElement">The group element hex number for the newly created <see cref="Attribute"/>.</param>
 /// <param name="vr">The value representation for the newly created <see cref="Attribute"/>.</param>
 /// <param name="list">The list of values for the newly create <see cref="Attribute"/></param>
 /// <returns>The position into which the new <see cref="Attribute"/> was inserted.</returns>
 /// <exception cref="System.InvalidCastException">
 /// The <c>list</c> is an <see cref="object"/> array. 
 /// The items in this <c>list</c> are converted to the underlying <c>vr</c> as much as possible. 
 /// However <see cref="System.InvalidCastException"/> may occur during these run-time conversions.
 /// </exception>
 /// <example>This sample shows how to call the AddAttribute method.
 /// <code>
 ///   AttributeSet attributeSet = new DataSet();
 ///   attributeSet.AddAttribute(0x12345678, VR.AE, "String0", "String1", "String2");
 /// </code>
 /// </example>
 public int AddAttribute(
     GROUP_ELEMENT groupElement,
     VR vr,
     params object[] list)
 {
     return base.Add(new Attribute(groupElement, vr, list));
 }
Exemplo n.º 39
0
        public static Type GetDataTypeFromVR(VR vr)
        {
            switch (vr)
            {
            case VR.CodeString:
            case VR.ShortString:
            case VR.LongString:
            case VR.ShortText:
            case VR.LongText:
            case VR.UnlimitedCharacter:
            case VR.UniversalResourceId:
            case VR.UnlimitedText:
            case VR.ApplicationEntity:
            case VR.PersonName:
            case VR.UniqueIdentifier:
            case VR.AgeString:
                return(typeof(string));

            case VR.Date:
            case VR.Time:
            case VR.DateTime:
                return(typeof(System.DateTime?));

            case VR.IntegerString:
                return(typeof(int));

            case VR.DecimalString:
                return(typeof(double));

            case VR.SignedShort:
                return(typeof(short));

            case VR.UnsignedShort:
                return(typeof(ushort));

            case VR.SignedLong:
                return(typeof(int));

            case VR.UnsignedLong:
                return(typeof(uint));

            case VR.AttributeTag:
                return(typeof(Tag));

            case VR.FloatingPointSingle:
                return(typeof(float));

            case VR.FloatingPointDouble:
                return(typeof(double));

            case VR.OtherByteString:
            case VR.OtherWordString:
            case VR.OtherFloatString:
            case VR.OtherDoubleString:
            case VR.Other64BitVeryLongString:
            case VR.OtherLongString:
                return(typeof(byte));

            case VR.Sequence:
                return(typeof(DICOMObject));

            case VR.Signed64BitVeryLong:
                return(typeof(long));

            case VR.Unsigned64BitVeryLong:
                return(typeof(ulong));

            default:
                return(typeof(object));
            }
        }
Exemplo n.º 40
0
 /// <summary>
 /// Creates an <see cref="Attribute"/>
 /// </summary>
 /// <param name="groupElement">The group element hex number.</param>
 /// <param name="vr">The value representation.</param>
 /// <param name="list">The list of values.</param>
 /// <exception cref="System.InvalidCastException">
 /// The <c>list</c> is an <see cref="object"/> array. 
 /// The items in this <c>list</c> are converted to the underlying <c>vr</c> as much as possible. 
 /// However <see cref="System.InvalidCastException"/> may occur during these run-time conversions.
 /// </exception>
 public Attribute(
     GROUP_ELEMENT groupElement,
     VR vr,
     params object[] list)
 {
     Tag tag = groupElement;
     _InitializeAttribute(tag.GroupNumber, tag.ElementNumber, vr, list);
 }
Exemplo n.º 41
0
 public static void WriteVR(DICOMBinaryWriter dw, DICOMWriteSettings settings, VR vr)
 {
     if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
     {
         var abbreviation = VRDictionary.GetAbbreviationFromVR(vr);
         dw.Write(abbreviation);
     }
 }
Exemplo n.º 42
0
        private void _InitializeAttribute(
            GROUP_NUMBER groupNumber,
            ELEMENT_NUMBER elementNumber,
            VR vr,
            params object[] list)
        {
            this.Tag.GroupNumber = groupNumber;
            this.Tag.ElementNumber = elementNumber;
            DicomValueType dicomValue = null;
            if(list!= null)
            {
                switch (vr)
                {
                    case VR.AE:
                    {
                        System.String[] stringArray = _CastToStringArray(list);
                        ApplicationEntity applicationEntity = new ApplicationEntity();
                        applicationEntity.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = applicationEntity;

                        // compute attribute value length
                        Length = 0;
                        if (applicationEntity.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in applicationEntity.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)applicationEntity.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.AS:
                    {
                        System.String[] stringArray = _CastToStringArray(list);
                        AgeString ageString = new AgeString();
                        ageString.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = ageString;

                        // compute attribute value length
                        Length = (System.UInt32)ageString.Values.Count * 4;
                        break;
                    }
                    case VR.AT:
                    {
                        Tag[] tagArray = _CastToTagArray(list);
                        AttributeTag attributeTag = new AttributeTag();
                        attributeTag.Values =
                            new DvtkData.Collections.TagCollection(tagArray);
                        dicomValue = attributeTag;

                        // compute attribute value length
                        Length = (System.UInt32)attributeTag.Values.Count * 4;
                        break;
                    }
                    case VR.CS:
                    {
                        System.String[] stringArray = _CastToStringArray(list);
                        CodeString codeString = new CodeString();
                        codeString.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = codeString;

                        // compute attribute value length
                        Length = 0;
                        if (codeString.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in codeString.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)codeString.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.DA:
                    {
                        System.String[] stringArray = _CastToDateStringArray(list);
                        Date date = new Date();
                        date.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = date;

                        // compute attribute value length
                        Length = 0;
                        if (date.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in date.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length;
                        }
                        break;
                    }
                    case VR.DS:
                    {
                        System.String[] stringArray = _CastToStringArray(list);
                        DecimalString decimalString = new DecimalString();
                        decimalString.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = decimalString;

                        // compute attribute value length
                        Length = 0;
                        if (decimalString.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in decimalString.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)decimalString.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.DT:
                    {
                        System.String[] stringArray = _CastToDateTimeStringArray(list);
                        DateTime dateTime = new DateTime();
                        dateTime.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = dateTime;

                        // compute attribute value length
                        Length = 0;
                        if (dateTime.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in dateTime.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)dateTime.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.FD:
                    {
                        System.Double[] floatingPointDoubleArray = _CastToFloatingPointDoubleArray(list);
                        FloatingPointDouble floatingPointDouble = new FloatingPointDouble();
                        floatingPointDouble.Values =
                            new DvtkData.Collections.DoubleCollection(floatingPointDoubleArray);
                        dicomValue = floatingPointDouble;

                        // compute attribute value length
                        Length = (System.UInt32)floatingPointDouble.Values.Count * 8;
                        break;
                    }
                    case VR.FL:
                    {
                        System.Single[] floatingPointSingleArray = _CastToFloatingPointSingleArray(list);
                        FloatingPointSingle floatingPointSingle = new FloatingPointSingle();
                        floatingPointSingle.Values =
                            new DvtkData.Collections.SingleCollection(floatingPointSingleArray);
                        dicomValue = floatingPointSingle;

                        // compute attribute value length
                        Length = (System.UInt32)floatingPointSingle.Values.Count * 4;
                        break;
                    }
                    case VR.IS:
                    {
                        System.String[] stringArray = _CastToStringArray(list);
                        IntegerString integerString = new IntegerString();
                        integerString.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = integerString;

                        // compute attribute value length
                        Length = 0;
                        if (integerString.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in integerString.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)integerString.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.LO:
                    {
                        System.String[] stringArray = _CastToStringArray(list);
                        LongString longString = new LongString();
                        longString.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = longString;

                        // compute attribute value length
                        Length = 0;
                        if (longString.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in longString.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)longString.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.LT:
                    {
                        if (list.Length > 1) throw new System.ArgumentException();
                        LongText longText = new LongText();
                        Length = 0;
                        if (list.Length == 1)
                        {
                            System.String stringValue = System.Convert.ToString(list[0]);
                            longText.Value = stringValue;
                            Length = (System.UInt32)stringValue.Length;
                        }
                        dicomValue = longText;
                        break;
                    }
                    case VR.OB:
                    {
                        OtherByteString otherByteString = new OtherByteString();
                        if (list.Length > 0)
                        {
                            if (list.Length == 1 && list[0] is System.String)
                            {
                                otherByteString.FileName = (System.String)list[0];
                                Length = (System.UInt32)otherByteString.FileName.Length;
                            }
                            else if (list.Length == 1 && list[0] is BitmapPatternParameters)
                            {
                                otherByteString.BitmapPattern = (BitmapPatternParameters)list[0];
                            }
                            else if (list.Length > 0 && list.Length <= 7)
                            {
                                BitmapPatternParameters pattern = new BitmapPatternParameters();
                                try
                                {
                                    int listLength = list.Length;
                                    if (listLength > 0)
                                    {
                                        pattern.NumberOfRows = System.Convert.ToUInt16(list[0]);
                                        if (listLength == 1) pattern.NumberOfColumns = pattern.NumberOfRows;
                                    }
                                    if (listLength > 1) pattern.NumberOfColumns = System.Convert.ToUInt16(list[1]);
                                    if (listLength > 2) pattern.StartValue = System.Convert.ToInt16(list[2]);
                                    if (listLength > 3) pattern.ValueIncrementPerRowBlock = System.Convert.ToInt16(list[3]);
                                    if (listLength > 4) pattern.ValueIncrementPerColumnBlock = System.Convert.ToInt16(list[4]);
                                    if (listLength > 5) pattern.NumberOfIdenticalValueRows = System.Convert.ToUInt16(list[5]);
                                    if (listLength > 6) pattern.NumberOfIdenticalValueColumns = System.Convert.ToUInt16(list[6]);
                                }
                                catch
                                {
                                    throw new System.ArgumentException();
                                }
                                otherByteString.BitmapPattern = pattern;
                            }
                            else throw new System.ArgumentException();
                        }
                        dicomValue = otherByteString;
                        break;
                    }
                    case VR.OF:
                    {
                        OtherFloatString otherFloatString = new OtherFloatString();
                        if (list.Length > 0)
                        {
                            if (list.Length == 1 && list[0] is System.String)
                            {
                                otherFloatString.FileName = (System.String)list[0];
                                Length = (System.UInt32)otherFloatString.FileName.Length;
                            }
                            else if (list.Length == 1 && list[0] is BitmapPatternParameters)
                            {
                                otherFloatString.BitmapPattern = (BitmapPatternParameters)list[0];
                            }
                            else if (list.Length > 0 && list.Length <= 7)
                            {
                                BitmapPatternParameters pattern = new BitmapPatternParameters();
                                try
                                {
                                    int listLength = list.Length;
                                    if (listLength > 0)
                                    {
                                        pattern.NumberOfRows = System.Convert.ToUInt16(list[0]);
                                        if (listLength == 1) pattern.NumberOfColumns = pattern.NumberOfRows;
                                    }
                                    if (listLength > 1) pattern.NumberOfColumns = System.Convert.ToUInt16(list[1]);
                                    if (listLength > 2) pattern.StartValue = System.Convert.ToInt16(list[2]);
                                    if (listLength > 3) pattern.ValueIncrementPerRowBlock = System.Convert.ToInt16(list[3]);
                                    if (listLength > 4) pattern.ValueIncrementPerColumnBlock = System.Convert.ToInt16(list[4]);
                                    if (listLength > 5) pattern.NumberOfIdenticalValueRows = System.Convert.ToUInt16(list[5]);
                                    if (listLength > 6) pattern.NumberOfIdenticalValueColumns = System.Convert.ToUInt16(list[6]);
                                }
                                catch
                                {
                                    throw new System.ArgumentException();
                                }
                                otherFloatString.BitmapPattern = pattern;
                            }
                            else throw new System.ArgumentException();
                        }
                        dicomValue = otherFloatString;
                        break;
                    }
                    case VR.OW:
                    {
                        OtherWordString otherWordString = new OtherWordString();
                        if (list.Length > 0)
                        {
                            if (list.Length == 1 && list[0] is System.String)
                            {
                                otherWordString.FileName = (System.String)list[0];
                                Length = (System.UInt32)otherWordString.FileName.Length;
                            }
                            else if (list.Length == 1 && list[0] is BitmapPatternParameters)
                            {
                                otherWordString.BitmapPattern = (BitmapPatternParameters)list[0];
                            }
                            else if (list.Length > 0 && list.Length <= 7)
                            {
                                BitmapPatternParameters pattern = new BitmapPatternParameters();
                                try
                                {
                                    int listLength = list.Length;
                                    if (listLength > 0)
                                    {
                                        pattern.NumberOfRows = System.Convert.ToUInt16(list[0]);
                                        if (listLength == 1) pattern.NumberOfColumns = pattern.NumberOfRows;
                                    }
                                    if (listLength > 1) pattern.NumberOfColumns = System.Convert.ToUInt16(list[1]);
                                    if (listLength > 2) pattern.StartValue = System.Convert.ToInt16(list[2]);
                                    if (listLength > 3) pattern.ValueIncrementPerRowBlock = System.Convert.ToInt16(list[3]);
                                    if (listLength > 4) pattern.ValueIncrementPerColumnBlock = System.Convert.ToInt16(list[4]);
                                    if (listLength > 5) pattern.NumberOfIdenticalValueRows = System.Convert.ToUInt16(list[5]);
                                    if (listLength > 6) pattern.NumberOfIdenticalValueColumns = System.Convert.ToUInt16(list[6]);
                                }
                                catch
                                {
                                    throw new System.ArgumentException();
                                }
                                otherWordString.BitmapPattern = pattern;
                            }
                            else throw new System.ArgumentException();
                        }
                        dicomValue = otherWordString;
                        break;
                    }
                    case VR.PN:
                    {
                        System.String[] stringArray = _CastToStringArray(list);
                        PersonName personName = new PersonName();
                        personName.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = personName;

                        // compute attribute value length
                        Length = 0;
                        if (personName.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in personName.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)personName.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.SH:
                    {
                        System.String[] stringArray = _CastToStringArray(list);
                        ShortString shortString = new ShortString();
                        shortString.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = shortString;

                        // compute attribute value length
                        Length = 0;
                        if (shortString.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in shortString.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)shortString.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.SL:
                    {
                        System.Int32[] signedLongArray = _CastToSignedLongArray(list);
                        SignedLong signedLong = new SignedLong();
                        signedLong.Values =
                            new DvtkData.Collections.Int32Collection(signedLongArray);
                        dicomValue = signedLong;

                        // compute attribute value length
                        Length = (System.UInt32)signedLong.Values.Count * 4;
                        break;
                    }
                    case VR.SQ:
                    {
                        SequenceItem[] sequenceItemArray = _CastToSequenceItemArray(list);
                        SequenceOfItems sequenceOfItems = new SequenceOfItems();
                        sequenceOfItems.Sequence = new Sequence();
                        foreach (SequenceItem item in sequenceItemArray)
                        {
                            sequenceOfItems.Sequence.Add(item);
                        }
                        dicomValue = sequenceOfItems;

                        // set length to Undefined
                        Length = 0xFFFFFFFF;
                        break;
                    }
                    case VR.SS:
                    {
                        System.Int16[] signedShortArray = _CastToSignedShortArray(list);
                        SignedShort signedShort = new SignedShort();
                        signedShort.Values =
                            new DvtkData.Collections.Int16Collection(signedShortArray);
                        dicomValue = signedShort;

                        // compute attribute value length
                        Length = (System.UInt32)signedShort.Values.Count * 2;
                        break;
                    }
                    case VR.ST:
                    {
                        if (list.Length > 1) throw new System.ArgumentException();
                        ShortText shortText = new ShortText();
                        Length = 0;
                        if (list.Length == 1)
                        {
                            System.String stringValue = System.Convert.ToString(list[0]);
                            shortText.Value = stringValue;
                            Length = (System.UInt32)shortText.Value.Length;
                        }
                        dicomValue = shortText;
                        break;
                    }
                    case VR.TM:
                    {
                        System.String[] stringArray = _CastToTimeStringArray(list);
                        Time time = new Time();
                        time.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = time;

                        // compute attribute value length
                        Length = 0;
                        if (time.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in time.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)time.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.UI:
                    {
                        System.String[] stringArray = _CastUniqueIdentifierStringArray(list);
                        UniqueIdentifier uniqueIdentifier = new UniqueIdentifier();
                        uniqueIdentifier.Values =
                            new DvtkData.Collections.StringCollection(stringArray);
                        dicomValue = uniqueIdentifier;

                        // compute attribute value length
                        Length = 0;
                        if (uniqueIdentifier.Values.Count > 0)
                        {
                            System.UInt32 length = 0;
                            foreach(String data in uniqueIdentifier.Values)
                            {
                                length += (System.UInt32)data.Length;
                            }
                            Length = length + (System.UInt32)uniqueIdentifier.Values.Count - 1;
                        }
                        break;
                    }
                    case VR.UL:
                    {
                        System.UInt32[] unsignedLongArray = _CastToUnsignedLongArray(list);
                        UnsignedLong unsignedLong = new UnsignedLong();
                        unsignedLong.Values =
                            new DvtkData.Collections.UInt32Collection(unsignedLongArray);
                        dicomValue = unsignedLong;

                        // compute attribute value length
                        Length = (System.UInt32)unsignedLong.Values.Count * 4;
                        break;
                    }
                    case VR.UN:
                    {
                        Unknown unknown = new Unknown();
                        Length = 0;
                        if (list.Length == 0 ||
                            list[0] is System.Byte)
                        {
                            System.Byte[] byteArray = _CastToByteArray(list);
                            unknown.ByteArray = byteArray;
                            Length = (System.UInt32)unknown.ByteArray.Length;
                        }
                        else throw new System.ArgumentException();
                        dicomValue = unknown;
                        break;
                    }
                    case VR.US:
                    {
                        System.UInt16[] unsignedShortArray = _CastToUnsignedShortArray(list);
                        UnsignedShort unsignedShort = new UnsignedShort();
                        unsignedShort.Values =
                            new DvtkData.Collections.UInt16Collection(unsignedShortArray);
                        dicomValue = unsignedShort;

                        // compute attribute value length
                        Length = (System.UInt32)unsignedShort.Values.Count * 2;
                        break;
                    }
                    case VR.UT:
                    {
                        if (list.Length > 1) throw new System.ArgumentException();
                        UnlimitedText unlimitedText = new UnlimitedText();
                        Length = 0;
                        if (list.Length == 1)
                        {
                            System.String stringValue = System.Convert.ToString(list[0]);
                            unlimitedText.Value = stringValue;
                            Length = (System.UInt32)unlimitedText.Value.Length;
                        }
                        dicomValue = unlimitedText;
                        break;
                    }
                    default:
                        dicomValue = null;
                        break;
                }
            }
            else
            {
                dicomValue = null;
            }
            this._ValueField = dicomValue;
        }
Exemplo n.º 43
0
        // -----------------------------
        // - Begin constructors region -
        // -----------------------------

        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="tag">The tag of this instance.</param>
        /// <param name="vr">The VR of this instance.</param>
        /// <param name="parent">The parent of this instance.</param>
        public SingleAttribute(Tag tag, VR vr, AttributeSet parent)
            : base(tag, vr, parent)
        {
            // Do nothing.
        }
Exemplo n.º 44
0
Arquivo: VR.cs Projeto: ewcasas/DVTK
        public static string ToString(VR valueRepresentations, string seperator)
        {
            string stringRepresentation = string.Empty;

            foreach(VR vr in Enum.GetValues(typeof (VR)))
            {
                if (vr != VR.None)
                {
                    if ((valueRepresentations & vr) == vr)
                    {
                        if (stringRepresentation.Length == 0)
                        {
                            stringRepresentation = vr.ToString();
                        }
                        else
                        {
                            stringRepresentation += seperator + vr.ToString();
                        }
                    }
                }
            }

            return(stringRepresentation);
        }
Exemplo n.º 45
0
        public static byte[] GetStringBytes(VR vr, IDICOMElement el, StringEncoding enc)
        {
            string data;

            byte[] unpadded;
            switch (vr)
            {
            case VR.AgeString:
                var age = el as AgeString;
                data     = StringDataComposer.ComposeMultipleString(age.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.ApplicationEntity:
                var ae = el as ApplicationEntity;
                data     = StringDataComposer.ComposeMultipleString(ae.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.CodeString:
                var cs = el as CodeString;
                data     = StringDataComposer.ComposeMultipleString(cs.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.Date:
                var d = el as Date;
                data     = StringDataComposer.ComposeDates(d.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.DateTime:
                var dt = el as DateTime;
                data     = StringDataComposer.ComposeDateTimes(dt.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.DecimalString:
                var ds = el as DecimalString;
                data     = StringDataComposer.ComposeDecimalString(ds.DataContainer.MultipicityValue.ToArray());
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.IntegerString:
                var iSt = el as IntegerString;
                data     = StringDataComposer.ComposeIntegerString(iSt.DataContainer.MultipicityValue.ToArray());
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.LongString:
                var ls = el as LongString;
                data     = StringDataComposer.ComposeMultipleString(ls.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.LongText:
                var lt = el as LongText;
                data     = StringDataComposer.ComposeMultipleString(lt.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.PersonName:
                var pn = el as PersonName;
                data     = StringDataComposer.ComposeMultipleString(pn.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.ShortString:
                var ss = el as ShortString;
                data     = StringDataComposer.ComposeMultipleString(ss.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.ShortText:
                var st = el as ShortText;     // VM=1 ALWAYS
                unpadded = GetEncodedBytes(st.Data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.Time:
                var t = el as Time;
                data     = StringDataComposer.ComposeTimes(t.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.UnlimitedText:
                var ut = el as UnlimitedText;     // VM=1 ALWAYS
                unpadded = GetEncodedBytes(ut.Data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.UnlimitedCharacter:
                var uc = el as UnlimitedCharacter;
                data     = StringDataComposer.ComposeMultipleString(uc.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.UniqueIdentifier:
                var ui = el as UniqueIdentifier;
                data     = StringDataComposer.ComposeMultipleString(ui.Data_);
                unpadded = GetEncodedBytes(data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            case VR.UniversalResourceId:
                var uid = el as UniversalResourceId;     // VM=1 ALWAYS
                unpadded = GetEncodedBytes(uid.Data, enc);
                return(DataRestriction.EnforceEvenLength(unpadded, vr));

            default:
                return(null);
            }
        }
Exemplo n.º 46
0
        // Start is called before the first frame update
        void Start()
        {
            if (VR.GetPlatform() == VR.Platform.None)
            {
                this.enabled = false;
                return;
            }

            RightControllerButton0  = TransformUtils.FindTransform("AButton");
            RightControllerButton1  = TransformUtils.FindTransform("BButton");
            RightControllerJoystick = TransformUtils.FindTransform("RightJoystickCenter");
            RightControllerTrigger  = TransformUtils.FindTransform("RightTriggerCenter");
            RightControllerGrip     = TransformUtils.FindTransform("RightGripCenter");

            LeftControllerButton0  = TransformUtils.FindTransform("XButton");
            LeftControllerButton1  = TransformUtils.FindTransform("YButton");
            LeftControllerJoystick = TransformUtils.FindTransform("LeftJoystickCenter");
            LeftControllerTrigger  = TransformUtils.FindTransform("LeftTriggerCenter");
            LeftControllerGrip     = TransformUtils.FindTransform("LeftGripCenter");

            MenuButton = TransformUtils.FindTransform("MenuButton");
            HomeButton = TransformUtils.FindTransform("HomeButton");

            leftController  = TransformUtils.FindTransform("LeftControllerAnchor");
            rightController = TransformUtils.FindTransform("RightControllerAnchor");

            transform.parent        = rightController;
            transform.localPosition = Vector3.zero;
            transform.localRotation = Quaternion.identity;

            rightVRInputToTransform = new Hashtable();

            rightVRInputToTransform.Add(VRInput.Button0, RightControllerButton0);
            rightVRInputToTransform.Add(VRInput.Button1, RightControllerButton1);
            rightVRInputToTransform.Add(VRInput.JoystickClick, RightControllerJoystick);
            rightVRInputToTransform.Add(VRInput.JoystickHorizontal, RightControllerJoystick);
            rightVRInputToTransform.Add(VRInput.JoystickVertical, RightControllerJoystick);
            rightVRInputToTransform.Add(VRInput.Trigger, RightControllerTrigger);
            rightVRInputToTransform.Add(VRInput.Grip, RightControllerGrip);
            rightVRInputToTransform.Add(VRInput.MenuButton, HomeButton);

            leftVRInputToTransform = new Hashtable();

            leftVRInputToTransform.Add(VRInput.Button0, LeftControllerButton0);
            leftVRInputToTransform.Add(VRInput.Button1, LeftControllerButton1);
            leftVRInputToTransform.Add(VRInput.JoystickClick, LeftControllerJoystick);
            leftVRInputToTransform.Add(VRInput.JoystickHorizontal, LeftControllerJoystick);
            leftVRInputToTransform.Add(VRInput.JoystickVertical, LeftControllerJoystick);
            leftVRInputToTransform.Add(VRInput.Trigger, LeftControllerTrigger);
            leftVRInputToTransform.Add(VRInput.Grip, LeftControllerGrip);
            leftVRInputToTransform.Add(VRInput.MenuButton, MenuButton);

            //Create hashtable linking generic vrinputs to OVRInputs
            VRInputToOVRButton = new Hashtable();
            VRInputToOVRButton.Add(VRInput.Button0, OVRInput.Button.One);
            VRInputToOVRButton.Add(VRInput.Button1, OVRInput.Button.Two);
            VRInputToOVRButton.Add(VRInput.JoystickClick, OVRInput.Button.PrimaryThumbstick);
            VRInputToOVRButton.Add(VRInput.JoystickHorizontal, OVRInput.Button.PrimaryThumbstickRight);
            VRInputToOVRButton.Add(VRInput.JoystickVertical, OVRInput.Button.PrimaryThumbstickUp);
            VRInputToOVRButton.Add(VRInput.Trigger, OVRInput.Button.PrimaryIndexTrigger);
            VRInputToOVRButton.Add(VRInput.Grip, OVRInput.Button.PrimaryHandTrigger);
            VRInputToOVRButton.Add(VRInput.MenuButton, OVRInput.Button.Start);

            VRInputToOVRButtonAlternate = new Hashtable();
            VRInputToOVRButtonAlternate.Add(VRInput.Button0, OVRInput.Button.One);
            VRInputToOVRButtonAlternate.Add(VRInput.Button1, OVRInput.Button.Two);
            VRInputToOVRButtonAlternate.Add(VRInput.JoystickClick, OVRInput.Button.PrimaryThumbstick);
            VRInputToOVRButtonAlternate.Add(VRInput.JoystickHorizontal, OVRInput.Button.PrimaryThumbstickLeft);
            VRInputToOVRButtonAlternate.Add(VRInput.JoystickVertical, OVRInput.Button.PrimaryThumbstickDown);
            VRInputToOVRButtonAlternate.Add(VRInput.Trigger, OVRInput.Button.PrimaryIndexTrigger);
            VRInputToOVRButtonAlternate.Add(VRInput.Grip, OVRInput.Button.PrimaryHandTrigger);
            VRInputToOVRButtonAlternate.Add(VRInput.MenuButton, OVRInput.Button.Start);
        }
Exemplo n.º 47
0
        /// <summary>
        ///     Reads string data and creates the appropriate DICOM element
        /// </summary>
        /// <param name="data">the string data as an object (fresh from the DICOM reader)</param>
        /// <param name="vr">the VR of the element to be generated</param>
        /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns>
        public static IDICOMElement ReadString(VR vr, Tag tag, object data, StringEncoding enc)
        {
            switch (vr)
            {
            case VR.AgeString:
                return(new AgeString(tag, DICOMString.Read(data as byte[], enc)));

            case VR.ApplicationEntity:
                return(new ApplicationEntity(tag, DICOMString.Read(data as byte[], enc)));

            case VR.CodeString:
                return(new CodeString()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.Date:
                var dateData = DICOMString.Read(data as byte[], enc);
                if (dateData.Any(b => b == '-'))     // Range ('-')
                {
                    var parts = dateData.Split('-');
                    var dates = parts.Select(p => StringDataParser.ParseDate(p)).OrderBy(p => p).ToArray();
                    return(new Date(tag, dates)
                    {
                        IsRange = true
                    });
                }
                else
                {
                    return(new Date(tag, dateData));
                }

            case VR.DateTime:
                var dateTimeData = DICOMString.Read(data as byte[], enc);
                if (dateTimeData.Any(b => b == '-'))     // Range ('-')
                {
                    var parts = dateTimeData.Split('-');
                    var dates = parts.Select(p => StringDataParser.ParseDateTime(p)).OrderBy(p => p).ToArray();
                    return(new DateTime(tag, dates)
                    {
                        IsRange = true
                    });
                }
                else
                {
                    return(new DateTime(tag, dateTimeData));
                }

            case VR.DecimalString:
                return(new DecimalString(tag, DICOMString.Read(data as byte[], enc)));

            case VR.IntegerString:
                return(new IntegerString(tag, DICOMString.Read(data as byte[], enc)));

            case VR.LongString:
                return(new LongString(tag, DICOMString.Read(data as byte[], enc)));

            case VR.LongText:
                return(new LongText()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.PersonName:
                return(new PersonName()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.ShortString:
                return(new ShortString()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.ShortText:
                return(new ShortText(tag, DICOMString.Read(data as byte[], enc)));

            case VR.Time:
                var timeData = DICOMString.Read(data as byte[], enc);
                if (timeData.Any(b => b == '-'))     // Range ('-')
                {
                    var parts = timeData.Split('-');
                    var dates = parts.Select(p => StringDataParser.ParseTime(p)).OrderBy(p => p).ToArray();
                    return(new Time(tag, dates)
                    {
                        IsRange = true
                    });
                }
                else
                {
                    return(new Time(tag, timeData));
                }

            case VR.UnlimitedCharacter:
                return(new UnlimitedCharacter()
                {
                    Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc)
                });

            case VR.UnlimitedText:
                return(new UnlimitedText(tag, DICOMString.Read(data as byte[], enc)));

            case VR.UniqueIdentifier:
                return(new UniqueIdentifier(tag, DICOMString.Read(data as byte[], enc)));

            case VR.UniversalResourceId:
                return(new UniversalResourceId(tag, DICOMString.Read(data as byte[], enc)));

            default:
                return(new Unknown(tag, data as byte[]));
            }
        }
Exemplo n.º 48
0
 /// <summary>
 /// To string override to visualize tag and vr of element
 /// </summary>
 /// <returns></returns>
 public override string ToString()
 {
     return(string.Format("{0}, {1}, {2}", Tag.ToString(), VR.ToString(), string.Join(" | ", DData_.ToArray())));
 }
Exemplo n.º 49
0
 /// <summary>
 ///     Finds all DICOM elements that match a VR type
 /// </summary>
 /// <param name="vrToFind">the VR type to find</param>
 /// <returns>a list of all elements that meet the search criteria</returns>
 public List <IDICOMElement> FindAll(VR vrToFind)
 {
     return(AllElements.Where(el => el.IsVR(vrToFind)).ToList());
 }