/// <summary> /// Recursive function that creates a level of the file tree /// </summary> /// <param name="g"></param> /// <param name="parent"></param> /// <param name="path"></param> private void buildTree(vtkMutableDirectedGraph g, long parent, string path) { vtkStringArray name = (vtkStringArray)g.GetVertexData().GetAbstractArray("name"); vtkLongLongArray size = (vtkLongLongArray)g.GetVertexData().GetAbstractArray("size"); vtkStringArray fullpath = (vtkStringArray)g.GetVertexData().GetAbstractArray("path"); if (Directory.Exists(path)) { long v = 0; if (parent == -1) { v = g.AddVertex(); } else { v = g.AddChild((int)parent); } string[] pathparts = path.Split('\\'); int ipaths = pathparts.GetUpperBound(0); fullpath.InsertNextValue(path); name.InsertNextValue(pathparts[ipaths]); size.InsertNextValue(1024); this.label1.Text = "Processing " + path; this.Update(); try { foreach (string f in Directory.GetFiles(path)) { Console.Out.WriteLine(f); buildTree(g, v, f); } foreach (string d in Directory.GetDirectories(path)) { Console.Out.WriteLine(d); buildTree(g, v, d); } } catch (System.Exception excpt) { Console.Error.WriteLine(excpt.Message); } } else if (File.Exists(path)) { FileInfo info = new FileInfo(path); //Do not graph files smaller than 1K if (info.Length > 1024) { g.AddChild((int)parent); fullpath.InsertNextValue(path); name.InsertNextValue(Path.GetFileName(path)); size.InsertNextValue(info.Length); } } }
/// <summary> /// Open a folder browser and graph the /// selected folder /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void setupView_Click(object sender, EventArgs e) { if (this.folderBrowserDialog1.ShowDialog().Equals(DialogResult.OK)) { //Add the view to the render window if (!initialized) { initialized = true; this.view.GetRenderWindow().SetParentId( this.renWinCTRL.RenderWindow.GetGenericWindowId()); this.ResizeTreeMapView(); //Add a handler to the view view.SelectionChangedEvt += new vtkObject.vtkObjectEventHandler(this.view_SelectionChangedEvt); } g = vtkMutableDirectedGraph.New(); vtkStringArray name = vtkStringArray.New(); name.SetName("name"); g.GetVertexData().AddArray(name); vtkStringArray path = vtkStringArray.New(); path.SetName("path"); g.GetVertexData().SetPedigreeIds(path); vtkLongLongArray size = vtkLongLongArray.New(); size.SetName("size"); g.GetVertexData().AddArray(size); string cur = Directory.GetCurrentDirectory(); buildTree(g, -1, this.folderBrowserDialog1.SelectedPath); this.label1.Text = "Viewing " + this.folderBrowserDialog1.SelectedPath; vtkTree t = vtkTree.New(); t.ShallowCopy(g); view.SetLayoutStrategyToSquarify(); view.SetAreaLabelArrayName("name"); view.SetAreaHoverArrayName("path"); view.SetAreaColorArrayName("level"); view.SetAreaSizeArrayName("size"); view.AddRepresentationFromInput(t); view.GetRenderer().ResetCamera(); view.Update(); view.Render(); } }