Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        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
                });
            }
        }