public void TestFruchtermanReingold() { FruchtermanReingoldLayout layout = new FruchtermanReingoldLayout(10); layout.Init(2000d, 1000d, network); layout.DoLayout(); foreach(Vertex v in network.Vertices) { try { NETGen.Visualization.Vector3 pos = layout.GetPositionOfNode(v); Assert.AreNotEqual(pos, new NETGen.Visualization.Vector3()); } catch(Exception ex) { Assert.Fail(ex.Message); } } }
public static void Main(string[] args) { hierarchy = new Network(); root = hierarchy.CreateVertex(); root.Tag = NodeType.Root; c[root] = Color.Orange; // Assign node types and estimates for (int i = 0; i<individuals; i++) { Vertex aggregate = hierarchy.CreateVertex(); hierarchy.CreateEdge(root, aggregate, EdgeType.DirectedAB); c[aggregate] = Color.Black; Aggregates.Add(aggregate); aggregate.Tag = NodeType.Aggregate; Vertex individual = hierarchy.CreateVertex(); individual.Tag = NodeType.Individual; Variance[individual] = r.NextDouble(); c[individual] = Color.FromArgb(255 - (int) (255d * Variance[individual]), (int) (255d * Variance[individual]), 0); hierarchy.CreateEdge(aggregate, individual, EdgeType.DirectedAB); Individuals.Add(individual); } Application.Init(); slider = new ConsensusHierarchy.TemperatureWindow(); slider.Show(); System.Threading.ThreadPool.QueueUserWorkItem( delegate(object o) { FruchtermanReingoldLayout layout = new FruchtermanReingoldLayout(15); NETGen.Visualization.NetworkVisualizer.Start(hierarchy, layout, c, 800, 600); layout.DoLayoutAsync(); Logger.ShowInfos = false; while(true) { Change(); c.RecomputeColors(new Func<Vertex,Color>(v => { if (((NodeType)v.Tag) == NodeType.Aggregate) { if(v.OutDegree==0) return Color.White; else return Color.Black; } else return c[v]; })); c.RecomputeColors(new Func<Edge,Color>(e => { if (((NodeType)e.Target.Tag) == NodeType.Aggregate && e.Target.OutDegree==0) return Color.White; else return c.DefaultEdgeColor; })); NetworkVisualizer.Layout.DoLayout(); } }); Application.Run(); }