public void NormalizeMultiPolygonOneHole() { var verts = MakeGeoCoordArray(new decimal[, ] { { 0, 0 }, { 0, 3 }, { 3, 3 }, { 3, 0 } }); var outer = CreateLinkedLoop(verts); var verts2 = MakeGeoCoordArray(new decimal[, ] { { 1, 1 }, { 2, 2 }, { 1, 2 } }); var inner = CreateLinkedLoop(verts2); var polygon = new LinkedGeoPolygon(); polygon.AddLinkedLoop(inner); polygon.AddLinkedLoop(outer); int result; (result, polygon) = polygon.NormalizeMultiPolygon(); Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess); Assert.AreEqual(polygon.CountPolygons, 1); Assert.AreEqual(polygon.CountLoops, 2); Assert.IsNotNull(polygon.Loops.First()); Assert.AreEqual(polygon.Loops.First(), outer); Assert.IsNotNull(polygon.Loops[1]); Assert.AreEqual(polygon.Loops[1], inner); polygon.Clear(); }
public void NormalizeMultiPolygonNoOuterLoops() { var verts = MakeGeoCoordArray(new decimal[, ] { { 0, 0 }, { 1, 1 }, { 0, 1 } }); var outer1 = CreateLinkedLoop(verts); var verts2 = MakeGeoCoordArray(new decimal[, ] { { 2, 2 }, { 3, 3 }, { 2, 3 } }); var outer2 = CreateLinkedLoop(verts2); var polygon = new LinkedGeoPolygon(); polygon.AddLinkedLoop(outer1); polygon.AddLinkedLoop(outer2); int result; (result, polygon) = polygon.NormalizeMultiPolygon(); Assert.AreEqual(H3Lib.Constants.LinkedGeo.NormalizationErrUnassignedHoles, result); Assert.AreEqual(1, polygon.CountPolygons); Assert.AreEqual(0, polygon.CountLoops); //polygon.Clear(); }
public void NormalizeMultiPolygonTwoOuterLoops() { var verts1 = MakeGeoCoordArray(new decimal[, ] { { 0, 0 }, { 0, 1 }, { 1, 1 } }); var outer1 = CreateLinkedLoop(verts1); var verts2 = MakeGeoCoordArray(new decimal[, ] { { 2, 2 }, { 2, 3 }, { 3, 3 } }); var outer2 = CreateLinkedLoop(verts2); var polygon = new LinkedGeoPolygon(); polygon.AddLinkedLoop(outer1); polygon.AddLinkedLoop(outer2); int result; (result, polygon) = polygon.NormalizeMultiPolygon(); Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess); Assert.AreEqual(polygon.CountPolygons, 2); Assert.AreEqual(polygon.CountLoops, 1); Assert.AreEqual(polygon.Next.CountLoops, 1); polygon.Clear(); }
public void NormalizeMultiPolygonSingle() { var verts = MakeGeoCoordArray(new decimal[, ] { { 0, 0 }, { 0, 1 }, { 1, 1 } }); var outer = CreateLinkedLoop(verts); var polygon = new LinkedGeoPolygon(); polygon.AddLinkedLoop(outer); int result; (result, polygon) = polygon.NormalizeMultiPolygon(); Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess); Assert.AreEqual(polygon.CountPolygons, 1); Assert.AreEqual(polygon.CountLoops, 1); if (polygon.Loops.First() != null) { Assert.AreEqual(polygon.Loops.First(), outer); } polygon.Clear(); }
public void NormalizeMultiPolygonNestedDonuts() { var verts = MakeGeoCoordArray(new[, ] { { 0.2m, 0.2m }, { 0.2m, -0.2m }, { -0.2m, -0.2m }, { -0.2m, 0.2m } }); var outer = CreateLinkedLoop(verts); var verts2 = MakeGeoCoordArray(new[, ] { { 0.1m, 0.1m }, { -0.1m, 0.1m }, { -0.1m, -0.1m }, { 0.1m, -0.1m } }); var inner = CreateLinkedLoop(verts2); var verts3 = MakeGeoCoordArray(new[, ] { { 0.6m, 0.6m }, { 0.6m, -0.6m }, { -0.6m, -0.6m }, { -0.6m, 0.6m } }); var outerBig = CreateLinkedLoop(verts3); var verts4 = MakeGeoCoordArray(new[, ] { { 0.5m, 0.5m }, { -0.5m, 0.5m }, { -0.5m, -0.5m }, { 0.5m, -0.5m } }); var innerBig = CreateLinkedLoop(verts4); var polygon = new LinkedGeoPolygon(); polygon.AddLinkedLoop(inner); polygon.AddLinkedLoop(outerBig); polygon.AddLinkedLoop(innerBig); polygon.AddLinkedLoop(outer); int result; (result, polygon) = polygon.NormalizeMultiPolygon(); Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess); Assert.AreEqual(polygon.CountPolygons, 2); Assert.AreEqual(polygon.CountLoops, 2); Assert.IsNotNull(polygon.Loops.First()); Assert.AreEqual(polygon.Loops.First(), outerBig); Assert.IsNotNull(polygon.Loops[1]); Assert.AreEqual(polygon.Loops[1], innerBig); Assert.AreEqual(polygon.Next.CountLoops, 2); Assert.IsNotNull(polygon.Next.Loops.First()); Assert.AreEqual(polygon.Next.Loops.First(), outer); Assert.IsNotNull(polygon.Next.Loops[1]); Assert.AreEqual(polygon.Next.Loops[1], inner); polygon.Clear(); }
public void NormalizeMultiPolygonTwoDonuts() { var verts = MakeGeoCoordArray(new decimal[, ] { { 0, 0 }, { 0, 3 }, { 3, 3 }, { 3, 0 } }); var outer = CreateLinkedLoop(verts); var verts2 = MakeGeoCoordArray(new decimal[, ] { { 1, 1 }, { 2, 2 }, { 1, 2 } }); var inner = CreateLinkedLoop(verts2); var verts3 = MakeGeoCoordArray(new decimal[, ] { { 0, 0 }, { 0, -3 }, { -3, -3 }, { -3, 0 } }); var outer2 = CreateLinkedLoop(verts3); var verts4 = MakeGeoCoordArray(new decimal[, ] { { -1, -1 }, { -2, -2 }, { -1, -2 } }); var inner2 = CreateLinkedLoop(verts4); var polygon = new LinkedGeoPolygon(); polygon.AddLinkedLoop(inner2); polygon.AddLinkedLoop(inner); polygon.AddLinkedLoop(outer); polygon.AddLinkedLoop(outer2); int result; (result, polygon) = polygon.NormalizeMultiPolygon(); Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess); Assert.AreEqual(polygon.CountPolygons, 2); Assert.AreEqual(polygon.CountLoops, 2); Assert.IsNotNull(polygon.Loops.First()); Assert.AreEqual(polygon.Loops.First().Count, 4); Assert.IsNotNull(polygon.Loops[1]); Assert.AreEqual(polygon.Loops[1].Count, 3); Assert.AreEqual(polygon.Next.CountLoops, 2); Assert.IsNotNull(polygon.Next.Loops.First()); Assert.AreEqual(polygon.Next.Loops.First().Count, 4); Assert.IsNotNull(polygon.Next.Loops[1]); Assert.AreEqual(polygon.Next.Loops[1].Count, 3); polygon.Clear(); }
public void NormalizeMultiPolygonAlreadyNormalized() { var verts1 = MakeGeoCoordArray(new decimal[, ] { { 0, 0 }, { 0, 1 }, { 1, 1 } }); var outer1 = CreateLinkedLoop(verts1); var verts2 = MakeGeoCoordArray(new decimal[, ] { { 2, 2 }, { 2, 3 }, { 3, 3 } }); var outer2 = CreateLinkedLoop(verts2); var polygon = new LinkedGeoPolygon(); polygon.AddLinkedLoop(outer1); var next = polygon.AddNewLinkedGeoPolygon(); next.AddLinkedLoop(outer2); // Should be a no-op int result; (result, polygon) = polygon.NormalizeMultiPolygon(); Assert.AreEqual(H3Lib.Constants.LinkedGeo.NormalizationErrMultiplePolygons, result); Assert.AreEqual(2, polygon.CountPolygons); Assert.AreEqual(1, polygon.CountLoops); Assert.IsNotNull(polygon.Loops.First()); Assert.AreEqual(outer1, polygon.Loops.First()); Assert.AreEqual(1, polygon.Next.CountLoops); Assert.IsNotNull(polygon.Next.Loops.First()); Assert.AreEqual(outer2, polygon.Next.Loops.First()); polygon.Clear(); }
public void NormalizeMultiPolygonTwoHoles() { var verts = MakeGeoCoordArray(new decimal[, ] { { 0, 0 }, { 0, 0.4m }, { 0.4m, 0.4m }, { 0.4m, 0 } }); var outer = CreateLinkedLoop(verts); var verts2 = MakeGeoCoordArray(new decimal[, ] { { 0.1m, 0.1m }, { 0.2m, 0.2m }, { 0.1m, 0.2m } }); var inner1 = CreateLinkedLoop(verts2); var verts3 = MakeGeoCoordArray(new decimal[, ] { { 0.2m, 0.2m }, { 0.3m, 0.3m }, { 0.2m, 0.3m } }); var inner2 = CreateLinkedLoop(verts3); var polygon = new LinkedGeoPolygon(); polygon.AddLinkedLoop(inner2); polygon.AddLinkedLoop(outer); polygon.AddLinkedLoop(inner1); int result; (result, polygon) = polygon.NormalizeMultiPolygon(); Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess); Assert.AreEqual(polygon.CountPolygons, 1); Assert.IsNotNull(polygon.Loops.First()); Assert.AreEqual(polygon.Loops.First(), outer); Assert.AreEqual(polygon.CountLoops, 3); polygon.Clear(); }