private static void PopulateClusters(Subgraph cluster, GeometryCluster c) { foreach (GeometryNode n in c.Nodes) cluster.AddNode(localMap[n]); foreach (GeometryCluster c2 in c.Clusters) { Subgraph cluster2 = new Subgraph(counter++.ToString()); cluster2.GeometryNode = c2; localMap[c2] = cluster2; cluster.AddSubgraph(cluster2); PopulateClusters(cluster2, c2); } }
private static void PopulateClusters(Subgraph cluster, GeometryCluster c) { foreach (GeometryNode n in c.Nodes) { cluster.AddNode(localMap[n]); } foreach (GeometryCluster c2 in c.Clusters) { Subgraph cluster2 = new Subgraph(counter++.ToString()); cluster2.GeometryNode = c2; localMap[c2] = cluster2; cluster.AddSubgraph(cluster2); PopulateClusters(cluster2, c2); } }
private static void PopulateClusterEdges(Subgraph cluster, GeometryCluster c) { foreach (GeometryEdge e in c.InEdges) { Edge edge = new Edge(localMap[e.Source], localMap[e.Target], ConnectionToGraph.Disconnected); edge.Attr.ArrowheadAtSource = e.ArrowheadAtSource ? ArrowStyle.Normal : ArrowStyle.None; edge.Attr.ArrowheadAtTarget = e.ArrowheadAtTarget ? ArrowStyle.Normal : ArrowStyle.None; edge.GeometryEdge = e; dg.AddPrecalculatedEdge(edge); localMap[e.Source].AddOutEdge(edge); localMap[e.Target].AddInEdge(edge); } foreach (GeometryEdge e in c.OutEdges) { if (e.Target is GeometryCluster) { continue; } Edge edge = new Edge(localMap[e.Source], localMap[e.Target], ConnectionToGraph.Disconnected); edge.Attr.ArrowheadAtSource = e.ArrowheadAtSource ? ArrowStyle.Normal : ArrowStyle.None; edge.Attr.ArrowheadAtTarget = e.ArrowheadAtTarget ? ArrowStyle.Normal : ArrowStyle.None; edge.GeometryEdge = e; dg.AddPrecalculatedEdge(edge); localMap[e.Source].AddOutEdge(edge); localMap[e.Target].AddInEdge(edge); } foreach (GeometryEdge e in c.SelfEdges) { Edge edge = new Edge(localMap[e.Source], localMap[e.Target], ConnectionToGraph.Disconnected); edge.Attr.ArrowheadAtSource = e.ArrowheadAtSource ? ArrowStyle.Normal : ArrowStyle.None; edge.Attr.ArrowheadAtTarget = e.ArrowheadAtTarget ? ArrowStyle.Normal : ArrowStyle.None; edge.GeometryEdge = e; dg.AddPrecalculatedEdge(edge); localMap[e.Source].AddSelfEdge(edge); } foreach (GeometryCluster c2 in c.Clusters) { PopulateClusterEdges(localMap[c2] as Subgraph, c2); } }
private static void PopulateClusterEdges(Subgraph cluster, GeometryCluster c) { foreach (GeometryEdge e in c.InEdges) { Edge edge = new Edge(localMap[e.Source], localMap[e.Target], ConnectionToGraph.Disconnected); edge.Attr.ArrowheadAtSource = e.ArrowheadAtSource ? ArrowStyle.Normal : ArrowStyle.None; edge.Attr.ArrowheadAtTarget = e.ArrowheadAtTarget ? ArrowStyle.Normal : ArrowStyle.None; edge.GeometryEdge = e; dg.AddPrecalculatedEdge(edge); localMap[e.Source].AddOutEdge(edge); localMap[e.Target].AddInEdge(edge); } foreach (GeometryEdge e in c.OutEdges) { if (e.Target is GeometryCluster) continue; Edge edge = new Edge(localMap[e.Source], localMap[e.Target], ConnectionToGraph.Disconnected); edge.Attr.ArrowheadAtSource = e.ArrowheadAtSource ? ArrowStyle.Normal : ArrowStyle.None; edge.Attr.ArrowheadAtTarget = e.ArrowheadAtTarget ? ArrowStyle.Normal : ArrowStyle.None; edge.GeometryEdge = e; dg.AddPrecalculatedEdge(edge); localMap[e.Source].AddOutEdge(edge); localMap[e.Target].AddInEdge(edge); } foreach (GeometryEdge e in c.SelfEdges) { Edge edge = new Edge(localMap[e.Source], localMap[e.Target], ConnectionToGraph.Disconnected); edge.Attr.ArrowheadAtSource = e.ArrowheadAtSource ? ArrowStyle.Normal : ArrowStyle.None; edge.Attr.ArrowheadAtTarget = e.ArrowheadAtTarget ? ArrowStyle.Normal : ArrowStyle.None; edge.GeometryEdge = e; dg.AddPrecalculatedEdge(edge); localMap[e.Source].AddSelfEdge(edge); } foreach (GeometryCluster c2 in c.Clusters) PopulateClusterEdges(localMap[c2] as Subgraph, c2); }