VTK的交互方式
- 交互样式 (Interactor Styles)
- 事件机制
一、通过设置交互样式(Interactor Styles)来实现交互行为
交互样式主要有
- vtkInteractorStyleTrackballCamera
功能:允许用户通过拖动鼠标来旋转、缩放和移动相机。
适用场景:3D 场景的自由视角交互。 - vtkInteractorStyleImage
功能:专门用于图像的交互,比如在医学图像中进行切片浏览。
适用场景:处理和查看图像数据集。 - vtkInteractorStyleRubberBandZoom
功能:允许用户使用橡皮带框选区域进行缩放。
适用场景:需要局部放大查看的情况。 - 等…
其具体使用方法如下所示:
vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(renderWindow);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
interactor->SetInteractorStyle(style);
有时候我们需要自定义一些交互方式,可以选择继承上述交互样式,然后具体重写某个交互方式,以vtkInteractorStyleTrackballCamera
为例子:
-
其主要功能为
vtkInteractorStyleTrackballCamera
的主要功能是通过鼠标事件控制相机的行为: -
旋转:通过鼠标左键拖动,旋转场景。
-
平移:通过鼠标中键拖动,平移场景。
-
缩放:通过鼠标右键拖动或滚轮滚动,缩放场景。
-
重置:支持将相机重置到初始位置。
我们可以根据需要自定义交互行为,通过继承vtkInteractorStyleTrackballCamera
并重写事件处理方法。例如,以下代码展示了如何禁用右键缩放功能:
class CustomInteractorStyle : public vtkInteractorStyleTrackballCamera {
public:
static CustomInteractorStyle* New() {
return new CustomInteractorStyle;
}
virtual void OnRightButtonDown() override {
// 禁用右键缩放功能
std::cout << "Right button pressed, but zoom is disabled." << std::endl;
}
};
int main() {
// ...(省略前面的代码)
// 使用自定义的交互风格
vtkSmartPointer<CustomInteractorStyle> style = vtkSmartPointer<CustomInteractorStyle>::New();
interactor->SetInteractorStyle(style);
// ...(省略后面的代码)
这样便完成了 自定义的交互样式。
二、通过设置事件机制来实现交互行为
具体可参考下面这篇文章:
VTK交互(三维图像切片切换)
通过为renderWindowInteractor
添加事件观察器 AddObserver(event, callback)
来实现一些特定的交互。
总结
- 交互样式(Interactor Styles) 主要用于设置全局的交互行为
- 事件机制主要更倾向于用于监听和处理特定的事件。
- 我们可以同时使用 SetInteractorStyle 和 AddObserver 来实现复杂的交互逻辑