public void CalculateLayout(GeometryGraph geometryGraph) { var geomGraphComponents = GraphConnectedComponents.CreateComponents(geometryGraph.Nodes, geometryGraph.Edges); var settings = LayoutAlgorithmSettings as RankingLayoutSettings; foreach (var components in geomGraphComponents) { var layout = new RankingLayout(settings, components); components.Margins = 30; layout.Run(); } Microsoft.Msagl.Layout.MDS.MdsGraphLayout.PackGraphs(geomGraphComponents, settings); geometryGraph.UpdateBoundingBox(); }
/// <summary> /// Calculates the graph layout /// </summary> /// <exception cref="CancelException">Thrown when the layout is canceled.</exception> #else /// <summary> /// Calculates the graph layout /// </summary> /// <exception cref="System.OperationCanceledException">Thrown when the layout is canceled.</exception> #endif public static void CalculateLayout(GeometryGraph geometryGraph, LayoutAlgorithmSettings settings, CancelToken cancelToken) { Console.WriteLine("starting CalculateLayout"); if (settings is RankingLayoutSettings) { var rankingLayoutSettings = settings as RankingLayoutSettings; var rankingLayout = new RankingLayout(rankingLayoutSettings, geometryGraph); rankingLayout.Run(cancelToken); RouteAndLabelEdges(geometryGraph, settings, geometryGraph.Edges); } else if (settings is MdsLayoutSettings) { var mdsLayoutSettings = settings as MdsLayoutSettings; var mdsLayout = new MdsGraphLayout(mdsLayoutSettings, geometryGraph); mdsLayout.Run(cancelToken); if (settings.EdgeRoutingSettings.EdgeRoutingMode != EdgeRoutingMode.None) { RouteAndLabelEdges(geometryGraph, settings, geometryGraph.Edges); } } else if (settings is FastIncrementalLayoutSettings) { var incrementalSettings = settings as FastIncrementalLayoutSettings; incrementalSettings.AvoidOverlaps = true; var initialLayout = new InitialLayout(geometryGraph, incrementalSettings); initialLayout.Run(cancelToken); if (settings.EdgeRoutingSettings.EdgeRoutingMode != EdgeRoutingMode.None) { RouteAndLabelEdges(geometryGraph, settings, geometryGraph.Edges); } //incrementalSettings.IncrementalRun(geometryGraph); } else { var sugiyamaLayoutSettings = settings as SugiyamaLayoutSettings; if (sugiyamaLayoutSettings != null) { ProcessSugiamaLayout(geometryGraph, sugiyamaLayoutSettings, cancelToken); } else { Debug.Assert(settings is LgLayoutSettings); LayoutLargeGraphWithLayers(geometryGraph, settings, cancelToken); } } }