VTK的观察者-事件回调方案

1.定义回调函数。

回调函数的函数签名只能是以下形式:

void long MyCallbackFunc(vtkObject* obj, unsigned long eid, void* clientdata, void* calldata);

注意,它在被调用时,没有被传入参数obj(调用AddObserver()函数的对象,对应于本例的rwi)、eid(是所要监听的事件ID)、clientdata(要访问主程序里面得数据时,由主程序向回调函数传递的数据。)、calldata(随着回调函数发送得数据,比如说,当调用ProgressEvent事件时,会自动发送当前的进度值作为callback。)。

而是直接mouseCallback->SetCallback(MyCallbackFunc); 调用。

mouseCallbackinteractor->AddObserver(vtkCommand::LeftButtonPressEvent, mouseCallback);来调用。

例子为:


long cntPress = 0;

void MyCallbackFunc(vtkObject*, unsigned long eid, void* clientdata, void* calldata)

{

std::cout << "You have clicked : " << ++cntPress << " times" << std::endl;

}

其中:

obj:是调用事件的对象(即调用AddObserver()函数的对象,对应于本例的rwi);

eid:是所要监听的事件ID,VTK中的事件定义在vtkCommand.h文件中;

clientdata:是与VTKCallbackCommand实例相关的数据,简单地说,是指回调函数里需要访问主程序里面得数据时,由主程序向回调函数传递的数据。

calldata:是执行vtkObject::InvokeEvent()函数时,随着回调函数发送得数据,比如说,当调用ProgressEvent事件时,会自动发送当前的进度值作为callback。

2.创建一个VTKCallbackCommand对象,并调用VTKCallbackCommand::SetCallback()函数设置所定义的回调函数。

//Step1:设置事件回调函数

vtkSmartPointer<vtkCallbackCommand> mouseCallback =

vtkSmartPointer<vtkCallbackCommand>::New();

mouseCallback->SetCallback(MyCallbackFunc); //很重要!!!

3.将VTKCallbackCommand对象添加到对象的观察者列表中。

//Step2:将vtkCallbackCommand对象添加到观察者列表。

rwi->SetRenderWindow(viewer->GetRenderWindow()); //唤醒显示窗口

rwi->AddObserver(vtkCommand::LeftButtonPressEvent, mouseCallback);

interactor->AddObserver(vtkCommand::LeftButtonPressEvent, mouseCallback);

负责将鼠标单击左键的事件,与调用鼠标回调函数的事件连接起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值