public BeamLimitingDevicePosition()
        {
            si = new SequenceItem();

            //Add blank RTBeamDeviceType
            CodeString cs = new CodeString();
            cs.Tag.Id = TagHelper.RTBEAM_LIMITING_DEVICE_TYPE;
            si.AddObject(cs);

            //Add blank Leaf Jaw Positions
            DecimalString ds = new DecimalString();
            ds.Tag.Id = TagHelper.LEAF_JAW_POSITIONS;
            si.AddObject(ds);
        }
예제 #2
0
        public static List<SequenceItem> ReadChildren(byte[] data, Boolean isLittleEndian)
        {
            List<SequenceItem> items = new List<SequenceItem>();
            using (BinaryReader r = new BinaryReader(new MemoryStream(data)))
            {
                while (r.BaseStream.Position < r.BaseStream.Length)
                {
                    SequenceItem si = new SequenceItem();
                    //Read length past start tag
                    byte[] dLength = new byte[4];
                    r.Read(dLength, 0, 4);
                    r.Read(dLength, 0, 4);

                    if (ArrayHelper.isEqualArray(dLength, Constants.INDEFINITE_LENGTH))
                    {
                        //INDEFINITE LENGTH: Mark current position and find end
                        si.LengthType = Constants.LengthType.INDEFINITE;
                        long dataStart = r.BaseStream.Position;
                        long dataEnd = FindEndOfSequenceItem(r, isLittleEndian);

                        if (dataEnd == -1)
                        {
                            //Didn't find end tag
                            Console.WriteLine("Could not find sequence item end tag while decoding sequence items in sequence");
                            return null;
                        }
                        else
                        {
                            //Read dicomObject from dataStart to dataEnd
                            r.BaseStream.Position = dataStart;
                            while (r.BaseStream.Position < dataEnd)
                            {
                                si.AddObject(DICOMReader.ReadSequenceItem(r, isLittleEndian));
                            }
                        }
                    }
                    else
                    {
                        //Read dicomObject from current position to end of length
                        si.LengthType = Constants.LengthType.FINITE;
                        int objectsLength = BitConverter.ToInt32(dLength, 0);
                        if (!isLittleEndian) { objectsLength = BitConverter.ToInt32(ArrayHelper.ReverseArray(dLength), 0); }
                        int dataEnd = (int)r.BaseStream.Position + objectsLength;
                        while (r.BaseStream.Position < dataEnd)
                        {
                            si.AddObject(DICOMReader.ReadObject(r, isLittleEndian));
                        }
                    }

                    items.Add(si);
                }
                return items;
            }
        }