コード例 #1
0
        static void RouteEdges(LgLayoutSettings lgLayoutSettings,
                               GeometryGraph tmpGraphForRouting,
                               LgData lgData,
                               LgLevel level)
        {
            int routedEdges = 0;

            Console.WriteLine("\nrouting for level {0}", level.ZoomLevel);
            var router = new SplineRouter(tmpGraphForRouting, lgLayoutSettings.EdgeRoutingSettings.Padding,
                                          lgLayoutSettings.EdgeRoutingSettings.PolylinePadding, Math.PI / 6,
                                          null)
            {
                RouteMultiEdgesAsBundles     = false,
                UseEdgeLengthMultiplier      = true,
                UsePolylineEndShortcutting   = false,
                UseInnerPolylingShortcutting = false,
                // LineSweeperPorts = GetLineSweeperPorts(tmpGraphForRouting, tileSize),
                AllowedShootingStraightLines = false,
                ContinueOnOverlaps           = true,
                CacheCornersForSmoothing     = true,
                ReplaceEdgeByRails           =
                    e => {
                    routedEdges++;
                    if (routedEdges % 1000 == 0)
                    {
                        Console.Write(".");
                    }
                    level.RegisterRailsOfEdge(lgData.GeometryEdgesToLgEdgeInfos[e]);
                },
                Bidirectional = true
            };    //new BundlingSettings {KeepOverlaps = true, EdgeSeparation = 0, StopAfterShortestPaths = true});

            router.Run();
            level.CreateRailTree();
            foreach (var edge in tmpGraphForRouting.Edges)
            {
                level.FillRailDictionaryForEdge(edge);
                edge.Curve = null;
            }
            // level.RunLevelStatistics(lgData.GeometryNodesToLgNodeInfos.Where(e=>e.Value.ZoomLevel<=level.ZoomLevel).Select(p=>p.Key));
        }