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 }); }
public override IMultiPatchShape <IPointZ> 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 patches = new List <IPatch <IPointZ> >(); 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 points = new List <IPointZ>(); for (var iPointIndex = startIndex; iPointIndex <= endIndex; iPointIndex++) { var pointField = Point(pointsOffset, numPoints, iPointIndex); var point = pointField.Read(reader, origin); points.Add(point); } var patch = new PatchZ(); patch.PatchType = PartType(numParts, i).Read(reader, origin); patch.Points = points; patches.Add(patch); } var minZ = MinZ(pointsOffset, numPoints).Read(reader, origin); var maxZ = MaxZ(pointsOffset, numPoints).Read(reader, origin); var minM = MinM(pointsOffset, numPoints).Read(reader, origin); var maxM = MaxM(pointsOffset, numPoints).Read(reader, origin); var boxZ = new BoundingBox <IPointZ>() { Min = new PointZ() { X = box.Min.X, Y = box.Min.Y, Z = minZ, M = minM }, Max = new PointZ() { X = box.Max.X, Y = box.Max.Y, Z = maxZ, M = maxM } }; return(new MultiPatchShape() { Box = boxZ, Patches = patches }); }