vtkWidget¶
1 vtk交互介绍¶
我们在与图形/图像交互时,一般有两种方式: 看的见的交互、和看不见的交互。
- 看不见的交互: 手机浏览图片双手可以控制缩放、笔记本浏览网页时双手可以在触摸屏上实现鼠标滚动的操作、各种软件的快捷键都属于看不见的交互
- 看的见的交互: 测量距离时选取第一个点后生成一条线、多个连通域选中其中一个连通域、图表的图例这些都属于看得见的交互
vtk在设计交互是按照这两个大类分开设计: 看不见的交互:交互样式(比如KeyPressEvent键盘响应事件) 看的见的交互:vtk Widget
vtk的看的交互都属于vtkWidget,大概可以分为(标注类、测量类、分割配准类、其他)。他们全部集成自两个类vtk3DWidget和vtkAbstractWidget。 vtk3DWidget:在三维渲染场景中生成可视化的实体。 vtkAbstractWidget:在三维渲染场景中生成 交互/表达 实体。 大致可以理解为vtk3DWidget下交互的对象是本身建立的,无法脱离交互而存在。vtkAbstractWidget仅仅是交互,起交互对象是完全脱离的数据。比如放置种子点Widget vtkSeedWidget。就是继承自vtkAbstractWidget,他的种子点就是独立出去的单独数据,其他widget也可以操作。 vtkAbstractWidget好处就是事件的处理与widget的表达互不干扰,同一个widget可以使用不同的表达。
2 vtkWidget继承关系图¶
graph LR
vtkInteractorObserver ==> vtk3DWidget
vtk3DWidget ==> vtkBoxWidget
vtk3DWidget ==> vtkBrokenLineWidget
vtk3DWidget ==> vtkImageCroppingRegionsWidget
vtk3DWidget ==> vtkImageTracerWidget
vtk3DWidget ==> vtkLineWidget
vtk3DWidget ==> vtkPointWidget
vtk3DWidget ==> vtkPolyDataSourceWidget
vtkPolyDataSourceWidget ==> vtkImagePlaneWidget
vtkPolyDataSourceWidget ==> vtkImplicitPlaneWidget
vtkPolyDataSourceWidget ==> vtkPlaneWidget
vtk3DWidget ==> vtkSphereWidget
vtk3DWidget ==> vtkSplineWidget
vtkInteractorObserver ==> vtkAbstractWidget
vtkAbstractWidget ==> vtkAffineWidget
vtkAbstractWidget ==> vtkAngleWidget
vtkAbstractWidget ==> vtkAxesTransformWidget
vtkAbstractWidget ==> vtkBiDimensionalWidget
vtkAbstractWidget ==> vtkBorderWidget
vtkBorderWidget ==> vtkCameraWidget
vtkBorderWidget ==> vtkCaptionWidget
vtkBorderWidget ==> vtkLogoWidget
vtkBorderWidget ==> vtkPlaybackWidget
vtkBorderWidget ==> vtkProgressBarWidget
vtkBorderWidget ==> vtkScalarBarWidget
vtkBorderWidget ==> vtkTextWidget
vtkAbstractWidget ==> vtkBoxWidget2
vtkAbstractWidget ==> vtkButtonWidget
vtkAbstractWidget ==> vtkCenteredSliderWidget
vtkAbstractWidget ==> vtkCheckerboardWidget
vtkAbstractWidget ==> vtkCompassWidget
vtkAbstractWidget ==> vtkContinuousValueWidget
vtkAbstractWidget ==> vtkContourWidget
vtkAbstractWidget ==> vtkDistanceWidget
vtkAbstractWidget ==> vtkFinitePlaneWidget
vtkAbstractWidget ==> vtkHandleWidget
vtkAbstractWidget ==> vtkHoverWidget
vtkHoverWidget ==> vtkBalloonWidget
vtkAbstractWidget ==> vtkImplicitCylinderWidget
vtkAbstractWidget ==> vtkImplicitPlaneWidget2
vtkAbstractWidget ==> vtkLightWidget
vtkAbstractWidget ==> vtkLineWidget2
vtkAbstractWidget ==> vtkOpenVRMenuWidget
vtkAbstractWidget ==> vtkOpenVRPanelWidget
vtkAbstractWidget ==> vtkParallelopipedWidget
vtkAbstractWidget ==> vtkPolyLineWidget
vtkAbstractWidget ==> vtkQWidgetWidget
vtkAbstractWidget ==> vtkRectilinearWipeWidget
vtkAbstractWidget ==> vtkResliceCursorWidget
vtkAbstractWidget ==> vtkSeedWidget
vtkAbstractWidget ==> vtkSliderWidget
vtkAbstractWidget ==> vtkSphereWidget2
vtkAbstractWidget ==> vtkSplineWidget2
vtkAbstractWidget ==> vtkTensorProbeWidget
3 vtkWidget 详细使用¶
每个vtkWidget(vtk3DWidget下的几个除外),都会把vtk事件改成widget事件。说白了就是所有的看的见的交互事件都是把看不见的交互绑定过来,如果我们对看的见的交互不满意,可以直接换,使用vtkWidgetEventTranslator。(如果是Qt的话有一套信号槽绑定方式。InvokeEvent vtkEventQtSlotConnect vtkCommand)
4 创建Widget¶
每个widget都提供了不同的功能以及不同的API,但是widget的创建以及使用基本一样。 1)实例化widget 2)指定渲染窗口交互器 3)创建回调函数(qt里就直接绑定信号和槽) 4)创建模型,并与widget关联 5)激活widget 6)反激活widget
接下来周末空余时候了解常用widget的使用方法,并整理记录:
5 测量类 Widget¶
vtkDistanceWidget vtkAngleWidget vtkBiDimensionalWidget
5.1.1 2. 标注类 Widget¶
vtkBoxWidget vtkScalarBarWidget vtkCaptionWidget vtkOrientationMarkerWidget vtkBalloonWidget vtkBorderWidget
5.1.2 3. 分割/配准类Widget¶
vtkSeedWidget vtkBrokenLineWidget vtkContourWidget vtkImageTracerWidget vtkCheckerboardWidget vtkRectilinearWipeWidget
6 其他 Widget¶
vtkBoxWidget
7 待分类学习¶
| Widget类名 |
|---|
| vtkImageCroppingRegionsWidget |
| vtkLineWidget |
| vtkPointWidget |
| vtkPolyDataSourceWidget |
| vtkImagePlaneWidget |
| vtkImplicitPlaneWidget |
| vtkPlaneWidget |
| vtkSphereWidget |
| vtkSplineWidget |
| vtkAbstractWidget |
| vtkAffineWidget |
| vtkAxesTransformWidget |
| vtkCameraWidget |
| vtkLogoWidget |
| vtkPlaybackWidget |
| vtkProgressBarWidget |
| vtkBoxWidget2 |
| vtkButtonWidget |
| vtkCenteredSliderWidget |
| vtkCompassWidget |
| vtkContinuousValueWidget |
| vtkFinitePlaneWidget |
| vtkHandleWidget |
| vtkHoverWidget |
| vtkImplicitCylinderWidget |
| vtkImplicitPlaneWidget2 |
| vtkLightWidget |
| vtkLineWidget2 |
| vtkOpenVRMenuWidget |
| vtkOpenVRPanelWidget |
| vtkParallelopipedWidget |
| vtkPolyLineWidget |
| vtkQWidgetWidget |
| vtkResliceCursorWidget |
| vtkSliderWidget |
| vtkSphereWidget2 |
| vtkSplineWidget2 |
| vtkTensorProbeWidget |