This project is read-only.
Sample code showing how to generate a polygon from random points that contains a hole.

using DotSpatial.Geometries;
using DotSpatial.Topology.Geometries;

 public void PolgygonHolesSC()
        {
            //Defines a new coordinate array
            Coordinate[] coords = new Coordinate[20];
            //Defines a new random number generator
            Random rnd = new Random();
            //defines a randomly generated center for teh polygon
            Coordinate center = new Coordinate((rnd.NextDouble() * 360) - 180, (rnd.NextDouble() * 180) - 90);
            for (int i = 0; i < 19; i++)
            {
                //generates random coordinates and adds those coordinates to the array
                coords[i] = new Coordinate(center.X + Math.Cos((i * 10) * Math.PI / 10), center.Y + (i * 10) * Math.PI / 10);
            }
            //sets the last coordinate equal to the first, this 'closes' the polygon
            coords[19] = new Coordinate(coords[0].X, coords[0].Y);
            //defines a new LingRing from the coordinates
            LinearRing Ring = new LinearRing(coords);
            //Repeates the process, but generates a LinearRing with a smaller area, this will be the hole in the polgyon
            Coordinate[] coordshole = new Coordinate[20];
            for (int i = 0; i < 20; i++)
            {
                coordshole[i] = new Coordinate(center.X + Math.Cos((i * 10) * Math.PI / 20), center.Y + (i * 10) * Math.PI / 20);
            }
            coordshole[19] = new Coordinate(coordshole[0].X, coordshole[0].Y);
            LinearRing Hole = new LinearRing(coordshole);
            //This steps addes the hole LinerRing to a ILinearRing Array
            //A Polgyon can contain multiple holes, thus a Array of Hole is required
            ILinearRing[] Holes = new ILinearRing[1];
            Holes[0] = Hole;
            //This passes the Ring, the polygon shell, and the Holes Array, the holes
            Polygon pg = new Polygon(Ring, Holes);
        }

Last edited Jul 13, 2010 at 3:35 PM by AlamoMan, version 3