1.创建Widget交互的步骤

虽然每个Widget都提供了不同的功能以及不同的API,但是,Widget的创建以及使用基本都是类似的。创建Widget的一般步骤如下:
1.实例化Widget;
2.指定渲染窗口交互器。Widget可以通过它来监听用户事件。
3.必要时使用观察者/命令模式创建回调函数。与widget交互时,它会调用一些通用的VTK事件(94个事件列表),如StartInteractionEvent、InteractionEvent、EndInteractionEvent。用户通过监听这些事件并作出响应,从而可以更新数据、可视化参数或者应用程序的用户图形界面。
4.创建合适的几何表达实体。并用SetRepresentation()函数把他与Widget关联起来,或者使用Widget默认的几何表达实体。
5.最后,必须激活Widget,使其在渲染场景中显示。默认情况下,按键<I>用于激活Widget,使其可以再场景中可见。
正如之前我们讨论的那样,如果对Widget默认的事件绑定不满意,需要根据自己习惯定义的事件绑定,可以使用VTKWidgetEventTranslator类。同样,也可以使用该类的RemoveTranslation()函数取消已经绑定的事件,具体操作如下:
translator->RemoveTranslation(vtkCommand::LeftButtonPressEvent);
translator->RemoveTranslation(vtkCommand::LeftButtonReleaseEvent);

2.Widget响应其他事件

VTK Widget除了响应来自用户的事件以外,也响应一些其他事件,比如时钟事件。以VTKBalloonWidget为例,该Widget主要是用于当鼠标在某个Actor上停留指定的时间间隔后,弹出文本或图像等类型的提示信息。所以,对于这个Widget来说,它会监听交互器上的MouseMoveEvent和TimeEvent事件,当鼠标在某个Actor上停留的时间达到用户设定的“时间间隔”时,就会执行相应的操作。

3.同一时刻多个对象监听

 对于渲染窗口交互期的事件来说,有可能在某一时刻有多个对象在监听,这些类包括vtkInteractorObserver的所有子类,如vtkInteractorStyle或者场景中的一个或者多个Widget类。
在渲染场景中移动鼠标时,如果不是在某个Widget上移动,鼠标的移动事件就会被vtkInteractorStyle捕获;
如果是在某个Widget上移动,鼠标的移动事件就会被这个Widget捕获。这种场景很可能导致事件的竞争
对事件的处理机制就是优先级(Priorities)。所有vtkInteractorObserver的子类都会通过SetPriority()函数设置一个优先级。拥有高优先级的对象比低优先级的对象优先处理事件,还可以对捕获到的事件选择处理还是丢弃,实际上就是获取到了“焦点Focus”。实际上,Widget可以比vtkInteractorStyle优先处理事件也是因为他比vtkInteractorStyle具有更高的优先级

4.VTK中主要的Widget类以及相应的样式

5.参看资料

1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3.  张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.

VTK修炼之道74:交互部件_Widget的创建相关推荐

  1. VTK修炼之道73:交互部件_Widget应用综述

    1.交互器样式遇到的难题 交互器样式(如vtkInteractorStyleImage)主要是根据不同的键盘.鼠标等消息来控制相机(vtkCamera)/Actor等相关参数,从而达到了交互的目的! ...

  2. VTK修炼之道77:交互部件_分割/配准类Widget与其他Widget

    1.分割/配准交互部件 图像分割与配准是数字图像处理技术两大主要的应用领域,特别是在医学图像处理中. 著名的医学图像分割与配准工具包ITK(Insight Segmentation & Reg ...

  3. VTK修炼之道71:交互与Widget_观察者/命令模式

    1.前言 一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能.图形处理软件ParaView(hhttp://www.paraview.org).德国癌症研究中心研发的MITK(h ...

  4. VTK修炼之道75:交互部件_测量类Widget的应用

    1.与测量类相关的主要Widget 与测量类相关的主要Widget如下: vtkDistanceWidget:用于在二维平面上测量两点之间的距离. vtkAngleWidget:用于在平面的角度测量. ...

  5. VTK修炼之道76:交互部件_标注类Widget的应用

    1.标注类Widget 在可视化程序中,经常会对某个对象做一些标注说明,比如,在医学图像诊断中,常常会手动标注出被诊断为肿瘤的区域或者其他病变区域,并用文字进行标注. VTK中,与标注相关的Widge ...

  6. VTK修炼之道78:交互与拾取_点拾取

    1.拾取 选择拾取是人机交互过程的一个重要功能. 一个最经典的例子就是,在玩3D游戏时,场景中可能会存在多个角色,有时需要用鼠标来选择所要控制的角色,这就要用到拾取功能. 另外,在某些三维图形的编辑软 ...

  7. VTK修炼之道27:图像基本操作_三维图像切片交互提取(回调函数、观察者-命令模式)

    1.鼠标滑动提取三维图像切片 学习三维图像切面的提取后,我们可以实现一个稍微复杂的程序--通过滑动鼠标来切换三维图像切片,这也是医学图像处理软件中一个很基本的功能.实现该功能难点是怎样在VTK中控制鼠 ...

  8. VTK修炼之道79:交互与拾取_单位拾取

    1.单位拾取 示例代码: #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL) VTK_MODULE_INIT(vtkI ...

  9. VTK修炼之道70:体绘制讨论_光照阴影、VTKLODProp3D

    1.光照与阴影 通过VTKVolumeProperty可以设置体绘制阴影效果(Shading).阴影效果主要受环境光系数.散射光系数.反射光系数和高光强度四个参数影响. vtkVolumeProper ...

最新文章

  1. 年年英雄会,岁岁侠客行
  2. 逐行分析Hadoop的HelloWorld
  3. 【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?​​​​​​​
  4. 最小生成树与最短路径的区别以及实现方法
  5. QT的QCheckBox类的使用
  6. activity(流程引擎)从零入门到实战学习
  7. cocos2d JS 中的数组拼接与排序
  8. [C# 项目实战]: 制作一个备忘录(经典)
  9. 安卓程序运行后控件不显示_智能镜子显示屏掀起了智能家居行业的新潮流
  10. 解决base64通过http传输后+变空格的问题
  11. oracle登录总结
  12. 北大博士后放弃985大学副教授教职,回老家从政任区长,引热议!
  13. 数仓建模—事实表和维度表设计规范
  14. 日本向日葵8号卫星数据下载
  15. 【OpenGL ES】纹理
  16. 关于tomcat启动报错Error deploying web application directory [C:\......]出现的其中一种问题解决:
  17. Python Crash Course读书笔记 - 第18章:GETTING STARTED WITH DJANGO
  18. web网页设计期末课程大作业——基于HTML仿唯品会电商项目的设计与实现
  19. 如何计算股票程序化交易系统的收益率?
  20. 高新技术企业认定领域细分有几项

热门文章

  1. 随笔汇总_索取资料请进入
  2. Oracle中的pfile和spfile详解
  3. hdu 1078(记忆化搜索)
  4. hdu-Cube(三位树状数组)
  5. DirectX11 初探XMVECOTRXMMATRIX
  6. 【★】假如人类使用16进制
  7. 第一阶段站立会议05
  8. iOS使用Charts框架绘制—柱形图
  9. 2.1 Java程序的构成
  10. Java基础之Calendar应用:每周三、六休息,从某个日期起至今休息多少天?