Beispiel #1
0
        private static PlanarGraphEdge getSingleEnabledEdge(PlanarGraphNode node)
        {
            int             enabledEdgesCount = 0;
            PlanarGraphEdge enabledEdge       = null;

            foreach (PlanarGraphEdge edge in node.IncidentEdges)
            {
                if (edge.Enabled)
                {
                    enabledEdgesCount++;
                    enabledEdge = edge;
                }
            }

            return(enabledEdgesCount == 1 ? enabledEdge : null);
        }
Beispiel #2
0
        private static void markDangles(PlanarGraph graph)
        {
            Stack <PlanarGraphNode> nodeStack = new Stack <PlanarGraphNode>();

            // find sites with a single incident to and put them on the stack
            foreach (PlanarGraphNode node in graph.Nodes)
            {
                if (node.IncidentEdges.Count == 1)
                {
                    nodeStack.Push(node);
                }
            }

            while (nodeStack.Count > 0)
            {
                PlanarGraphNode node = nodeStack.Pop();
                node.Enabled = false;

                PlanarGraphEdge enabledEdge = getSingleEnabledEdge(node);

                // there was one available edge
                if (enabledEdge != null)
                {
                    enabledEdge.Enabled   = false;
                    enabledEdge.Label.Tag = _dangleLabelTag;
                    if (enabledEdge.Node1 == node)
                    {
                        if (getSingleEnabledEdge(enabledEdge.Node2) != null)
                        {
                            nodeStack.Push(enabledEdge.Node2);
                        }
                    }
                    else
                    {
                        if (getSingleEnabledEdge(enabledEdge.Node1) != null)
                        {
                            nodeStack.Push(enabledEdge.Node1);
                        }
                    }
                }
            }
        }