当前位置: 首页>>代码示例>>C#>>正文


C# GeometryGraph.GetFlattenedNodesAndClusters方法代码示例

本文整理汇总了C#中Microsoft.Msagl.Core.Layout.GeometryGraph.GetFlattenedNodesAndClusters方法的典型用法代码示例。如果您正苦于以下问题:C# GeometryGraph.GetFlattenedNodesAndClusters方法的具体用法?C# GeometryGraph.GetFlattenedNodesAndClusters怎么用?C# GeometryGraph.GetFlattenedNodesAndClusters使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Microsoft.Msagl.Core.Layout.GeometryGraph的用法示例。


在下文中一共展示了GeometryGraph.GetFlattenedNodesAndClusters方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: GetClusteredConnectedComponents

        /// <summary>
        /// Extension method to break a GeometryGraph into connected components taking into consideration clusters.
        /// Leaves the original graph intact, the resultant components contain copies of the original elements, with
        /// the original elements referenced in their UserData properties.
        /// </summary>
        /// <returns>
        /// the set of components, each as its own GeometryGraph.
        /// </returns>
        public static IEnumerable<GeometryGraph> GetClusteredConnectedComponents(this GeometryGraph graph) {
            var flatGraph = FlatGraph(graph);
            var basicFlatGraph = new BasicGraph<AlgorithmDataEdgeWrap>(
                from e in flatGraph.Edges
                select (AlgorithmDataEdgeWrap) e.AlgorithmData,
                flatGraph.Nodes.Count);
            var nodes = flatGraph.Nodes.ToList();
            var graphComponents = new List<GeometryGraph>();
            foreach (
                var componentNodes in ConnectedComponentCalculator<AlgorithmDataEdgeWrap>.GetComponents(basicFlatGraph)) {
                var g = new GeometryGraph();
                var topClusters = new List<Cluster>();
                var topNodes = new List<Node>();
                foreach (int i in componentNodes) {
                    var v = nodes[i];
                    var original = (Node) v.UserData;
                    bool topLevel = ((AlgorithmDataNodeWrap) original.AlgorithmData).TopLevel;
                    if (v.UserData is Cluster) {
                        if (topLevel) {
                            topClusters.Add((Cluster) original);
                        }
                    } else {
                        // clear edges, we fix them up below
                        v.ClearEdges();

                        g.Nodes.Add(v);
                        if (topLevel) {
                            topNodes.Add(v);
                        }
                    }
                }

                // copy the cluster hierarchies from the original graph
                int index = g.Nodes.Count;
                if (topClusters.Count != 0) {
                    var root = new Cluster(topNodes);
                    foreach (var top in topClusters) {
                        root.AddChild(CopyCluster(top, ref index));
                    }
                    g.RootCluster = root;
                }

                // add the real edges from the original graph to the component graph
                foreach (var v in g.GetFlattenedNodesAndClusters()) {
                    var original = v.UserData as Node;
                    Debug.Assert(original != null);
                    foreach (var e in original.InEdges) {
                        var source = GetCopy(e.Source);
                        var target = GetCopy(e.Target);
                        var copy = new Edge(source, target) {
                                                                Length = e.Length,
                                                                UserData = e,
                                                                EdgeGeometry = e.EdgeGeometry
                                                            };
                        e.AlgorithmData = copy;
                        g.Edges.Add(copy);
                    }
                }

                graphComponents.Add(g);
            }
            return graphComponents;
        }
开发者ID:danielskowronski,项目名称:network-max-flow-demo,代码行数:71,代码来源:GraphConnectedComponents.cs


注:本文中的Microsoft.Msagl.Core.Layout.GeometryGraph.GetFlattenedNodesAndClusters方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。