VTK MouseEvents 示例不适用于 Java 包装器

问题描述 投票:0回答:1

用 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 示例添加了一个观察者。

java events mouse wrapper vtk
1个回答
0
投票

需要以下 3 行来产生所需的输出:

renderWindowInteractor.AddObserver("LeftButtonPressEvent", style, "OnLeftButtonDown");
renderWindowInteractor.AddObserver("MiddleButtonPressEvent", style, "OnMiddleButtonDown");
renderWindowInteractor.AddObserver("RightButtonPressEvent", style, "OnRightButtonDown");

C++ 示例中没有这些行。

© www.soinside.com 2019 - 2024. All rights reserved.