Exemple #1
0
        public TreeVisualization(List <ITree> trees, string[] keywords = null)
        {
            _trees           = trees;
            _dataNodeSchemes = trees.ConvertAll(tree => TreeNodeScheme.Get(tree.Graph.NodeTable));

            if (keywords == null)
            {
                keywords = new string[0];
            }
            _keywords = keywords;

            _vecGen = new VectorGenerator(new TokenizeConfig(TokenizerType.Standard, StopWordsFile.EN));

            _window  = new TreeWindow();
            _display = _window.TreeDisplay;
            _vis     = new Visualization(_display);

            int treeIndex = 0;

            _visNodeTables  = new List <IVisualTable>();
            _visEdgeTables  = new List <IVisualTable>();
            _visNodeSchemes = new List <TreeNodeVisualTableScheme>();
            foreach (var tree in _trees)
            {
                var visNodeTable = _vis.BuildVisualTable("VisNodeTable" + treeIndex, tree.Graph.NodeTable, _display);
                var visEdgeTable = _vis.BuildVisualTable("VisEdgeTable" + treeIndex, tree.Graph.EdgeTable, _display);

                var visNodeScheme = new TreeNodeVisualTableScheme(visNodeTable, tree.Graph, keywords);

                visEdgeTable.EnsureStyles(Styles.X1, Styles.X2, Styles.Y1, Styles.Y2, Styles.Visible, Styles.Layer);
                visEdgeTable.AddConstantColumn <IRender>(Styles.Render, new SimpleEdgeRender());

                _visNodeTables.Add(visNodeTable);
                _visEdgeTables.Add(visEdgeTable);
                _visNodeSchemes.Add(visNodeScheme);

                treeIndex++;
            }

            Show();
        }
        private void ViewTreemap()
        {
            var polygonTable = Vis.BuildVisualTable("poly", Display, 1);

            polygonTable.AddColumn <Brush>(Styles.StrokeBrush, BrushLib.FromColor(Colors.Black));
            polygonTable.AddColumn <Brush>(Styles.FillBrush, BrushLib.FromColor(Colors.White));
            polygonTable.EnsureStyles(Styles.X, Styles.Y, Styles.Opacity, Styles.StrokeWidth);
            polygonTable.AddColumn <List <double> >("polygon", null);
            polygonTable.AddColumn <double>("depth", 0);
            //polygonTable.AddColumn<INode>("node", null);

            int depth_idx   = polygonTable.GetColumnIndex("depth");
            int polygon_idx = polygonTable.GetColumnIndex("polygon");
            //int node_idx = polygonTable.GetColumnIndex("node");

            var node_list = Treemap.BFS(Treemap.Root).Reverse <INode>();

            foreach (INode i in node_list)
            {
                int depth = Treemap.GetDepth(i);
                if (depth > 0)
                {
                    int height = MaxDepth - depth + 1;

                    int row = polygonTable.AddRow();
                    polygonTable.Set <List <double> >(row, polygon_idx, i.Get <Polygon>("attribute").ToListDouble());
                    //polygonTable.Set<INode>(row, node_idx, i);
                    polygonTable.Set <double>(row, Styles.StrokeWidth, 1.5 * height / MaxDepth);
                    if (depth > 2)
                    {
                        polygonTable.Set <Brush>(row, Styles.StrokeBrush, BrushLib.FromColor(ColorLib.NewAlpha(Colors.Black, 0.4)));
                    }
                    polygonTable.Set <Brush>(row, Styles.FillBrush, BrushLib.FromColor(Color.FromArgb(Convert.ToByte(40 + 20 * height / MaxDepth), Convert.ToByte(30 * depth / MaxDepth), 0, Convert.ToByte(255 * height / MaxDepth))));
                    //polygonTable.Set<Brush>(row, Styles.FillBrush, BrushLib.FromColor(ColorLib.NewAlpha(ColorLib.Category10[0], 0.3)));
                }
            }

            //polygonTable.AutoRepaint = true;
            var polygonRender = new GeometryRender(vi =>
            {
                var polygon = GeometryLib.Polygon(vi.Get <List <double> >(polygon_idx), true, true);
                return(polygon);
            });

            polygonTable.SetupRender(polygonRender);
        }