我是PyVista和vtk的新手。我正在实现一个网格编辑工具(Python=3.10,pyvista=0.37,vtk=9.1 ),当用户单击鼠标光标世界坐标的给定半径内的所有点时(例如,表面的投影点)应该被选中。我通过使用pyvista绘图器track_click_position方法对鼠标单击进行回调来实现这一点。
我的问题是,我还希望用户能够在单击之前预览所选内容(突出显示将要选择的顶点)。为此,必须跟踪鼠标在世界坐标中的位置,并将回调函数附加到鼠标的移动中,这将突出显示相关节点。
pyvista绘图仪的'track_mouse_position‘方法不支持附加回调,但我想出了一个解决办法。在下面的最小示例中,我成功地跟踪了鼠标光标位置在绘图仪坐标系中以像素为单位的更改。关于如何将这些转换成世界坐标,我现在陷入了困境。当鼠标悬停在球体上时,这些“世界坐标”应该是球体上的投影位置。当鼠标悬停在球体之外时,它应该不会返回任何东西,或者返回inf或者其他无用的值。
import pyvista as pv
def myCallback(src,evt):
C = src.GetEventPosition() # appears to be in pixels of the viewer
print(C)
# how to convert C into world coordinates on the sphere
sp = pv.Sphere()
p = pv.Plotter()
p.add_mesh(sp)
p.iren.add_observer("MouseMoveEvent",myCallback)
p.show()非常感谢你的帮助。哈里
发布于 2022-11-23 16:10:34
我想出来了。它们的关键是在调用‘track_鼠标位置’之后使用'pick_mouse_position‘。
import pyvista as pv
def myCallback(src,evt):
out = p.pick_mouse_position()
print(out)
sp = pv.Sphere()
p = pv.Plotter()
p.add_mesh(sp)
p.track_mouse_position()
p.iren.add_observer("MouseMoveEvent",myCallback)
p.show()
https://stackoverflow.com/questions/74549375
复制相似问题