一、VTK 交互
基本概念
- 
交互器(Interactor): 处理用户输入事件的基础类
 
- 
交互样式(InteractorStyle): 定义具体的交互行为
 
- 
Widgets: 可交互的UI组件,如滑块、按钮等
 
- 
Picker: 用于选择场景中的对象
 
常用交互类
类名 | 
功能描述 | 
vtkRenderWindowInteractor | 
渲染窗口交互器 | 
vtkInteractorStyle | 
交互样式基类 | 
vtkInteractorStyleTrackballCamera | 
轨迹球相机交互样式 | 
vtkInteractorStyleTrackballActor | 
轨迹球Actor交互样式 | 
vtkBoxWidget | 
3D盒子Widget | 
vtkSphereWidget | 
3D球体Widget | 
vtkSliderWidget | 
滑块Widget | 
vtkPointPicker | 
点选择器 | 
vtkCellPicker | 
单元选择器 | 
vtkAreaPicker | 
区域选择器 | 
通用交互器(vtkRenderWindowInteractor)属性
属性 | 
描述 | 
LightFollowCamera | 
控制光照是否跟随相机 | 
DesiredUpdateRate | 
设置期望的更新速率 | 
StillUpdateRate | 
静止时的更新速率 | 
EnableRender | 
控制是否自动渲染 | 
通用交互器方法
方法 | 
参数 | 
描述 | 
Initialize() | 
- | 
初始化交互器 | 
Start() | 
- | 
启动交互器事件循环 | 
SetRenderWindow(vtkRenderWindow*) | 
渲染窗口 | 
设置关联的渲染窗口 | 
GetRenderWindow() | 
- | 
获取关联的渲染窗口 | 
SetInteractorStyle(vtkInteractorStyle*) | 
交互样式 | 
设置交互样式 | 
CreateRepeatingTimer(millisec) | 
毫秒数 | 
创建重复定时器 | 
DestroyTimer(timerId) | 
定时器ID | 
销毁定时器 | 
交互样式(vtkInteractorStyle)常用方法
方法 | 
参数 | 
描述 | 
OnMouseMove() | 
- | 
鼠标移动回调 | 
OnLeftButtonDown() | 
- | 
左键按下回调 | 
OnLeftButtonUp() | 
- | 
左键释放回调 | 
OnMiddleButtonDown() | 
- | 
中键按下回调 | 
OnRightButtonDown() | 
- | 
右键按下回调 | 
OnChar() | 
- | 
键盘字符输入回调 | 
OnKeyPress() | 
- | 
按键按下回调 | 
SetDefaultRenderer(vtkRenderer*) | 
渲染器 | 
设置默认渲染器 | 
SetCurrentRenderer(vtkRenderer*) | 
渲染器 | 
设置当前渲染器 | 
常用交互样式
样式类型 | 
旋转方式 | 
缩放方式 | 
平移方式 | 
特殊功能 | 
最佳适用场景 | 
TrackballCamera | 
左键拖动 | 
右键拖动/滚轮 | 
中键拖动 | 
惯性旋转 | 
通用3D可视化 | 
TrackballActor | 
左键拖动(对Actor) | 
右键拖动(对Actor) | 
中键拖动(对Actor) | 
对象级交互 | 
单个对象操作 | 
Unicam | 
左键拖动 | 
左键+Ctrl拖动 | 
左键+Shift拖动 | 
单键操作 | 
简化界面 | 
Image | 
不支持 | 
右键拖动 | 
中键拖动 | 
窗宽窗位调整 | 
医学影像 | 
Terrain | 
左键拖动 | 
右键拖动 | 
中键拖动 | 
保持\"上\"方向 | 
地理数据 | 
RubberBandPick | 
无 | 
无 | 
无 | 
区域选择 | 
对象选择 | 
JoystickCamera | 
左键拖动方向 | 
右键控制远近 | 
方向键/WASD | 
第一人称控制 | 
虚拟漫游 | 
RubberBand2D | 
无 | 
区域缩放 | 
中键拖动 | 
2D区域选择 | 
2D图表 | 
如何选择合适的交互样式?
- 
考虑用户群体:
 
- 
考虑数据类型:
 
- 
考虑交互需求:
- 
需要选择对象:RubberBandPick
 
- 
需要自然导航:TrackballCamera
 
- 
需要简化操作:Unicam
 
 
- 
考虑平台特性:
- 
桌面应用:可以使用复杂交互
 
- 
触摸屏:考虑手势支持
 
- 
Web应用:可能需要简化交互
 
 
常用Widget类方法
vtkBoxWidget
方法 | 
参数 | 
描述 | 
SetInteractor(vtkRenderWindowInteractor*) | 
交互器 | 
设置交互器 | 
SetPlaceFactor(float) | 
比例因子 | 
设置初始大小 | 
PlaceWidget(double bounds[6]) | 
边界数组 | 
设置Widget位置 | 
GetTransform(vtkTransform*) | 
变换对象 | 
获取变换矩阵 | 
InsideOutOn()/Off() | 
- | 
控制内部/外部选择 | 
RotationEnabledOn()/Off() | 
- | 
控制旋转是否启用 | 
vtkSliderWidget
方法 | 
参数 | 
描述 | 
SetRepresentation(vtkSliderRepresentation*) | 
表现对象 | 
设置滑块表现 | 
SetAnimationModeToAnimate() | 
- | 
设置动画模式 | 
SetEnabled(int) | 
启用标志 | 
启用/禁用Widget | 
AddObserver(unsigned long, vtkCommand*) | 
事件类型, 命令 | 
添加观察者 | 
Widgets 与交互样式的区别
核心概念区别
特性 | 
交互样式 (InteractorStyle) | 
Widgets (如vtkBoxWidget) | 
设计目的 | 
控制整个场景的导航和观察方式 | 
创建和操作场景中的特定交互元素 | 
交互层级 | 
全局级别,影响整个渲染窗口 | 
对象级别,操作特定Widget实例 | 
中文Alexa排名查询