Exemplo n.º 1
0
        internal static ShapeContent ReadPolygonGeometry(BinaryReader reader)
        {
            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());
            }

            return(new PolygonShapeContent(new Polygon(box, parts, points)));
        }
 public BoundingBox2D ExpandWith(BoundingBox2D other)
 {
     return(new BoundingBox2D(
                Math.Min(XMin, other.XMin),
                Math.Min(YMin, other.YMin),
                Math.Max(XMax, other.XMax),
                Math.Max(YMax, other.YMax)));
 }
Exemplo n.º 3
0
 public Polygon(
     BoundingBox2D boundingBox,
     int[] parts,
     Point[] points)
 {
     BoundingBox    = boundingBox ?? throw new ArgumentNullException(nameof(boundingBox));
     Parts          = parts ?? throw new ArgumentNullException(nameof(parts));
     Points         = points ?? throw new ArgumentNullException(nameof(points));
     NumberOfParts  = parts.Length;
     NumberOfPoints = points.Length;
 }
Exemplo n.º 4
0
        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)));
        }
Exemplo n.º 5
0
 public PolyLineM(
     BoundingBox2D boundingBox,
     int[] parts,
     Point[] points,
     double[] measures)
 {
     BoundingBox    = boundingBox ?? throw new ArgumentNullException(nameof(boundingBox));
     Parts          = parts ?? throw new ArgumentNullException(nameof(parts));
     Points         = points ?? throw new ArgumentNullException(nameof(points));
     Measures       = measures ?? throw new ArgumentNullException(nameof(measures));
     NumberOfParts  = parts.Length;
     NumberOfPoints = points.Length;
     MeasureRange   = MeasureRange.FromMeasures(measures);
 }
Exemplo n.º 6
0
        internal static ShapeContent ReadPolyLineMGeometry(BinaryReader reader)
        {
            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());
            }

            double[] measures;
            if (reader.BaseStream.CanSeek && reader.BaseStream.Position != reader.BaseStream.Length)
            {
                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 ExpandWithReturnsExpectedResult(BoundingBox2D sut, BoundingBox2D other, BoundingBox2D expected)
        {
            var result = sut.ExpandWith(other);

            Assert.Equal(expected, result);
        }
 public bool Equals(BoundingBox2D other, double tolerance) =>
 other != null &&
 (double.IsNaN(XMin) && double.IsNaN(other.XMin) || Math.Abs(XMin - other.XMin) < tolerance) &&
 (double.IsNaN(YMin) && double.IsNaN(other.YMin) || Math.Abs(YMin - other.YMin) < tolerance) &&
 (double.IsNaN(XMax) && double.IsNaN(other.XMax) || Math.Abs(XMax - other.XMax) < tolerance) &&
 (double.IsNaN(YMax) && double.IsNaN(other.YMax) || Math.Abs(YMax - other.YMax) < tolerance);
 public bool Equals(BoundingBox2D other) =>
 other != null &&
 (double.IsNaN(XMin) && double.IsNaN(other.XMin) || XMin.Equals(other.XMin)) &&
 (double.IsNaN(YMin) && double.IsNaN(other.YMin) || YMin.Equals(other.YMin)) &&
 (double.IsNaN(XMax) && double.IsNaN(other.XMax) || XMax.Equals(other.XMax)) &&
 (double.IsNaN(YMax) && double.IsNaN(other.YMax) || YMax.Equals(other.YMax));