一、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排名查询