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

本文详细介绍了VTK中交互与Widget的实现,通过观察者/命令模式,阐述了事件回调方案和vtkCommand子类的使用,帮助理解VTK的事件处理机制。
摘要由CSDN通过智能技术生成

1.前言

一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能。图形处理软件ParaView(hhttp://www.paraview.org)、德国癌症研究中心研发的MITK(http://www.mitk.org)等开源软件系统都提供了强大的交互功能,作为ParaView、MITK等软件构件基础的VTK同样也提供了各种各样的交互功能。
VTK的交互除了可以监听来自鼠标、键盘等外部设备的消息,还可以在渲染场景中生成功能各异的交互部件(Widget),用于控制可视化过程的参数,达到用户的渲染要求。

2.观察者/命令模式(Observe/Command)

观察者/命令模式是VTK里用的比较多的设计模式。
VTK中绝大多数的类都派生自vtkObject。查看类vtkObject的接口可以找到AddObserve()、RemoveObserve()、GetCommand()等函数。
观察者/命令模式是指一个Object可以有多个Observe,他定义了对象间的一种“一对多”的依赖关系,当一个Object对象的状态发生改变时,所有依赖于它的Observe对象都得到通知而被自动更新命令模式属于对象行为模式,他将一个请求封装为一个对象,并提供一致性发送请求的接口,当一个事件发生时,他不直接把事件传递给事件调用者,而是在命令和调用者之间增加一个中间者,讲这种直接关系切断,同时将两者都隔离。事件调用者只是和接口打交道,不和具体事件实现交互。
在VTK中,可以通过两种方式来实现观察者/命令模式,他们分别是使用时间回调函数、从VTKCommand派生出具体的子类。

2.1 观察者-事件回调方案

在vtkObject中,有如下函数:
unsigned long AddObserver(unsigned long event, vtkCommand *,  float priority = 0.0f);
unsigned long AddObserver(const char* event, vtkCommand *, float priority = 0.0f);
AddObserver()函数的作用就是针对某个事件添加挂插着到某个VTK对象中
当该对象发生观察者感兴趣的事件时,就会自动调用回调函数,执行相关操作
下面是一个非常简单的例子演示了在VTK里是如何使用“观察者-事件回调函数”方案的࿱
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值