VTK修炼之道74:交互部件_Widget的创建
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的创建相关推荐
- VTK修炼之道73:交互部件_Widget应用综述
1.交互器样式遇到的难题 交互器样式(如vtkInteractorStyleImage)主要是根据不同的键盘.鼠标等消息来控制相机(vtkCamera)/Actor等相关参数,从而达到了交互的目的! ...
- VTK修炼之道77:交互部件_分割/配准类Widget与其他Widget
1.分割/配准交互部件 图像分割与配准是数字图像处理技术两大主要的应用领域,特别是在医学图像处理中. 著名的医学图像分割与配准工具包ITK(Insight Segmentation & Reg ...
- VTK修炼之道71:交互与Widget_观察者/命令模式
1.前言 一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能.图形处理软件ParaView(hhttp://www.paraview.org).德国癌症研究中心研发的MITK(h ...
- VTK修炼之道75:交互部件_测量类Widget的应用
1.与测量类相关的主要Widget 与测量类相关的主要Widget如下: vtkDistanceWidget:用于在二维平面上测量两点之间的距离. vtkAngleWidget:用于在平面的角度测量. ...
- VTK修炼之道76:交互部件_标注类Widget的应用
1.标注类Widget 在可视化程序中,经常会对某个对象做一些标注说明,比如,在医学图像诊断中,常常会手动标注出被诊断为肿瘤的区域或者其他病变区域,并用文字进行标注. VTK中,与标注相关的Widge ...
- VTK修炼之道78:交互与拾取_点拾取
1.拾取 选择拾取是人机交互过程的一个重要功能. 一个最经典的例子就是,在玩3D游戏时,场景中可能会存在多个角色,有时需要用鼠标来选择所要控制的角色,这就要用到拾取功能. 另外,在某些三维图形的编辑软 ...
- VTK修炼之道27:图像基本操作_三维图像切片交互提取(回调函数、观察者-命令模式)
1.鼠标滑动提取三维图像切片 学习三维图像切面的提取后,我们可以实现一个稍微复杂的程序--通过滑动鼠标来切换三维图像切片,这也是医学图像处理软件中一个很基本的功能.实现该功能难点是怎样在VTK中控制鼠 ...
- VTK修炼之道79:交互与拾取_单位拾取
1.单位拾取 示例代码: #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL) VTK_MODULE_INIT(vtkI ...
- VTK修炼之道70:体绘制讨论_光照阴影、VTKLODProp3D
1.光照与阴影 通过VTKVolumeProperty可以设置体绘制阴影效果(Shading).阴影效果主要受环境光系数.散射光系数.反射光系数和高光强度四个参数影响. vtkVolumeProper ...
最新文章
- 年年英雄会,岁岁侠客行
- 逐行分析Hadoop的HelloWorld
- 【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?​​​​​​​
- 最小生成树与最短路径的区别以及实现方法
- QT的QCheckBox类的使用
- activity(流程引擎)从零入门到实战学习
- cocos2d JS 中的数组拼接与排序
- [C# 项目实战]: 制作一个备忘录(经典)
- 安卓程序运行后控件不显示_智能镜子显示屏掀起了智能家居行业的新潮流
- 解决base64通过http传输后+变空格的问题
- oracle登录总结
- 北大博士后放弃985大学副教授教职,回老家从政任区长,引热议!
- 数仓建模—事实表和维度表设计规范
- 日本向日葵8号卫星数据下载
- 【OpenGL ES】纹理
- 关于tomcat启动报错Error deploying web application directory [C:\......]出现的其中一种问题解决:
- Python Crash Course读书笔记 - 第18章:GETTING STARTED WITH DJANGO
- web网页设计期末课程大作业——基于HTML仿唯品会电商项目的设计与实现
- 如何计算股票程序化交易系统的收益率?
- 高新技术企业认定领域细分有几项