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提供了多种交互方式,最常用的包括joystick 和trackball,并且可以分别对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()将自动调用它,但是如果需要在初始化和事件循环开始之间执行任何操作,则可以手动调用它。

相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛3 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark3 天前
大规模并行计算中的负载均衡算法研究4
算法
吞下星星的少年·-·3 天前
C++ 萌新语法入门篇
c++·算法比赛
Because_of_Her13 天前
并查集-听课笔记
笔记·算法·并查集