VTK Learning Eight

64 篇文章 10 订阅
39 篇文章 7 订阅

VTK Learning Eight

引言

VTK事件回调演示。第一种回调函数模式;第二种继承并实现vtkCommand

回调函数模式

#include <vtkCallbackCommand.h>
 
long cntPress = 0;
void MyCallbackFunc(vtkObject* object, unsigned long eid, void* clientdata, void* calldata)
{
	std::cout << "You have clicked : " << ++cntPress << " times" << std::endl;
	std::cout << "Object: " << object->GetClassName() << std::endl;
	std::cout << "EventID: " << eid <<":"<< vtkCommand::GetStringFromEventId(eid)<< std::endl;
	std::cout << "ClientData: " <<*((double*)clientdata )<< std::endl;
	std::cout << "calldata" << calldata << std::endl;
}

#include <vtkSmartPointer.h>
#include <vtkPNGReader.h>
#include <vtkImageViewer2.h>

#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
 
int main()
{
	vtkSmartPointer<vtkPNGReader> reader =
		vtkSmartPointer<vtkPNGReader>::New();
	reader->SetFileName("D:\\VTK\\VTK_Build\\ExternalData\\Testing\\Data\\vtk.png");
	reader->Update();
 
	vtkSmartPointer<vtkImageViewer2> viewer =
		vtkSmartPointer<vtkImageViewer2>::New();
	viewer->SetInputData(reader->GetOutput());
 
	viewer->GetRenderer()->SetBackground(0, 0, 0);
	viewer->SetSize(480, 320);
	viewer->GetRenderWindow()->SetWindowName("Observer-Callback");
 
	vtkSmartPointer<vtkRenderWindowInteractor> rwi =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();

	viewer->SetupInteractor(rwi);
	viewer->Render();
	/*************************************************************/
	//Step1:设置事件回调函数
	vtkSmartPointer<vtkCallbackCommand> mouseCallback =
		vtkSmartPointer<vtkCallbackCommand>::New();
	double data = 0.01;
	mouseCallback->SetCallback(MyCallbackFunc);
	mouseCallback->SetClientData(&data);
	//Step2:将vtkCallbackCommand对象添加到观察者列表。
	rwi->SetRenderWindow(viewer->GetRenderWindow()); 
	rwi->AddObserver(vtkCommand::LeftButtonPressEvent, mouseCallback);
 
	rwi->Initialize();
	rwi->Start();
	return 0;
}

vtkCommand子类的方式


class vtkMyCommand : public vtkCommand{
public:
	static vtkMyCommand *New() { return new vtkMyCommand; }
	 
   virtual void Execute(vtkObject *object, unsigned long event, void * clientdata) {
		std::cout << "You have clicked : " << ++cntPress << " times" << std::endl;
		std::cout << "Object: " << object->GetClassName() << std::endl;
		std::cout << "EventID: " << event << ":" << vtkCommand::GetStringFromEventId(event) << std::endl;
	 }
};
//
rwi->AddObserver(vtkCommand::LeftButtonPressEvent, vtkMyCommand::New());

测试

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值