首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PyVista中从绘图仪坐标转换到世界坐标

在PyVista中从绘图仪坐标转换到世界坐标
EN

Stack Overflow用户
提问于 2022-11-23 15:35:01
回答 1查看 23关注 0票数 1

我是PyVista和vtk的新手。我正在实现一个网格编辑工具(Python=3.10,pyvista=0.37,vtk=9.1 ),当用户单击鼠标光标世界坐标的给定半径内的所有点时(例如,表面的投影点)应该被选中。我通过使用pyvista绘图器track_click_position方法对鼠标单击进行回调来实现这一点。

我的问题是,我还希望用户能够在单击之前预览所选内容(突出显示将要选择的顶点)。为此,必须跟踪鼠标在世界坐标中的位置,并将回调函数附加到鼠标的移动中,这将突出显示相关节点。

pyvista绘图仪的'track_mouse_position‘方法不支持附加回调,但我想出了一个解决办法。在下面的最小示例中,我成功地跟踪了鼠标光标位置在绘图仪坐标系中以像素为单位的更改。关于如何将这些转换成世界坐标,我现在陷入了困境。当鼠标悬停在球体上时,这些“世界坐标”应该是球体上的投影位置。当鼠标悬停在球体之外时,它应该不会返回任何东西,或者返回inf或者其他无用的值。

代码语言:javascript
复制
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()

非常感谢你的帮助。哈里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-23 16:10:34

我想出来了。它们的关键是在调用‘track_鼠标位置’之后使用'pick_mouse_position‘。

代码语言:javascript
复制
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()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74549375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档