public void PolygonTest() { Polygon p = new Polygon(); Assert.IsTrue(p.IsEmpty()); Assert.AreEqual(0, p.NumInteriorRing); Assert.AreEqual(p.NumInteriorRing, p.InteriorRings.Count); Assert.IsFalse(p.Equals(null)); Assert.IsTrue(p.Equals(new Polygon())); Assert.IsNull(p.GetBoundingBox()); LinearRing ring = new LinearRing(); ring.Vertices.Add(new Point(10, 10)); ring.Vertices.Add(new Point(20, 10)); ring.Vertices.Add(new Point(20, 20)); Assert.IsFalse(ring.IsCCW()); ring.Vertices.Add(new Point(10, 20)); ring.Vertices.Add(ring.Vertices[0].Clone()); Assert.IsTrue(ring.IsPointWithin(new Point(15, 15))); Assert.AreNotSame(ring.Clone(), ring); p.ExteriorRing = ring; Assert.AreEqual(100, p.Area); LinearRing ring2 = new LinearRing(); ring2.Vertices.Add(new Point(11, 11)); ring2.Vertices.Add(new Point(19, 11)); ring2.Vertices.Add(new Point(19, 19)); ring2.Vertices.Add(new Point(11, 19)); ring2.Vertices.Add(ring2.Vertices[0].Clone()); p.InteriorRings.Add(ring2); Assert.AreEqual(100 + 64, p.Area); // Reverse() doesn't exist for Collections //ring2.Vertices.Reverse(); //Assert.AreEqual(100 - 64, p.Area); Assert.AreEqual(1, p.NumInteriorRing); Assert.AreEqual(new BoundingBox(10, 10, 20, 20), p.GetBoundingBox()); Polygon p2 = p.Clone(); Assert.AreEqual(p, p2); Assert.AreNotSame(p, p2); p2.InteriorRings.RemoveAt(0); Assert.AreNotEqual(p, p2); }
/// <summary> /// Converts a Polygon to <Polygon Text> format, then /// Appends it to the writer. /// </summary> /// <param name="polygon">The Polygon to process.</param> /// <param name="writer"></param> private static void AppendPolygonText(Polygon polygon, StringWriter writer) { if (polygon == null || polygon.IsEmpty()) writer.Write("EMPTY"); else { writer.Write("("); AppendLineStringText(polygon.ExteriorRing, writer); for (int i = 0; i < polygon.InteriorRings.Count; i++) { writer.Write(", "); AppendLineStringText(polygon.InteriorRings[i], writer); } writer.Write(")"); } }