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