vtk拦截事件并处理

有两种方式:
1.当做一般类进行处理;
2.继承系统提供的interactorstyle类,并重写相应的处理方法或者自定义方法。
#**include** <vtkPolyDataMapper.h> #**include** <vtkObjectFactory.h> #**include** <vtkCommand.h> #**include** <vtkActor.h> #**include** <vtkSmartPointer.h> #**include** <vtkRenderWindow.h> #**include** <vtkRenderer.h> #**include** <vtkRenderWindowInteractor.h> #**include** <vtkInteractorStyle.h> #**include** <vtkPolyData.h> #**include** <vtkSphereSource.h> #**include** <vtkInteractorStyleTrackballCamera.h> // 一般类 **class** MyClass { **public**: **void** KeypressCallbackFunction(vtkObject* caller, **long** **unsigned** **int** eventId, **void*** callData ) { std::cout << "Caught event in MyClass" << std::endl; } }; // 继承自interactorstyle的类 **class** MyInteractorStyle : **public** vtkInteractorStyleTrackballCamera { **public**: **static** MyInteractorStyle* New(); vtkTypeMacro(MyInteractorStyle, vtkInteractorStyleTrackballCamera); **void** KeypressCallbackFunction(vtkObject* caller, **long** **unsigned** **int** eventId, **void*** callData ) { std::cout << "Caught event in MyInteractorStyle" << std::endl; } }; vtkStandardNewMacro(MyInteractorStyle); **int** main(**int**, **char** *[]) { // Create a sphere vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New(); sphereSource->SetCenter(0.0, 0.0, 0.0); sphereSource->SetRadius(5.0); sphereSource->Update(); vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(sphereSource->GetOutputPort()); // Create an actor vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); // A renderer and render window vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); // An interactor vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow(renderWindow); MyClass myClass;
//直接将对象绑定到interactor上 renderWindowInteractor->AddObserver(vtkCommand::KeyPressEvent, &myClass, &MyClass::KeypressCallbackFunction); MyInteractorStyle* style = MyInteractorStyle::New();
//将interactorstyle引用绑定到interactor上 renderWindowInteractor->AddObserver(vtkCommand::KeyPressEvent, style, &MyInteractorStyle::KeypressCallbackFunction); vtkSmartPointer<MyInteractorStyle> style2 = vtkSmartPointer<MyInteractorStyle>::New(); renderWindowInteractor->AddObserver(vtkCommand::KeyPressEvent, style2, &MyInteractorStyle::KeypressCallbackFunction); renderer->AddActor(actor); renderer->SetBackground(1,1,1); // Background color white renderWindow->Render(); renderWindowInteractor->Start(); style->Delete(); **return** EXIT_SUCCESS; }
坚持原创技术分享,您的支持将鼓励我继续创作!