internal static ShapeContent ReadAnonymousPolyLineMGeometry(BinaryReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } IEnumerable <byte> content = EndianBitConverter .GetLittleEndianBytes((int)ShapeType.PolyLineM) .Concat(reader.ReadBytes(BoundingBoxByteLength.ToInt32())); var numberOfPartsAsBytes = reader.ReadBytes(4); var numberOfParts = EndianBitConverter.ToInt32LittleEndian(numberOfPartsAsBytes); var numberOfPointsAsBytes = reader.ReadBytes(4); var numberOfPoints = EndianBitConverter.ToInt32LittleEndian(numberOfPointsAsBytes); content = content .Concat(numberOfPartsAsBytes) .Concat(numberOfPointsAsBytes) .Concat(reader.ReadBytes(numberOfParts * 4)) .Concat(reader.ReadBytes(numberOfPoints * 16)); if (reader.BaseStream.CanSeek && reader.BaseStream.Position != reader.BaseStream.Length) { content = content .Concat(reader.ReadBytes(MeasureRangeByteLength.ToInt32())) .Concat(reader.ReadBytes(numberOfPoints * 8)); } //else try-catch-EndOfStreamException?? or only support seekable streams? return(new AnonymousShapeContent(ShapeType.PolyLineM, content.ToArray())); }
public static ShapeContent ReadAnonymous(BinaryReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } var shapeTypeAsBytes = reader.ReadBytes(4); var shapeType = EndianBitConverter.ToInt32LittleEndian(shapeTypeAsBytes); if (!Enum.IsDefined(typeof(ShapeType), shapeType)) { throw new ShapeRecordContentException("The Shape Type field does not contain a known type of shape."); } var content = NullShapeContent.Instance; switch ((ShapeType)shapeType) { case ShapeType.NullShape: break; case ShapeType.Point: content = PointShapeContent.ReadAnonymousPointGeometry(reader); break; case ShapeType.PolyLineM: content = PolyLineMShapeContent.ReadAnonymousPolyLineMGeometry(reader); break; default: throw new ShapeRecordContentException($"The Shape Type {shapeType} is currently not suppported."); } return(content); }