有两种方式:
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;
}