[vtkusers] widgets in JAVA, new vtkPanel version?
Lars Matthäus
lars.matthaeus at web.de
Mon Mar 21 13:54:24 EST 2005
Dear Insiders,
I try in vain to get a widget running in a vtkPanel. What I get are two windows popping up - a JAVA-Panel-window where the widget doesn't work and an OpenGL-Window in which the widget works as expected. What I want is only one window - the JAVA-Panel-one - and with widget functionality.
I know that this issue was raised several times before on this list (and Jeff answered often helpfully), but the answers given where of no use for me. (I'm new to this vtk stuff.)
Is there any new development on that toppic, especially a new version of the vtkPanel file, which allows for widgets in panels?
Thanks for your help!
Lars
ps.: If somebody wants to have a look on what I have done:
package visualize;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.LinkedList;
import java.util.Observable;
import java.util.Observer;
import java.lang.Thread;
import vtk.*;
/**
* An application that displays a JButton and several JRadioButtons. The
* JRadioButtons determine the look and feel used by the application.
*/
public class ShowDicomOrthogonalSlices extends JPanel implements ActionListener, Runnable {
static JFrame frame;
vtkPanel renWin;
vtkRenderWindowInteractor iact=null;
JButton exitButton;
public void run() {
renWin.GetRenderWindow().GetInteractor().Initialize();
renWin.GetRenderWindow().GetInteractor().Start();
}
public ShowDicomOrthogonalSlices() {
setLayout(new BorderLayout());
renWin = new vtkPanel();
renWin.addWindowSetObserver(new Observer() {
public void update(Observable o, Object arg) {
renWin.setSize(600, 600);
}
});
add(renWin, BorderLayout.CENTER);
LinkedList dicoms = new LinkedList();
String s;
for (int i = 53; i <= 91; i++) {
if (i < 10)
s = "00" + i;
else if (i < 100)
s = "0" + i;
else
s = "" + i;
dicoms.add("C:/DICOM/DICOM-Samples/DICOM/MR_" + s
+ ".dcm");
}
double minmax[] = new double[2];
double d;
vtkActorCollection actorCollection = new vtkActorCollection();
vtkImageActor imageActor;
vtkDICOMImageReader dicomImage;
vtkImageData imageData;
vtkImageShiftScale imageShift;
vtkImageReslice imageReslice;
vtkImageData fullImage = new vtkImageData();
try {
dicomImage = new vtkDICOMImageReader();
dicomImage.SetFileName((String) dicoms.get(0));
imageData = new vtkImageData();
imageData = dicomImage.GetOutput();
imageData.Update();
int dim[] = imageData.GetDimensions();
System.out
.println("" + dim[0] + "x" + dim[1] + "x" + dicoms.size());
double spacing[] = imageData.GetSpacing();
fullImage.SetDimensions(dim[0], dim[1], dicoms.size());
fullImage.SetSpacing(spacing[0], spacing[1], spacing[2]);
fullImage.SetNumberOfScalarComponents(1);
for (int i = 0; i < dicoms.size(); i++) {
dicomImage = new vtkDICOMImageReader();
dicomImage.SetFileName((String) dicoms.get(i));
imageData = new vtkImageData();
imageData = dicomImage.GetOutput();
imageData.Update();
for (int j = 0; j < dim[0]; j++)
for (int k = 0; k < dim[1]; k++) {
d = imageData.GetScalarComponentAsDouble(j, k, 0, 0);
// System.out.println("j=" + j + ", k=" + k + ", i=" + i
// + ", d=" + d);
fullImage.SetScalarComponentFromDouble(j, k, i, 0, d);
}
}
fullImage.Update();
minmax = fullImage.GetScalarRange();
System.out.println("min=" + minmax[0] + ", max=" + minmax[1]);
imageShift = new vtkImageShiftScale();
imageShift.SetInput(fullImage);
imageShift.SetShift(-1.0 * minmax[0]);
imageShift.SetScale(255.0 / (minmax[1] - minmax[0]));
imageShift.SetOutputScalarTypeToUnsignedChar();
imageShift.Update();
d = imageShift.GetOutput().GetScalarComponentAsDouble(0, 0, 0, 0);
System.out.println("d=" + d);
vtkImageThreshold imageThreshold = new vtkImageThreshold();
imageThreshold.SetInput(imageShift.GetOutput());
imageThreshold.SetInValue(0);
imageThreshold.ThresholdBetween(d - 10, d + 10);
imageThreshold.SetOutputScalarTypeToUnsignedChar();
vtkLookupTable colorTable = new vtkLookupTable();
colorTable.SetTableRange(0,255);
colorTable.SetHueRange(0,0);
colorTable.SetSaturationRange(0,0);
colorTable.SetValueRange(0,1);
colorTable.SetRampToLinear();
vtkCellPicker picker = new vtkCellPicker();
picker.SetTolerance(0.005);
iact = renWin.GetRenderWindow().MakeRenderWindowInteractor();
System.out.println(""+renWin.GetRenderWindow().GetInteractor()+
"\n"+iact);
vtkImagePlaneWidget planeWidgetX = new vtkImagePlaneWidget();
planeWidgetX.SetInteractor(iact);
planeWidgetX.SetInput(imageThreshold.GetOutput());
planeWidgetX.UserControlledLookupTableOn();
planeWidgetX.SetLookupTable(colorTable);
planeWidgetX.SetPlaneOrientationToXAxes();
planeWidgetX.SetSliceIndex(32);
planeWidgetX.SetPicker(picker);
planeWidgetX.SetKeyPressActivationValue('x');
vtkProperty prop1 = planeWidgetX.GetPlaneProperty();
prop1.SetColor(1, 0, 0);
planeWidgetX.On();
vtkImagePlaneWidget planeWidgetY = new vtkImagePlaneWidget();
planeWidgetY.SetInteractor(iact);
planeWidgetY.SetInput(imageThreshold.GetOutput());
planeWidgetY.UserControlledLookupTableOn();
planeWidgetY.SetLookupTable(colorTable);
planeWidgetY.SetPlaneOrientationToYAxes();
planeWidgetY.SetSliceIndex(32);
planeWidgetY.SetPicker(picker);
planeWidgetY.SetKeyPressActivationValue('y');
vtkProperty prop2 = planeWidgetY.GetPlaneProperty();
prop2.SetColor(0, 1, 0);
planeWidgetY.On();
vtkImagePlaneWidget planeWidgetZ = new vtkImagePlaneWidget();
planeWidgetZ.SetInteractor(iact);
planeWidgetZ.SetInput(imageThreshold.GetOutput());
planeWidgetZ.UserControlledLookupTableOn();
planeWidgetZ.SetLookupTable(colorTable);
planeWidgetZ.SetPlaneOrientationToZAxes();
planeWidgetZ.SetSliceIndex(32);
planeWidgetZ.SetPicker(picker);
planeWidgetZ.SetKeyPressActivationValue('z');
vtkProperty prop3 = planeWidgetZ.GetPlaneProperty();
prop3.SetColor(0, 0, 1);
planeWidgetZ.On();
renWin.GetRenderer().AddActor(getCursorActor(100, 200, 50));
renWin.GetRenderer().SetBackground(1, 1, 1);
renWin.setSize(600,600);
renWin.GetRenderer().GetCullers().RemoveAllItems();
renWin.GetRenderer().InteractiveOn();
renWin.GetRenderWindow().SetInteractor(iact);
} catch (Exception e) {
System.out.println(e);
}
exitButton = new JButton("Exit");
exitButton.addActionListener(this);
add(renWin, BorderLayout.CENTER);
add(exitButton, BorderLayout.EAST);
}
private vtkActor getCursorActor(double xLength, double yLength,
double zLength) {
vtkCursor3D cursor = new vtkCursor3D();
cursor.AxesOn();
cursor.OutlineOff();
cursor.XShadowsOff();
cursor.YShadowsOff();
cursor.ZShadowsOff();
cursor.SetModelBounds(-xLength, xLength, -yLength, yLength, -zLength,
zLength);
cursor.SetFocalPoint(0, 0, 1);
cursor.Update();
vtkPolyDataMapper mapper = new vtkPolyDataMapper();
mapper.SetInput(cursor.GetOutput());
vtkActor cursorActor = new vtkActor();
cursorActor.GetProperty().SetColor(1, 0, 0);
cursorActor.SetMapper(mapper);
return cursorActor;
}
/** An ActionListener that listens to the radio buttons. */
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(exitButton)) {
System.exit(0);
}
}
public static void main(String s[]) {
ShowDicomOrthogonalSlices panel = new ShowDicomOrthogonalSlices();
frame = new JFrame("DICOM-VTK");
frame.setBounds(500, 500, 0, 0);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add("Center", panel);
frame.pack();
frame.setVisible(true);
new Thread(panel).start();
}
}
______________________________________________________________
Verschicken Sie romantische, coole und witzige Bilder per SMS!
Jetzt bei WEB.DE FreeMail: http://f.web.de/?mc=021193
More information about the vtkusers
mailing list