> 技术文档 > VTK 交互类介绍

VTK 交互类介绍


一、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图表

如何选择合适的交互样式?

  1. 考虑用户群体

    • 专业用户:TrackballCamera/TrackballActor

    • 普通用户:Unicam

    • 医学专业人员:InteractorStyleImage

  2. 考虑数据类型

    • 3D几何数据:Trackball系列

    • 体数据/医学影像:InteractorStyleImage

    • 地理数据:InteractorStyleTerrain

  3. 考虑交互需求

    • 需要选择对象:RubberBandPick

    • 需要自然导航:TrackballCamera

    • 需要简化操作:Unicam

  4. 考虑平台特性

    • 桌面应用:可以使用复杂交互

    • 触摸屏:考虑手势支持

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