VTK,Mayavi BUG:所有"ButtonReleaseEvents"都失败了,但所有&quo



我想用一个mayavi人物捕捉mouse release事件。具体来说,我需要单击一个对象,旋转它,然后在释放鼠标时接收输入。


尝试:

标准的mayavion_mouse_pick无法检测到这种行为(请参阅下面代码中的approach 1(。

但是,vtk(mayavi 构建在其上(确实具有特定的LeftButtonReleaseEvent()功能。这些知识可在以下位置找到: https://www.vtk.org/doc/nightly/html/classvtkRenderWindowInteractor.html

我在下面编写了一段代码,可以有效地使用此在线文档,并且可以从该列表中调用类似的函数:LeftButtonPressEvent()(请参阅下面的approach 2(。虽然LeftButtonPressEvent()有效,但不知何故LeftButtonReleaseEvent()不起作用(中键、右键单击也是如此(。

我已经绞尽脑汁好几天了——除了它是一个直接的错误之外,还有人明白这一点吗?任何人都可以在自己的计算机上进行测试以确保吗?

from __future__ import print_function
import numpy as np
from mayavi import mlab
from tvtk.api import tvtk
###################
### mayavi section:
fig1 = mlab.figure(1)
mlab.test_contour3d()
mlab.title('click me')
##############
# approach 1:
#def picker_callback(picker_obj):
#print('click recieved')   
#fig1.on_mouse_pick(picker_callback)
##############
# approach 2:
def press_callback(vtk_obj, event):
print('pressed')
def release_callback(vtk_obj, event):
print('released')
fig1.scene.interactor.add_observer('LeftButtonPressEvent', press_callback) #works
fig1.scene.interactor.add_observer('LeftButtonReleaseEvent', release_callback) #doesn't work
mlab.show()

非常感谢在评论中@FelipeLema这个很棒的答案!我将他的建议合并到之前编写的代码中,以模拟自然mouse release事件:

from __future__ import print_function
import numpy as np
from mayavi import mlab
from tvtk.api import tvtk
###################
### mayavi section:
fig1 = mlab.figure(1)
mlab.test_contour3d()
mlab.title('click me')
click_on = 0
def press_callback(vtk_obj, event):
global click_on
click_on = 1
print('pressed')
def release_callback(vtk_obj, event):
global click_on
if click_on == 1:
print('released')
click_on = 0
fig1.scene.interactor.add_observer('LeftButtonPressEvent', press_callback)
#fig1.scene.interactor.add_observer('LeftButtonReleaseEvent', release_callback) #doesn't work
fig1.scene.interactor.add_observer('EndInteractionEvent', release_callback) #solution!! (with above setup)
mlab.show()

相关内容

  • 没有找到相关文章

最新更新