/// <summary>
        /// This method will cause the ring to be computed.
        /// It will also check any holes, if they have been assigned.
        /// </summary>
        /// <param name="p"></param>
        public virtual bool ContainsPoint(Coordinate p)
        {
            ILinearRing shell = LinearRing;
            IEnvelope   env   = shell.EnvelopeInternal;

            if (!env.Contains(p))
            {
                return(false);
            }
            if (!CGAlgorithms.IsPointInRing(p, shell.Coordinates))
            {
                return(false);
            }
            for (IEnumerator i = holes.GetEnumerator(); i.MoveNext();)
            {
                EdgeRing hole = (EdgeRing)i.Current;
                if (hole.ContainsPoint(p))
                {
                    return(false);
                }
            }
            return(true);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="de"></param>
 /// <param name="er"></param>
 abstract public void SetEdgeRing(DirectedEdge de, EdgeRing er);
 /// <summary>
 ///
 /// </summary>
 /// <param name="ring"></param>
 public virtual void AddHole(EdgeRing ring)
 {
     holes.Add(ring);
 }