public void CircleGraphDownwardConstraintTests() { GeometryGraph graph = GraphGenerator.GenerateCircle(6); ISet <Node> avoidNodes = new HashSet <Node>(graph.Nodes); Node firstNode = graph.Nodes.First(); Node lastNode = graph.Nodes.Last(); //add some non-cyclic nodes Node node1 = GraphGenerator.CreateNode(graph.Nodes.Count); Node node2 = GraphGenerator.CreateNode(graph.Nodes.Count + 1); graph.Nodes.Add(node1); graph.Nodes.Add(node2); graph.Edges.Add(GraphGenerator.CreateEdge(firstNode, node1)); graph.Edges.Add(GraphGenerator.CreateEdge(node2, lastNode)); GraphGenerator.SetRandomNodeShapes(graph, random); LayoutAndValidate(graph, 2.5, avoidNodes); }
static GeometryGraph GenerateGraphWithGroups(Random random, int multiplier) { int clusterCount = (2 + random.Next(5)) * multiplier; int nodeCount = (clusterCount + random.Next(20)) * multiplier; int edgeCount = (10 + random.Next(20)) * multiplier; //tree of clusters var parent = GenerateClusterTree(clusterCount, random); GeometryGraph graph = new GeometryGraph(); //create nodes for (int i = 0; i < nodeCount; i++) { Node node = GraphGenerator.CreateNode(i); graph.Nodes.Add(node); } //create clusters var clusters = new Cluster[clusterCount]; for (int i = 0; i < clusterCount; i++) { clusters[i] = new Cluster(); clusters[i].BoundaryCurve = CurveFactory.CreateRectangle(30, 30, new Point(15, 15)); clusters[i].RectangularBoundary = new RectangularClusterBoundary { LeftMargin = 5, RightMargin = 5, BottomMargin = 5, TopMargin = 5 }; } //set cluster hiearchy graph.RootCluster = clusters[0]; for (int i = 1; i < clusterCount; i++) { clusters[parent[i]].AddChild(clusters[i]); } //put nodes to clusters for (int i = 0; i < nodeCount; i++) { clusters[random.Next(clusterCount)].AddChild(graph.Nodes[i]); } for (int i = 0; i < clusterCount; i++) { if (clusters[i].Nodes.Count() == 0 && clusters[i].Clusters.Count() == 0) { Node node = GraphGenerator.CreateNode(i); graph.Nodes.Add(node); clusters[i].AddChild(node); nodeCount++; } } //adding edges for (int i = 0; i < edgeCount; i++) { int s = random.Next(nodeCount + clusterCount - 1); Node snode = (s < nodeCount ? graph.Nodes[s] : clusters[s - nodeCount + 1]); int t = random.Next(nodeCount + clusterCount - 1); Node tnode = (t < nodeCount ? graph.Nodes[t] : clusters[t - nodeCount + 1]); if (EdgeIsValid(snode, tnode)) { var edge = new Edge(snode, tnode); edge.LineWidth = 0.5 + 3 * random.NextDouble(); graph.Edges.Add(edge); } else { i--; } } SetupPorts(graph); return(graph); }