VTK的交互器

VTK中鼠标消息是在交互类型对象(interactorstyle)中响应,因此通过为交互类型对象(interactorstyle)添加观察者(observer)来监听相应的消息,当消息触发时,由命令模式执行相应的回调函数

vtkRenderWindowInteracto r能捕捉渲染窗口中的鼠标和键盘事件,并将这些事件转变为对相机、演员和属性对象的相应操作,具体的转变由交互方式确定;

vtkRenderWindowInteractor为鼠标/键计时器事件提供独立于平台的交互机制。它作为平台相关实现的基类,处理将鼠标/键/计时器消息交给vtkInteractorObserver 及其子类进行处理。

注意:vtkRenderWindowInteractor通过VTK的命令/观察者设计模式 路由事件。也就是说,当vtkRenderWindowInteractor(实际上是它在平台上的具体一个子类,比如在Windows平台下会使用vtkWin32RenderWindowInteractor)看到依赖于平台的事件时,它会使用InvokeEvent()方法 将其转换为VTK事件;然后,为该事件注册的任何vtkInteractorObserver 都将视情况作出响应。

具体的使用流程:

1.创建一个交互器vtkRenderWindowInteractor对象iren;

复制代码
	vtkSmartPointer<vtkRenderWindowInteractor> iren = 
		vtkSmartPointer<vtkRenderWindowInteractor>::New();

2.给对象iren设定SetRenderWindow()需要交互的窗口;

复制代码
	iren->SetRenderWindow(renWin);

3.给对象iren指定SetInteractorStyle()特定的交互方式style ,如果没有指定,交互器会使用默认交互方式;(VTK提供了多种交互方式,最常用的包括joysticktrackball,并且可以分别对actor和camera进行操作。)

复制代码
	vtkSmartPointer<vtkInteractorStyleImage> style = 
		vtkSmartPointer<vtkInteractorStyleImage>::New();
	iren->SetInteractorStyle(style);

4.将对象iren初始化Initialize,调用Start开始进行交互;Start()方法表示开始进入事件响应循环,交互器处于等待状态,等待用户交互事件的发生。

一般在Start()前,先调用Initialize()方法:

复制代码
	iren->Initialize();//初始化
	iren->Start();//开始执行

正常需要将成员对象Enabled标志设置为1。如果没有初始化interactior,Start()将自动调用它,但是如果需要在初始化和事件循环开始之间执行任何操作,则可以手动调用它。

相关推荐
BUG收容所所长14 分钟前
栈的奇妙世界:从冰棒到算法的华丽转身
前端·javascript·算法
愚润求学15 分钟前
【C++】类型转换
开发语言·c++
XRZaaa19 分钟前
常见排序算法详解与C语言实现
c语言·算法·排序算法
@我漫长的孤独流浪23 分钟前
数据结构测试模拟题(4)
数据结构·c++·算法
智驱力人工智能26 分钟前
智慧零售管理中的客流统计与属性分析
人工智能·算法·边缘计算·零售·智慧零售·聚众识别·人员计数
csdnzzt41 分钟前
从内存角度透视现代C++关键特性
c++
jie188945758661 小时前
C++ 中的 const 知识点详解,c++和c语言区别
java·c语言·c++
明月*清风1 小时前
c++ —— 内存管理
开发语言·c++
WindSearcher2 小时前
大模型微调相关知识
后端·算法
取酒鱼食--【余九】2 小时前
rl_sar实现sim2real的整体思路
人工智能·笔记·算法·rl_sar