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); }
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); } } } } }