// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the BSD license (for details please see \src\AddIns\Debugger\Debugger.AddIn\license.txt) using System.Collections.Generic; using System.Linq; using System; namespace Debugger.AddIn.Visualizers.Graph.SplineRouting { /// /// Description of EdgeRouter. /// public class EdgeRouter { public EdgeRouter() { } /// /// Calculates routes for edges in a graph, so that they avoid nodes. /// public Dictionary RouteEdges(IEnumerable nodes, IEnumerable edges) where TEdge : class, IEdge { var routeGraph = RouteGraph.InitializeVertices(nodes, edges, 0, 0); var routedEdges = new Dictionary(); var occludedEdges = new List(); foreach (var edge in edges) { var straightEdge = routeGraph.TryRouteEdgeStraight(edge); if (straightEdge != null) { routedEdges[edge] = straightEdge; } else { occludedEdges.Add(edge); } } if (occludedEdges.Count > 0) { // there are some edges that couldn't be routed as straight lines routeGraph.ComputeVisibilityGraph(); foreach (var edge in occludedEdges) { RoutedEdge routedEdge = routeGraph.RouteEdge(edge); routedEdges[edge] = routedEdge; } } return routedEdges; } } }