vtk交互器方式与回调函数

处理vtk鼠标事件从实现方式上看有两种方式:
1.通过继承vtk的interactorstyle父类,实现virtual类来达到目的
代码示例:

1.  `//实现interactorstyle类`
2.  `class MyVtkInteractorStyle : public vtkInteractorStyleTrackballCamera`
3.  `{`
4.  `public:`
5.  `    static MyVtkInteractorStyle *New();`
6.  `    vtkTypeMacro(MyVtkInteractorStyle, vtkInteractorStyleTrackballCamera);`
7.  `             ...`
8.  `    virtual void OnMouseMove();`
9.  `    virtual void OnLeftButtonDown();`
10.  `    virtual void OnLeftButtonUp();`
11.  `             ...`
12.  `};`

1.  `//使用该交互器方式            `
2.  `            ...    `
3.  `vtkSmartPointer<MyVtkInteractorStyle> style =`
4.  `    vtkSmartPointer<MyVtkInteractorStyle>::New();`
5.  

6.  renderWindowInteractor->SetInteractorStyle(style);

7.              ...
2.通过自有交互器方式绑定callback。此处又分为绑定vtkCommand子类和callback function,只介绍绑定子类的实现,两者基本相同
代码示例:

1.  `class vtkImageInteractionCallback : public vtkCommand`
2.  `{`
3.  `public:`
4.  `    static vtkImageInteractionCallback *New();`
5.  `                   ...`
6.  `    virtual void Execute(vtkObject *caller, unsigned long eventId,void *callData)`
7.  `    {`
8.  `        switch(eventId)`
9.  `        {`
10.          case(vtkCommand::LeftButtonPressEvent):

11.  `            {//通过switch处理`
12.  `                cout << "catch left button down in callback"<<endl;`
13.  `                break;`
14.  `            }`
15.      }

16.                     ...
17.  `};`

1.  `//通过监视`vtkCommand::MouseMoveEvent等事件调用回调函数
2.  `
`
3.  `vtkSmartPointer<vtkImageInteractionCallback> callback =`
4.  `        vtkSmartPointer<vtkImageInteractionCallback>::New();`
5.6.  `    vtkSmartPointer<MyVtkInteractorStyle> style =`
7.  `        vtkSmartPointer<MyVtkInteractorStyle>::New();`
8.  `    style->AddObserver(vtkCommand::MouseMoveEvent, callback);`
9.  `    style->AddObserver(vtkCommand::LeftButtonPressEvent, callback);`
10.
我试着将自己实现的interactorstyle类绑定callback类,同时处理鼠标左击事件,会发生什么呢?
逻辑上讲应该是先interactor检测到事件发生,再调用callback。也就是说先有1中的发生,后有2中的发生。
实际情况是只有2中的方式被调用了。

</div></div></div></div>

[来自为知笔记(Wiz)](http://www.wiz.cn/i/c09d0bb5 "来自为知笔记(Wiz)")
坚持原创技术分享,您的支持将鼓励我继续创作!