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); }
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; } }