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 DrawEdge(Graphics g, GraphEdge e, Size sizeOfPannel) { RectangleF draw_rect = new RectangleF( Math.Min(e.Starts.X, e.Ends.X), Math.Min(e.Starts.Y, e.Ends.Y), Math.Max(e.Starts.X, e.Ends.X) - Math.Min(e.Starts.X, e.Ends.X), Math.Max(e.Starts.Y, e.Ends.Y) - Math.Min(e.Starts.Y, e.Ends.Y)); if (RectangleF.Intersect(new Rectangle(-bp.X, -bp.Y, sizeOfPannel.Width, sizeOfPannel.Height), draw_rect) != Rectangle.Empty) { g.DrawLine(new Pen(e.Color, e.Thickness), e.Starts, e.Ends); stayed_string.Add(new Tuple <RectangleF, string>(draw_rect, e.Text)); } }