Files
ThirdParty-6/ParaView-5.0.1/VTK/Examples/Infovis/Java/TreeViews.java

211 lines
6.8 KiB
Java

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.Random;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileNameExtensionFilter;
import vtk.*;
public class TreeViews extends JFrame {
private vtkRenderWindowPanel panel1;
private vtkRenderWindowPanel panel2;
private vtkRenderWindowPanel panel3;
private vtkRenderWindowPanel panel4;
private vtkXMLTreeReader reader = new vtkXMLTreeReader();
private vtkTreeLevelsFilter levels = new vtkTreeLevelsFilter();
private vtkGraphLayoutView view1;
private vtkGraphLayoutView view2;
private vtkGraphLayoutView view3;
private vtkTreeMapView view4;
public TreeViews() {
// Create a random tree
// The tree has a "name" field to use for labels.
// It also has a "level" field to use for colors.
vtkStringArray nameArr = new vtkStringArray();
nameArr.SetName("name");
// Start by adding a root to the tree
vtkMutableDirectedGraph g = new vtkMutableDirectedGraph();
g.AddVertex();
nameArr.InsertNextValue("0");
Random r = new Random();
for (int i = 1; i < 100; ++i) {
// Add a child to a random vertex in the tree.
g.AddChild(r.nextInt(i));
nameArr.InsertNextValue("" + i);
}
g.GetVertexData().AddArray(nameArr);
vtkTree tree = new vtkTree();
tree.ShallowCopy(g);
levels.SetInputData(tree);
// Create the selection link.
// This is shared among all views in order to link the selection.
vtkAnnotationLink link = new vtkAnnotationLink();
// Create a graph layout view.
// This view performs an automatic embedding of the graph in 2D.
// Label by name, color by level.
view1 = new vtkGraphLayoutView();
vtkDataRepresentation rep1 = view1.AddRepresentationFromInputConnection(levels.GetOutputPort());
panel1 = new vtkRenderWindowPanel(view1.GetRenderWindow());
view1.SetVertexLabelArrayName("name");
view1.VertexLabelVisibilityOn();
view1.SetVertexColorArrayName("level");
view1.ColorVerticesOn();
view1.ResetCamera();
// Link the selection.
rep1.SetAnnotationLink(link);
// Create a standard tree layout view.
// The standard tree layout arranges the vertices of a tree in horizontal
// levels.
// Label by name, color by level.
view2 = new vtkGraphLayoutView();
vtkDataRepresentation rep2 = view2.AddRepresentationFromInputConnection(levels.GetOutputPort());
panel2 = new vtkRenderWindowPanel(view2.GetRenderWindow());
view2.SetVertexLabelArrayName("name");
view2.VertexLabelVisibilityOn();
view2.SetVertexColorArrayName("level");
view2.ColorVerticesOn();
view2.ResetCamera();
// Link the selection.
rep2.SetAnnotationLink(link);
// Create a radial tree layout view.
// The radial tree layout arranges the vertices of a tree in concentric
// circles.
// Label by name, color by level.
view3 = new vtkGraphLayoutView();
vtkDataRepresentation rep3 = view3.AddRepresentationFromInputConnection(levels.GetOutputPort());
panel3 = new vtkRenderWindowPanel(view3.GetRenderWindow());
vtkTreeLayoutStrategy layout3 = new vtkTreeLayoutStrategy();
layout3.RadialOn();
layout3.SetAngle(360);
layout3.SetLeafSpacing(0.3);
view3.SetLayoutStrategy(layout3);
view3.SetVertexLabelArrayName("name");
view3.VertexLabelVisibilityOn();
view3.SetVertexColorArrayName("level");
view3.ColorVerticesOn();
view3.ResetCamera();
// Link the selection.
rep3.SetAnnotationLink(link);
// Create a tree map view.
view4 = new vtkTreeMapView();
vtkDataRepresentation rep4 = view4.AddRepresentationFromInputConnection(levels.GetOutputPort());
panel4 = new vtkRenderWindowPanel(view4.GetRenderWindow());
// Link the selection.
rep4.SetAnnotationLink(link);
view4.ResetCamera();
// Use a simple ViewChangedObserver to render all views
// when the selection in one view changes.
ViewChangedObserver obs = new ViewChangedObserver();
link.AddObserver("SelectionChangedEvent", obs, "SelectionChanged");
// Arrange the views in a grid.
GridLayout layout = new GridLayout(2, 2);
layout.setHgap(5);
layout.setVgap(5);
this.setLayout(layout);
this.add(panel1);
this.add(panel2);
this.add(panel3);
this.add(panel4);
// Create menu
JMenuBar menuBar;
JMenu menu;
JMenuItem menuItem;
// Create the menu bar.
menuBar = new JMenuBar();
// Build the first menu.
menu = new JMenu("File");
menu.setMnemonic(KeyEvent.VK_F);
menuBar.add(menu);
// A JMenuItem
menuItem = new JMenuItem("Open XML...", KeyEvent.VK_X);
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
ActionEvent.CTRL_MASK));
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Create a file chooser
final JFileChooser fc = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files (*.xml)", "xml");
fc.setFileFilter(filter);
// In response to a button click:
int returnVal = fc.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File f = fc.getSelectedFile();
reader.SetFileName(f.getAbsolutePath());
levels.SetInputConnection(reader.GetOutputPort());
ViewChangedObserver obs = new ViewChangedObserver();
obs.SelectionChanged();
}
}});
menu.add(menuItem);
this.setJMenuBar(menuBar);
}
private class ViewChangedObserver {
// When a selection changes, render all views.
void SelectionChanged() {
view1.Update();
view2.Update();
view3.Update();
view4.Update();
panel1.Render();
panel2.Render();
panel3.Render();
panel4.Render();
}
}
// Load VTK library and print which library was not properly loaded
static {
if (!vtkNativeLibrary.LoadAllNativeLibraries()) {
for (vtkNativeLibrary lib : vtkNativeLibrary.values()) {
if (!lib.IsLoaded()) {
System.out.println(lib.GetLibraryName() + " not loaded");
}
}
}
vtkNativeLibrary.DisableOutputWindow(null);
}
public static void main(String args[]) {
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
TreeViews app = new TreeViews();
app.setTitle("Tree Views");
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.pack();
app.setVisible(true);
}
}