BestMPRBaseVtk-012-vtk交互器vtkRenderWindowInteractor
Posted DreamLife.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BestMPRBaseVtk-012-vtk交互器vtkRenderWindowInteractor相关的知识,希望对你有一定的参考价值。
BestMPRBaseVtk vtk交互器vtkRenderWindowInteractor
今天想好好学习一下vtkRenderWindowInteractor
。vtkRenderWindowInteractor
是一个独立于平台的渲染窗口交互类,包括拾取和帧速率控制。
关键字:
交互器
、鼠标
、键盘
、控制
、vtk
1 vtk 交互器 vtkRenderWindowInteractor
以下内容来之谷歌翻译官方文档:
`vtkRenderWindowInteractor`为鼠标/按键/时间事件提供了独立于平台的交互机制。它用作平台相关实现的基类,这些实现处理将鼠标/按键/计时器消息路由到`vtkInteractorObserver`及其子类。`vtkRenderWindowInteractor`还提供用于拾取、渲染帧速率和前灯的控件。
vtkRenderWindowInteractor
与之前的实现有所不同,现在仅用作外壳来保存用户首选项并将消息路由到vtkInteractorStyle
。回调可用于许多事件。特定于平台的子类应提供操作计时器、TerminateApp
和事件循环的方法(如果需要)通过 Initialize/Start/Enable/Disable。
vtkRenderWindowInteractor
通过 VTK 的命令/观察者设计模式路由事件。也就是说,当vtkRenderWindowInteractor
(实际上是它的子类之一)看到一个平台相关事件时,它会使用InvokeEvent()
方法将其转换为 VTK 事件。然后任何为该事件注册的vtkInteractorObservers
都应该适当地响应。
vtkRenderWindowInteractor
的继承图如下图所示:
简单点说,就是vtkRenderWindowInteractor
能够捕捉渲染窗口中的鼠标事件和键盘事件,并将这些事件转变为对相机、Actor和属性对象的相应操作。
2 实际代码
这个代码要看我注释掉部分,哪里是交互器相关的。
void BPPMPRWidget::setRenderWindow(vtkGenericOpenGLRenderWindow *win)
if(this->RenderWindow == win) //判断当前窗口是不是传进来的,是就返回不是继续
return;
if(this->RenderWindowAdapter) // 这将释放所有与旧窗口相关的OpenGL资源
this->makeCurrent(); //为窗口绘制OpenGL内容做准备,将上下文设置为当前,并为该上下文绑定framebuffer
this->RenderWindowAdapter.reset(nullptr); //删除并重置指针
this->RenderWindow = win; //赋新值
if(this->RenderWindow)
this->RenderWindow->SetReadyForRendering(false);
// if(!this->RenderWindow->GetInteractor()) //如果没有提供交互器,我们默认将创建一个
//
// vtkNew<QVTKInteractor> iren; //创建一个默认交互器
// this->RenderWindow->SetInteractor(iren); //为RenderWindow添加交互器
// iren->Initialize(); //交互器初始化
// vtkNew<myVtkInteractorStyleImage> style; //设置交互器默认样式
// style->SetImageViewer(m_PipeLine);
// iren->SetInteractorStyle(style); //设置交互器
//
if(this->isValid())
this->makeCurrent(); //为窗口绘制OpenG内容做准备,将上下文设置为当前,并为该上下文绑定framebuffer paintGL会自动调用。
this->initializeGL(); //初始化Openg
this->updateSize(); //更新窗口尺寸
3 交互
剩下的交互就好整了,根据需求,重写下面的函数就可以实现自定义交互了,也可以不用他的交互,直接使用Qt的事件,把这些再实现一遍就可以了。
后面就可以根据业务需求自己重写这个类就可以了。
☞ 源码
源码链接:GitHub仓库自取
使用方法:☟☟☟
以上是关于BestMPRBaseVtk-012-vtk交互器vtkRenderWindowInteractor的主要内容,如果未能解决你的问题,请参考以下文章