Пример #1
0
        /// <summary>
        /// Tests that each hole is inside the polygon shell.
        /// This routine assumes that the holes have previously been tested
        /// to ensure that all vertices lie on the shell or inside it.
        /// A simple test of a single point in the hole can be used,
        /// provide the point is chosen such that it does not lie on the
        /// boundary of the shell.
        /// </summary>
        /// <param name="p">The polygon to be tested for hole inclusion.</param>
        /// <param name="graph">A GeometryGraph incorporating the polygon.</param>
        private void CheckHolesInShell(IPolygon p, GeometryGraph graph)
        {
            ILinearRing shell = p.Shell;

            IPointInRing pir = new McPointInRing(shell);
            for (int i = 0; i < p.NumHoles; i++)
            {
                LinearRing hole = (LinearRing)p.GetInteriorRingN(i);
                Coordinate holePt = FindPointNotNode(hole.Coordinates, shell, graph);

                /*
                 * If no non-node hole vertex can be found, the hole must
                 * split the polygon into disconnected interiors.
                 * This will be caught by a subsequent check.
                 */
                if (holePt == null)
                    return;

                bool outside = !pir.IsInside(holePt);
                if (outside)
                {
                    _validErr = new TopologyValidationError(TopologyValidationErrorType.HoleOutsideShell, holePt);
                    return;
                }
            }
        }
Пример #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="container"></param>
 /// <param name="p"></param>
 public McSelecter(McPointInRing container, Coordinate p)
 {
     _container = container;
     _p = p;
 }
Пример #3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="container"></param>
 /// <param name="p"></param>
 public McSelecter(McPointInRing container, Coordinate p)
 {
     _container = container;
     _p         = p;
 }