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" ); }
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"); }
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" ); }
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"); }
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" ); }
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"); }
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"); }
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" ); }