Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

162 lines
4.8 KiB

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import vtk.*;
// Example of complex 3D widget in use.
public class ImagePlaneWidget extends vtkCanvas {
private int width = 512;
private int height = 512;
public ImagePlaneWidget(String path) {
super();
// attach observer to set the render window size after
// the render window is created...
addWindowSetObserver(new Observer() {
public void update(Observable o, Object arg) {
setSize(width, height);
}
});
//Start by loading some data.
vtkVolume16Reader v16 = new vtkVolume16Reader();
v16.SetDataDimensions(64, 64);
v16.SetDataByteOrderToLittleEndian();
v16.SetFilePrefix(path);
v16.SetImageRange (1, 93);
v16.SetDataSpacing(3.2, 3.2, 1.5);
v16.Update();
setImageData(v16.GetOutput());
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(this, BorderLayout.CENTER);
JFrame frame = new JFrame("ImagePlaneWidget Test");
frame.setBounds(10, 10, width, height);
frame.getContentPane().add(p, BorderLayout.CENTER);
frame.setVisible(true);
frame.pack();
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {System.exit(0);}
});
}
public void setImageData(vtkImageData id) {
//The shared picker enables us to use 3 planes at one time
//and gets the picking order right
vtkCellPicker picker = new vtkCellPicker();
picker.SetTolerance(0.005);
//The 3 image plane widgets are used to probe the dataset.
vtkImagePlaneWidget planeWidgetX = new vtkImagePlaneWidget();
planeWidgetX.DisplayTextOn();
planeWidgetX.SetInput(id);
planeWidgetX.SetInteractor(getIren());
planeWidgetX.SetPlaneOrientationToXAxes();
planeWidgetX.SetSliceIndex(32);
planeWidgetX.SetPicker(picker);
planeWidgetX.SetKeyPressActivationValue('x');
planeWidgetX.GetPlaneProperty().SetColor(1, 0, 0);
planeWidgetX.On();
vtkImagePlaneWidget planeWidgetY = new vtkImagePlaneWidget();
planeWidgetY.DisplayTextOn();
planeWidgetY.SetInput(id);
planeWidgetY.SetInteractor(getIren());
planeWidgetY.SetPlaneOrientationToYAxes();
planeWidgetY.SetSliceIndex(32);
planeWidgetY.SetPicker(picker);
planeWidgetY.SetKeyPressActivationValue('y');
planeWidgetY.GetPlaneProperty().SetColor(1, 1, 0);
planeWidgetY.SetLookupTable(planeWidgetX.GetLookupTable());
planeWidgetY.On();
//for the z-slice, turn off texture interpolation:
//interpolation is now nearest neighbour, to demonstrate
//cross-hair cursor snapping to pixel centers
vtkImagePlaneWidget planeWidgetZ = new vtkImagePlaneWidget();
planeWidgetZ.DisplayTextOn();
planeWidgetZ.SetInput(id);
planeWidgetZ.TextureInterpolateOff();
planeWidgetZ.SetInteractor(getIren());
planeWidgetZ.SetPlaneOrientationToZAxes();
planeWidgetZ.SetSliceIndex(46);
planeWidgetZ.SetPicker(picker);
planeWidgetZ.SetKeyPressActivationValue('z');
planeWidgetZ.GetPlaneProperty().SetColor (0, 0, 1);
planeWidgetZ.SetLookupTable(planeWidgetX.GetLookupTable());
planeWidgetZ.On();
//An outline is shown for context.
vtkOutlineFilter outline = new vtkOutlineFilter();
outline.SetInput (id);
vtkPolyDataMapper outlineMapper = new vtkPolyDataMapper();
outlineMapper.SetInput ( outline.GetOutput() );
vtkActor outlineActor = new vtkActor();
outlineActor.SetMapper(outlineMapper);
GetRenderer().AddActor(outlineActor);
//Add the outline actor to the renderer, set the background and size
GetRenderer().GetCullers().RemoveAllItems();
GetRenderer().SetBackground(0.1, 0.1, 0.2);
}
static public void printUsage(String err) {
if (!err.equals("")) {
System.err.println("Error: " + err);
}
System.err.println("Usage: java ImagePlaneWidget [-D path]");
System.err.println("Where:");
System.err.println(" path is location of your VTKData directory");
System.exit(-1);
}
public static void main(String[] argv) {
int argSize = argv.length;
String pathToVTKData = "";
int argCurrent = 0;
try {
while (argSize > argCurrent) {
if (argv[argCurrent].equals("-D")) {
++argCurrent;
pathToVTKData = argv[argCurrent];
++argCurrent;
}
else {
ImagePlaneWidget.printUsage("");
}
}
}
catch (Exception e) {
ImagePlaneWidget.printUsage("");
}
if (pathToVTKData.equals(""))
ImagePlaneWidget.printUsage("");
File f = new File(pathToVTKData + "/Data/headsq");
if (!f.exists() || !f.canRead() || !f.isDirectory())
ImagePlaneWidget.printUsage(f.getAbsolutePath() + " does not exist or cannot be read.");
new ImagePlaneWidget(f.getAbsolutePath() + "/quarter");
}
}