vtk消息响应初探 分享

原文出处: http://liyingchao.blog.sohu.com/16803394.html

 

 

最近刚刚开始用vtk,对于一个高手老说我下面提到的内容当然不成问题,但是对于一个vtk newer来说就显得无从下手,把自己经过一番摸索的心得写一下,希望大家多多交流。

问题:怎样在vtk窗口中加入自己的消息响应?

这 个问题可以有2个层次,一是对已经定义的消息加入自己的消息响应函数,二是用户对自定义的消息加入消息响应函数;第一个层次就比较简单,可以直接应用已经 定义的消息,只要写出自己的消息响应函数即可。比如我们知道vtk窗口有些键盘操作响应,其中u键的对应消息是 vtkCommand::UserEvent,这个是已经定义好的消息,我们可以加入自己的消息响应。至于第二个层次我没有用到,也没有深究,如果你了解 不妨跟贴,一起讨论。

关于vtkRenderWindowInteractor消息的操作,主要有几个类:

vtkCommand vtkCallbackCommand vtkInteractorStyle


vtkCommand定义消息类型并提供消息回调机制;

vtkInteractorStyle 是专门的消息相应类,其中ProcessEvents成员函数定义了各种消息的调用,也就是对消息响应函数的调用,其子类是各种不同的消息响应函 数;vtkRenderWindowInteractor中的style成员类型定义的就是不同的消息响应类,默认的是 vtkInteractorStyleSwitch,它是一个开关选择类,可以选择vtkInteractorStyle的不同子类实例作为style成 员,这个开关默认是vtkInteractorStyleJoystickCamera;当然也可以通过 vtkRenderWindowInteractor::setInteractorStyle进行修改,以满足自己对消息响应的需要;


下面说一下为已定义的消息(不是用户自定义的消息)调用自己的回调函数:

主要是利用vtkRenderWindowInteractor::AddObserver(event,vtkCommand*,priority); event是消息类型,vtkCommand对象提供回调函数,后面优先级默认为0.0;

如果我们为点击鼠标左键建立回调函数的话,可以这样:

 void f(vtkObject*, unsigned long eid, void* clientdata, void *calldata)
 {
  ......
 }
 vtkCallbackCommand *mycall = vtkCallbackCommand::New();
 mycall->SetCallback(&f);
 rwi->AddObserver(vtkCommand::LeftButtonPressEvent,mycall);

rwi是vtkRenderWindowInteractor对象;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值