internal static ShapeContent ReadPolyLineMFromRecord(BinaryReader reader, ShapeRecordHeader header) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } reader.ReadBytes(BoundingBoxByteLength.ToInt32()); // skip BoundingBox var numberOfParts = reader.ReadInt32LittleEndian(); var numberOfPoints = reader.ReadInt32LittleEndian(); var parts = new int[numberOfParts]; for (var partIndex = 0; partIndex < numberOfParts; partIndex++) { parts[partIndex] = reader.ReadInt32LittleEndian(); } var points = new PointM[numberOfPoints]; for (var pointIndex = 0; pointIndex < numberOfPoints; pointIndex++) { points[pointIndex] = new PointM( reader.ReadDoubleLittleEndian(), reader.ReadDoubleLittleEndian()); } var contentLengthWithoutMeasures = ContentHeaderLength .Plus(ByteLength.Int32.Times(numberOfParts)) // Parts .Plus(ByteLength.Double.Times(numberOfPoints * 2)); // Points(X,Y) if (header.ContentLength > contentLengthWithoutMeasures) { reader.ReadBytes(MeasureRangeByteLength.ToInt32()); // skip MeasureRange for (var measureIndex = 0; measureIndex < numberOfPoints; measureIndex++) { points[measureIndex].ChangeMeasurement(reader.ReadDoubleLittleEndian()); // Points[i].M } } var lines = new ILineString[numberOfParts]; var toPointIndex = points.Length; for (var partIndex = numberOfParts - 1; partIndex >= 0; partIndex--) { var fromPointIndex = parts[partIndex]; lines[partIndex] = new LineString( new PointSequence(new ArraySegment <PointM>(points, fromPointIndex, toPointIndex - fromPointIndex)), GeometryConfiguration.GeometryFactory); toPointIndex = fromPointIndex; } return(new PolyLineMShapeContent(new MultiLineString(lines))); }
internal static ShapeContent ReadPolyLineMFromRecord(BinaryReader reader, ShapeRecordHeader header) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } var box = new BoundingBox2D( reader.ReadDoubleLittleEndian(), reader.ReadDoubleLittleEndian(), reader.ReadDoubleLittleEndian(), reader.ReadDoubleLittleEndian()); var numberOfParts = reader.ReadInt32LittleEndian(); var numberOfPoints = reader.ReadInt32LittleEndian(); var parts = new int[numberOfParts]; for (var partIndex = 0; partIndex < numberOfParts; partIndex++) { parts[partIndex] = reader.ReadInt32LittleEndian(); } var points = new Point[numberOfPoints]; for (var pointIndex = 0; pointIndex < numberOfPoints; pointIndex++) { points[pointIndex] = new Point( reader.ReadDoubleLittleEndian(), reader.ReadDoubleLittleEndian()); } var contentLengthWithoutMeasures = ContentHeaderLength .Plus(ByteLength.Int32.Times(numberOfParts)) // Parts .Plus(ByteLength.Double.Times(numberOfPoints * 2)); // Points(X,Y) double[] measures; if (header.ContentLength > contentLengthWithoutMeasures) { measures = new double[numberOfPoints]; reader.ReadBytes(MeasureRangeByteLength.ToInt32()); // skip MeasureRange for (var measureIndex = 0; measureIndex < numberOfPoints; measureIndex++) { measures[measureIndex] = reader.ReadDoubleLittleEndian(); } } else { measures = new double[0]; } return(new PolyLineMShapeContent(new PolyLineM(box, parts, points, measures))); }
public void ToInt32ReturnsExpectedValue() { var value = _fixture.Create <int>().AsByteLengthValue(); var sut = new ByteLength(value); var result = sut.ToInt32(); Assert.Equal(value, result); }
public ByteOffset Plus(ByteLength other) { return(new ByteOffset(_value + other.ToInt32())); }
public ByteOffset Plus(ByteLength other) => new ByteOffset(_value + other.ToInt32());