用 Java 重写 VTK 示例“MouseEvents”(https://examples.vtk.org/site/Cxx/Interaction/MouseEvents/)后,
import vtk.vtkActor;
import vtk.vtkInteractorStyleTrackballCamera;
import vtk.vtkNativeLibrary;
import vtk.vtkRenderWindow;
import vtk.vtkRenderWindowInteractor;
import vtk.vtkRenderer;
import vtk.vtkSphereSource;
import vtk.vtkPolyDataMapper;
public class MouseEvents {
static {
vtkNativeLibrary.LoadAllNativeLibraries();
vtkNativeLibrary.DisableOutputWindow(null);
}
public static void main(String[] args) {
new MouseEvents();
}
public MouseEvents() {
vtkSphereSource sphereSource = new vtkSphereSource();
sphereSource.SetCenter(0.0, 0.0, 0.0);
sphereSource.SetRadius(5.0);
sphereSource.Update();
vtkPolyDataMapper mapper = new vtkPolyDataMapper();
mapper.SetInputConnection(sphereSource.GetOutputPort());
vtkActor actor = new vtkActor();
actor.SetMapper(mapper);
vtkRenderer renderer = new vtkRenderer();
renderer.AddActor(actor);
vtkRenderWindow renderWindow = new vtkRenderWindow();
renderWindow.AddRenderer(renderer);
renderWindow.SetWindowName("MouseEvents");
vtkRenderWindowInteractor renderWindowInteractor = new vtkRenderWindowInteractor();
renderWindowInteractor.SetRenderWindow(renderWindow);
customMouseInteractorStyle style = new customMouseInteractorStyle();
renderWindowInteractor.SetInteractorStyle(style);
renderWindow.Render();
renderWindowInteractor.Initialize();
renderWindowInteractor.Start();
}
static class customMouseInteractorStyle extends vtkInteractorStyleTrackballCamera {
public customMouseInteractorStyle() {
super();
}
public void OnLeftButtonDown() {
System.out.println("Pressed left mouse button.");
super.OnLeftButtonDown();
}
public void OnMiddleButtonDown() {
System.out.println("Pressed middle mouse button.");
super.OnMiddleButtonDown();
}
public void OnRightButtonDown() {
System.out.println("Pressed right mouse button.");
super.OnRightButtonDown();
}
}
}
单击鼠标按钮时我没有得到任何输出。我可以成功地使用所有 3 个鼠标按钮来操纵球体,但没有打印任何内容。它是 C++ 代码的真实翻译。然而,Python 示例添加了一个观察者。
需要以下 3 行来产生所需的输出:
renderWindowInteractor.AddObserver("LeftButtonPressEvent", style, "OnLeftButtonDown");
renderWindowInteractor.AddObserver("MiddleButtonPressEvent", style, "OnMiddleButtonDown");
renderWindowInteractor.AddObserver("RightButtonPressEvent", style, "OnRightButtonDown");
C++ 示例中没有这些行。