コード例 #1
0
        public void normalizeMultiPolygonTwoHoles()
        {
            List <GeoCoord> verts =
                new List <GeoCoord>
            {
                new GeoCoord(0, 0),
                new GeoCoord(0, 0.4),
                new GeoCoord(0.4, 0.4),
                new GeoCoord(0.4, 0)
            };

            LinkedGeo.LinkedGeoLoop outer = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer);
            createLinkedLoop(ref outer, verts, 4);

            List <GeoCoord> verts2 =
                new List <GeoCoord>
            {
                new GeoCoord(0.1, 0.1),
                new GeoCoord(0.2, 0.2),
                new GeoCoord(0.1, 0.2)
            };

            LinkedGeo.LinkedGeoLoop inner1 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(inner1);
            createLinkedLoop(ref inner1, verts2, 3);

            List <GeoCoord> verts3 =
                new List <GeoCoord>
            {
                new GeoCoord(0.2, 0.2),
                new GeoCoord(0.3, 0.3),
                new GeoCoord(0.2, 0.3)
            };

            LinkedGeo.LinkedGeoLoop inner2 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(inner2);
            createLinkedLoop(ref inner2, verts3, 3);

            LinkedGeo.LinkedGeoPolygon polygon = new LinkedGeo.LinkedGeoPolygon();
            LinkedGeo.addLinkedLoop(ref polygon, ref inner2);
            LinkedGeo.addLinkedLoop(ref polygon, ref outer);
            LinkedGeo.addLinkedLoop(ref polygon, ref inner1);

            int result = LinkedGeo.normalizeMultiPolygon(ref polygon);

            Assert.True(result == LinkedGeo.NORMALIZATION_SUCCESS, "No error code returned");

            Assert.True
            (
                LinkedGeo.countLinkedPolygons(ref polygon) == 1,
                "Polygon count correct for 2 holes"
            );
            Assert.True(polygon.first == outer, "Got expected outer loop");
            Assert.True
            (
                LinkedGeo.countLinkedLoops(ref polygon) == 3,
                "Loop count on first polygon correct"
            );
        }
コード例 #2
0
        public void normalizeMultiPolygonSingle()
        {
            List <GeoCoord> verts =
                new List <GeoCoord>
            {
                new GeoCoord(0, 0),
                new GeoCoord(0, 1),
                new GeoCoord(1, 1)
            };

            LinkedGeo.LinkedGeoLoop outer = new LinkedGeo.LinkedGeoLoop();
            Assert.True(outer != null);
            createLinkedLoop(ref outer, verts, 3);

            LinkedGeo.LinkedGeoPolygon polygon = new LinkedGeo.LinkedGeoPolygon();
            LinkedGeo.addLinkedLoop(ref polygon, ref outer);

            int result = LinkedGeo.normalizeMultiPolygon(ref polygon);

            Assert.True(result == LinkedGeo.NORMALIZATION_SUCCESS, "No error code returned");

            Assert.True(LinkedGeo.countLinkedPolygons(ref polygon) == 1, "Polygon count correct");
            Assert.True(LinkedGeo.countLinkedLoops(ref polygon) == 1, "Loop count correct");
            Assert.True(polygon.first == outer, "Got expected loop");
        }
コード例 #3
0
        public void normalizeMultiPolygonNoOuterLoops()
        {
            GeoCoord[] verts1 =
            {
                new GeoCoord(0, 0),
                new GeoCoord(1, 1),
                new GeoCoord(0, 1)
            };

            LinkedGeo.LinkedGeoLoop outer1 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer1);
            createLinkedLoop(ref outer1, verts1.ToList(), 3);

            GeoCoord[] verts2 =
            {
                new GeoCoord(2, 2),
                new GeoCoord(3, 3),
                new GeoCoord(2, 3)
            };

            LinkedGeo.LinkedGeoLoop outer2 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer2);
            createLinkedLoop(ref outer2, verts2.ToList(), 3);

            LinkedGeo.LinkedGeoPolygon polygon = new LinkedGeo.LinkedGeoPolygon();
            LinkedGeo.addLinkedLoop(ref polygon, ref outer1);
            LinkedGeo.addLinkedLoop(ref polygon, ref outer2);

            int result = LinkedGeo.normalizeMultiPolygon(ref polygon);

            Assert.True
            (
                result == LinkedGeo.NORMALIZATION_ERR_UNASSIGNED_HOLES,
                "Expected error code returned"
            );

            Assert.True(LinkedGeo.countLinkedPolygons(ref polygon) == 1,
                        "Polygon count correct");
            Assert.True
            (
                LinkedGeo.countLinkedLoops(ref polygon) == 0,
                "Loop count as expected with invalid input"
            );
        }
コード例 #4
0
        public void normalizeMultiPolygonAlreadyNormalized()
        {
            GeoCoord[] verts1 =
            {
                new GeoCoord(0, 0),
                new GeoCoord(0, 1),
                new GeoCoord(1, 1)
            };

            LinkedGeo.LinkedGeoLoop outer1 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer1);
            createLinkedLoop(ref outer1, verts1.ToList(), 3);

            GeoCoord[] verts2 =
            {
                new GeoCoord(2, 2),
                new GeoCoord(2, 3),
                new GeoCoord(3, 3)
            };

            LinkedGeo.LinkedGeoLoop outer2 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer2);
            createLinkedLoop(ref outer2, verts2.ToList(), 3);

            LinkedGeo.LinkedGeoPolygon polygon = new LinkedGeo.LinkedGeoPolygon();
            LinkedGeo.addLinkedLoop(ref polygon, ref outer1);
            LinkedGeo.LinkedGeoPolygon next = LinkedGeo.addNewLinkedPolygon(ref polygon);
            LinkedGeo.addLinkedLoop(ref next, ref outer2);

            // Should be a no-op
            int result = LinkedGeo.normalizeMultiPolygon(ref polygon);

            Assert.True(result == LinkedGeo.NORMALIZATION_ERR_MULTIPLE_POLYGONS,
                        "Expected error code returned");

            Assert.True(LinkedGeo.countLinkedPolygons(ref polygon) == 2, "Polygon count correct");
            Assert.True(LinkedGeo.countLinkedLoops(ref polygon) == 1,
                        "Loop count on first polygon correct");
            Assert.True(polygon.first == outer1, "Got expected outer loop");
            Assert.True(LinkedGeo.countLinkedLoops(ref polygon.next) == 1,
                        "Loop count on second polygon correct");
            Assert.True(polygon.next.first == outer2, "Got expected outer loop");
        }
コード例 #5
0
        public void normalizeMultiPolygonTwoOuterLoops()
        {
            List <GeoCoord> verts1 =
                new List <GeoCoord>
            {
                new GeoCoord(0, 0), new GeoCoord(0, 1), new GeoCoord(1, 1)
            };

            LinkedGeo.LinkedGeoLoop outer1 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer1);
            createLinkedLoop(ref outer1, verts1, 3);

            List <GeoCoord> verts2 =
                new List <GeoCoord>
            {
                new GeoCoord(2, 2), new GeoCoord(2, 3), new GeoCoord(3, 3)
            };

            LinkedGeo.LinkedGeoLoop outer2 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer2);
            createLinkedLoop(ref outer2, verts2, 3);

            LinkedGeo.LinkedGeoPolygon polygon = new LinkedGeo.LinkedGeoPolygon();
            LinkedGeo.addLinkedLoop(ref polygon, ref outer1);
            LinkedGeo.addLinkedLoop(ref polygon, ref outer2);

            int result = LinkedGeo.normalizeMultiPolygon(ref polygon);

            Assert.True(result == LinkedGeo.NORMALIZATION_SUCCESS, "No error code returned");

            Assert.True(LinkedGeo.countLinkedPolygons(ref polygon) == 2, "Polygon count correct");
            Assert.True
            (
                LinkedGeo.countLinkedLoops(ref polygon) == 1,
                "Loop count on first polygon correct"
            );
            Assert.True
            (
                LinkedGeo.countLinkedLoops(ref polygon.next) == 1,
                "Loop count on second polygon correct"
            );
        }
コード例 #6
0
        public void normalizeMultiPolygonOneHole()
        {
            List <GeoCoord> verts =
                new List <GeoCoord>
            {
                new GeoCoord(0, 0), new GeoCoord(0, 3),
                new GeoCoord(3, 3), new GeoCoord(3, 0)
            };

            LinkedGeo.LinkedGeoLoop outer = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer);
            createLinkedLoop(ref outer, verts, 4);

            List <GeoCoord> verts2 =
                new List <GeoCoord>
            {
                new GeoCoord(1, 1), new GeoCoord(2, 2), new GeoCoord(1, 2)
            };

            LinkedGeo.LinkedGeoLoop inner = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(inner);
            createLinkedLoop(ref inner, verts2, 3);

            LinkedGeo.LinkedGeoPolygon polygon = new LinkedGeo.LinkedGeoPolygon();
            LinkedGeo.addLinkedLoop(ref polygon, ref inner);
            LinkedGeo.addLinkedLoop(ref polygon, ref outer);

            int result = LinkedGeo.normalizeMultiPolygon(ref polygon);

            Assert.True(result == LinkedGeo.NORMALIZATION_SUCCESS, "No error code returned");

            Assert.True(LinkedGeo.countLinkedPolygons(ref polygon) == 1, "Polygon count correct");
            Assert.True(LinkedGeo.countLinkedLoops(ref polygon) == 2,
                        "Loop count on first polygon correct");
            Assert.True(polygon.first == outer, "Got expected outer loop");
            Assert.True(polygon.first.next == inner, "Got expected inner loop");
        }
コード例 #7
0
        public void normalizeMultiPolygonNestedDonuts()
        {
            GeoCoord[] verts =
            {
                new GeoCoord(0.2,   0.2),
                new GeoCoord(0.2,  -0.2),
                new GeoCoord(-0.2, -0.2),
                new GeoCoord(-0.2, 0.2)
            };
            LinkedGeo.LinkedGeoLoop outer = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer);
            createLinkedLoop(ref outer, verts.ToList(), 4);

            GeoCoord[] verts2 =
            {
                new GeoCoord(0.1,   0.1),
                new GeoCoord(-0.1,  0.1),
                new GeoCoord(-0.1, -0.1),
                new GeoCoord(0.1, -0.1)
            };
            LinkedGeo.LinkedGeoLoop inner = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(inner);
            createLinkedLoop(ref inner, verts2.ToList(), 4);

            GeoCoord[] verts3 =
            {
                new GeoCoord(0.6,   0.6),
                new GeoCoord(0.6,  -0.6),
                new GeoCoord(-0.6, -0.6),
                new GeoCoord(-0.6, 0.6)
            };
            LinkedGeo.LinkedGeoLoop outerBig = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outerBig);
            createLinkedLoop(ref outerBig, verts3.ToList(), 4);

            GeoCoord[] verts4 =
            {
                new GeoCoord(0.5,   0.5),
                new GeoCoord(-0.5,  0.5),
                new GeoCoord(-0.5, -0.5),
                new GeoCoord(0.5, -0.5)
            };
            LinkedGeo.LinkedGeoLoop innerBig = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(innerBig);
            createLinkedLoop(ref innerBig, verts4.ToList(), 4);

            LinkedGeo.LinkedGeoPolygon polygon = new LinkedGeo.LinkedGeoPolygon();
            LinkedGeo.addLinkedLoop(ref polygon, ref inner);
            LinkedGeo.addLinkedLoop(ref polygon, ref outerBig);
            LinkedGeo.addLinkedLoop(ref polygon, ref innerBig);
            LinkedGeo.addLinkedLoop(ref polygon, ref outer);

            int result = LinkedGeo.normalizeMultiPolygon(ref polygon);

            Assert.True(result == LinkedGeo.NORMALIZATION_SUCCESS, "No error code returned");

            Assert.True(LinkedGeo.countLinkedPolygons(ref polygon) == 2, "Polygon count correct");
            Assert.True(LinkedGeo.countLinkedLoops(ref polygon) == 2,
                        "Loop count on first polygon correct");
            Assert.True(polygon.first == outerBig, "Got expected outer loop");
            Assert.True(polygon.first.next == innerBig, "Got expected inner loop");
            Assert.True(LinkedGeo.countLinkedLoops(ref polygon.next) == 2,
                        "Loop count on second polygon correct");
            Assert.True(polygon.next.first == outer, "Got expected outer loop");
            Assert.True(polygon.next.first.next == inner, "Got expected inner loop");
        }
コード例 #8
0
        public void normalizeMultiPolygonTwoDonuts()
        {
            GeoCoord[] verts =
            {
                new GeoCoord(0, 0),
                new GeoCoord(0, 3),
                new GeoCoord(3, 3),
                new GeoCoord(3, 0)
            };
            LinkedGeo.LinkedGeoLoop outer = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer);
            createLinkedLoop(ref outer, verts.ToList(), 4);

            GeoCoord[] verts2 =
            {
                new GeoCoord(1, 1),
                new GeoCoord(2, 2),
                new GeoCoord(1, 2)
            };
            LinkedGeo.LinkedGeoLoop inner = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(inner);
            createLinkedLoop(ref inner, verts2.ToList(), 3);

            GeoCoord[] verts3 =
            {
                new GeoCoord(0,   0),
                new GeoCoord(0,  -3),
                new GeoCoord(-3, -3),
                new GeoCoord(-3, 0)
            };
            LinkedGeo.LinkedGeoLoop outer2 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(outer2);
            createLinkedLoop(ref outer2, verts3.ToList(), 4);

            GeoCoord[] verts4 =
            {
                new GeoCoord(-1, -1),
                new GeoCoord(-2, -2),
                new GeoCoord(-1, -2)
            };
            LinkedGeo.LinkedGeoLoop inner2 = new LinkedGeo.LinkedGeoLoop();
            Assert.NotNull(inner2);
            createLinkedLoop(ref inner2, verts4.ToList(), 3);

            LinkedGeo.LinkedGeoPolygon polygon = new LinkedGeo.LinkedGeoPolygon();
            LinkedGeo.addLinkedLoop(ref polygon, ref inner2);
            LinkedGeo.addLinkedLoop(ref polygon, ref inner);
            LinkedGeo.addLinkedLoop(ref polygon, ref outer);
            LinkedGeo.addLinkedLoop(ref polygon, ref outer2);

            int result = LinkedGeo.normalizeMultiPolygon(ref polygon);

            Assert.True(result == LinkedGeo.NORMALIZATION_SUCCESS, "No error code returned");

            Assert.True(LinkedGeo.countLinkedPolygons(ref polygon) == 2, "Polygon count correct");
            Assert.True
            (
                LinkedGeo.countLinkedLoops(ref polygon) == 2,
                "Loop count on first polygon correct"
            );
            Assert.True
            (
                LinkedGeo.countLinkedCoords(ref polygon.first) == 4,
                "Got expected outer loop"
            );
            Assert.True
            (
                LinkedGeo.countLinkedCoords(ref polygon.first.next) == 3,
                "Got expected inner loop"
            );
            Assert.True
            (
                LinkedGeo.countLinkedLoops(ref polygon.next) == 2,
                "Loop count on second polygon correct"
            );
            Assert.True
            (
                LinkedGeo.countLinkedCoords(ref polygon.next.first) == 4,
                "Got expected outer loop"
            );
            Assert.True
            (
                LinkedGeo.countLinkedCoords(ref polygon.next.first.next) == 3,
                "Got expected inner loop"
            );
        }