public void init_graph(string tag) { if (tag != "") { var result = HitomiAnalysisRelatedTags.Instance.result[tag]; int index = 0; int eindex = 0; GraphVertex v = new GraphVertex(); v.Index = index++; v.Color = Color.White; v.InnerText = tag; v.OuterText = ""; v.Radius = 100.0F; v.Nodes = new List <Tuple <GraphVertex, GraphEdge> >(); foreach (var ld in result) { GraphVertex vt = new GraphVertex(); GraphEdge et = new GraphEdge(); vt.Index = index++; vt.Color = Color.WhiteSmoke; vt.InnerText = ld.Item1; vt.Radius = 100.0F; vt.OuterText = ""; et.StartsIndex = 0; et.EndsIndex = vt.Index; et.Index = eindex++; et.Text = ld.Item2.ToString().Substring(0, Math.Min(5, ld.Item2.ToString().Length)); et.SelectionText = ""; et.Thickness = 6.0F; et.Color = Color.Black; v.Nodes.Add(new Tuple <GraphVertex, GraphEdge>(vt, et)); } List <Tuple <Point, double> > edges = new List <Tuple <Point, double> >(); for (int i = 0; i < v.Nodes.Count; i++) { for (int j = i + 1; j < v.Nodes.Count; j++) { var list = HitomiAnalysisRelatedTags.Instance.result[v.Nodes[i].Item1.InnerText].Where(x => x.Item1 == v.Nodes[j].Item1.InnerText); if (list.Count() > 0) { edges.Add(new Tuple <Point, double>(new Point(i + 1, j + 1), list.ToList()[0].Item2)); } } } GetGNM().Nomalize(v, edges); } }
public void DrawVertex(Graphics g, GraphVertex v, Size sizeOfPannel) { int end_x = v.Position.X; int end_y = v.Position.Y; RectangleF draw_rect = new RectangleF(end_x - v.Radius, end_y - v.Radius, v.Radius * 2, v.Radius * 2); if (RectangleF.Intersect(new Rectangle(-bp.X, -bp.Y, sizeOfPannel.Width, sizeOfPannel.Height), draw_rect) != Rectangle.Empty) { g.DrawEllipse(new Pen(Color.Black, 1.0F), draw_rect); g.FillEllipse(new SolidBrush(v.Color), draw_rect); stayed_string.Add(new Tuple <RectangleF, string>(new RectangleF(end_x - v.Radius - 300, end_y - v.Radius - 300, v.Radius * 2 + 600, v.Radius * 2 + 600), v.InnerText)); stayed_string.Add(new Tuple <RectangleF, string>(new RectangleF(end_x - v.Radius - 150, end_y - v.Radius - 15, v.Radius * 2 + 300, 15), v.OuterText)); } }
public void Nomalize(GraphVertex v, List <Tuple <Point, double> > c_edges) { v.Position = new Point(0, 0); vertexs.Add(v); for (int i = 0; i < v.Nodes.Count; i++) { int x = (int)(Math.Cos(2 * Math.PI / v.Nodes.Count * i) * 1000); int y = (int)(Math.Sin(2 * Math.PI / v.Nodes.Count * i) * 1000); v.Nodes[i].Item1.Position = new Point(x, y); v.Nodes[i].Item2.Starts = new Point(0, 0); v.Nodes[i].Item2.Ends = new Point(x, y); vertexs.Add(v.Nodes[i].Item1); edges.Add(v.Nodes[i].Item2); } foreach (var p in c_edges) { Point p1 = vertexs[p.Item1.X].Position; Point p2 = vertexs[p.Item1.Y].Position; edges.Add(new GraphEdge() { StartsIndex = p.Item1.X, EndsIndex = p.Item1.Y, Index = edges.Count, Starts = p1, Ends = p2, Color = Color.DarkGray, Text = "", SelectionText = p.Item2.ToString().Substring(0, Math.Min(5, p.Item2.ToString().Length)), Thickness = 3.0F }); } }