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 |