渲染后VTKActor不可见,但在相机上可见 - > resetview()

时间:2013-08-07 07:45:09

标签: c++ qt vtk qvtkwidget

我正在开发一个qt-vtk项目。我们有一个画线功能。在两个鼠标单击位置之间创建直线。但是一旦创建了actor,它就不可见了。在添加actor之后我正在调用render函数。但它没有用。但是,如果我做相机 - > resetview()线变得可见,但整个视角都会改变。我在哪里做错了?

感谢 Rwik

2 个答案:

答案 0 :(得分:1)

这可能与你无关,但我有同样的问题(在ActiViz [托管的VTK]中)并与它争吵了一个星期,所以我希望这可以帮助那里的人。事实证明,我们想要在画布上绘制线条的位置存在问题;它们离相机太远(在Z轴上)是可见的。

对于我们来说,我们试图在用户点击的任何地方绘制一个十字架。数据点就在那里,演员和诸如此类的东西一样,但是如果你调用resetCamera()并且因此改变了摄像机的配置,它们只会在场景中可见。 最初,我责怪我们必须添加的自定义交互器,以阻止默认交互器吞下MouseUp事件(预期行为)。调查显示这似乎不太可能。

在此之后,我把责任转移到相机上,怀疑可能是重置电话正在调用某种我不知道的更新方法。我调用了resetCamera(),然后将相机值恢复为最初的值。 当成功完成时,它会在摄像机缩小时出现十字架,然后一旦它被放回就会再次消失,此时我意识到这与场景有关。

此时,我检查了我们用于检索3D中鼠标位置的方法,并意识到z值非常大,并且将点作为VTK转换方法的副产品放置得太远了控件上的2D位置到场景中的3D位置,反之亦然。

毕竟,这是一个非常普通且可以避免的错误,它源于方法renderer.DisplayToWorld()和WorldToDisplay()。 这可能不是每个人都有的问题,但我希望我能让一个人在VTK上摆弄一周。

答案 1 :(得分:0)

我觉得有点难以帮助,没有看到代码,但你尝试过使用

ui->qvtkwidget->update();

,其中ui是从QMainWindow派生的类的实例?