コード例 #1
0
        internal static void RouteEdges(GeometryGraph component, LayoutAlgorithmSettings settings, CancelToken cancelToken)
        {
            EdgeRoutingMode mode = settings.EdgeRoutingSettings.EdgeRoutingMode;

            // Use straight line routing on very large graphs otherwise it is too slow 
            if (component.Nodes.Count >= 2000)
            {
                mode = EdgeRoutingMode.StraightLine;
            }

            switch (mode)
            {
                case EdgeRoutingMode.Spline:
                    var splineRouter = new SplineRouter(
                        component,
                        settings.EdgeRoutingSettings.Padding,
                        settings.NodeSeparation, settings.EdgeRoutingSettings.ConeAngle, null);
                    splineRouter.Run(cancelToken);
                    break;
                case EdgeRoutingMode.SplineBundling:
                    splineRouter = new SplineRouter(
                        component,
                        settings.EdgeRoutingSettings.Padding,
                        settings.NodeSeparation / 20, settings.EdgeRoutingSettings.ConeAngle,
                      new BundlingSettings());
                    splineRouter.Run(cancelToken);
                    break;
                case EdgeRoutingMode.Rectilinear:
                    double edgePadding = settings.EdgeRoutingSettings.Padding;
                    double cornerRadius = settings.EdgeRoutingSettings.CornerRadius;
                    var rectilinearEdgeRouter = new RectilinearEdgeRouter(component, edgePadding, cornerRadius,
                                                                          true);
                    rectilinearEdgeRouter.Run(cancelToken);
                    break;
                case EdgeRoutingMode.StraightLine:
                    var router = new StraightLineEdges(component.Edges,
                                                       settings.EdgeRoutingSettings.Padding);
                    router.Run(cancelToken);
                    break;
            }
        }
コード例 #2
0
 /// <summary>
 /// </summary>
 /// <param name="geometryGraph"></param>
 /// <param name="layoutSettings"></param>
 /// <param name="edgesToRoute"></param>
 public static void RouteAndLabelEdges(GeometryGraph geometryGraph, LayoutAlgorithmSettings layoutSettings, IEnumerable<Edge> edgesToRoute) {
     //todo: what about parent edges!!!!
     var filteredEdgesToRoute =
         edgesToRoute.Where(e => ! e.UnderCollapsedCluster()).ToArray();
     var ers = layoutSettings.EdgeRoutingSettings;
     if (ers.EdgeRoutingMode == EdgeRoutingMode.Rectilinear ||
         ers.EdgeRoutingMode == EdgeRoutingMode.RectilinearToCenter) {
         RectilinearInteractiveEditor.CreatePortsAndRouteEdges(
             layoutSettings.NodeSeparation/3,
             layoutSettings.NodeSeparation/3,
             geometryGraph.Nodes,
             edgesToRoute,
             ers.EdgeRoutingMode,
             true,
             ers.UseObstacleRectangles,
             ers.BendPenalty);
     } else if (ers.EdgeRoutingMode == EdgeRoutingMode.Spline || ers.EdgeRoutingMode==EdgeRoutingMode.SugiyamaSplines) {
         new SplineRouter(geometryGraph, filteredEdgesToRoute, ers.Padding, ers.PolylinePadding, ers.ConeAngle, null)
         {
             ContinueOnOverlaps = true, KeepOriginalSpline = ers.KeepOriginalSpline
         }.Run();
     } else if (ers.EdgeRoutingMode == EdgeRoutingMode.SplineBundling) {
         var edgeBundlingSettings = ers.BundlingSettings ?? new BundlingSettings();
         var bundleRouter = new SplineRouter(geometryGraph, filteredEdgesToRoute, ers.Padding, ers.PolylinePadding, ers.ConeAngle,
                                             edgeBundlingSettings) {
                                                 KeepOriginalSpline = ers.KeepOriginalSpline
                                             };
         bundleRouter.Run();
         if (bundleRouter.OverlapsDetected)
         {
             new SplineRouter(geometryGraph, filteredEdgesToRoute, ers.Padding, ers.PolylinePadding, ers.ConeAngle, null)
             {
                 ContinueOnOverlaps = true,
                 KeepOriginalSpline = ers.KeepOriginalSpline
             }.Run();
         }                
     } else if (ers.EdgeRoutingMode == EdgeRoutingMode.StraightLine) {
         var router = new StraightLineEdges(filteredEdgesToRoute, ers.Padding);
         router.Run();
     }
     var elb = new EdgeLabelPlacement(geometryGraph.Nodes, filteredEdgesToRoute);
     elb.Run();
     geometryGraph.UpdateBoundingBox();
 }
コード例 #3
0
        static void RouteEdges(GeometryGraph graph, FastIncrementalLayoutSettings settings) {
            if (graph.Edges.Count < 1000) {
                var router = new SplineRouter(graph, settings.EdgeRoutingSettings.Padding,
                                              settings.EdgeRoutingSettings.PolylinePadding,
                                              settings.EdgeRoutingSettings.ConeAngle,
                                              settings.EdgeRoutingSettings.BundlingSettings);

                router.Run();
            } else {
                var sr = new StraightLineEdges(graph.Edges, 1);
                sr.Run();
            }

        }