public override IMultiPartGeometry <IPointM> Read(BinaryReader reader, WordCount origin) { var box = Box.Read(reader, origin); var numParts = NumParts.Read(reader, origin); var numPoints = NumPoints.Read(reader, origin); var pointStartIndices = new List <int>(); for (var i = 0; i < numParts; i++) { var pointStartIndex = Part(i).Read(reader, origin); pointStartIndices.Add(pointStartIndex); } var parts = new List <IMultiPointGeometry <IPointM> >(); var pointsOffset = OffsetPoints(numParts); for (var i = 0; i < pointStartIndices.Count; i++) { var startIndex = pointStartIndices[i]; var endIndex = (pointStartIndices.Count > (i + 1) ? pointStartIndices[i + 1] : numPoints) - 1; var part = new MultiPointGeometry <IPointM>(); for (var iPointIndex = startIndex; iPointIndex <= endIndex; iPointIndex++) { var point = Point(pointsOffset, numPoints, iPointIndex).Read(reader, origin); part.Points.Add(point); } parts.Add(part); } var minM = MinM(pointsOffset, numPoints).Read(reader, origin); var maxM = MaxM(pointsOffset, numPoints).Read(reader, origin); var boxM = new BoundingBox <IPointM>() { Min = new PointM() { X = box.Min.X, Y = box.Min.Y, M = minM }, Max = new PointM() { X = box.Max.X, Y = box.Max.Y, M = maxM } }; return(new MultiPartGeometry <IPointM>() { Box = boxM, Parts = parts }); }
public override IMultiPartGeometry <IPoint> Read(BinaryReader reader, WordCount origin) { var box = Box.Read(reader, origin); var numParts = NumParts.Read(reader, origin); var numPoints = NumPoints.Read(reader, origin); var pointStartIndices = new List <int>(); for (var i = 0; i < numParts; i++) { var pointStartIndex = Part(i).Read(reader, origin); pointStartIndices.Add(pointStartIndex); } var parts = new List <IMultiPointGeometry <IPoint> >(); for (var i = 0; i < pointStartIndices.Count; i++) { var startIndex = pointStartIndices[i]; var endIndex = (pointStartIndices.Count > (i + 1) ? pointStartIndices[i + 1] : numPoints) - 1; var part = new MultiPointGeometry <IPoint>(); for (var iPointIndex = startIndex; iPointIndex <= endIndex; iPointIndex++) { var point = Point(numParts, iPointIndex).Read(reader, origin); part.Points.Add(point); } parts.Add(part); } return(new MultiPartGeometry <IPoint>() { Box = box, Parts = parts }); }