Esempio n. 1
0
        /// <summary>
        /// Find and mark L edges which are "covered" by the result area (if any).
        /// L edges at nodes which also have A edges can be checked by checking
        /// their depth at that node.
        /// L edges at nodes which do not have A edges can be checked by doing a
        /// point-in-polygon test with the previously computed result areas.
        /// </summary>
        private void  FindCoveredLineEdges()
        {
            // first set covered for all L edges at nodes which have A edges too
            for (IEnumerator nodeit = op.Graph.Nodes.GetEnumerator(); nodeit.MoveNext();)
            {
                Node node = (Node)nodeit.Current;

                ((DirectedEdgeStar)node.Edges).FindCoveredLineEdges();
            }

            // For all L edges which weren't handled by the above,
            // use a point-in-poly test to determine whether they are covered
            for (IEnumerator it = op.Graph.EdgeEnds.GetEnumerator(); it.MoveNext();)
            {
                DirectedEdge de = (DirectedEdge)it.Current;
                Edge         e  = de.Edge;
                if (de.LineEdge && !e.CoveredSet)
                {
                    bool isCovered = op.IsCoveredByA(de.Coordinate);
                    e.Covered = isCovered;
                }
            }
        }