PyVista中绘图器坐标转世界坐标:实现鼠标悬停选点预览
PyVista鼠标Hover球体时获取世界坐标方案
针对你开发网格编辑工具时遇到的鼠标移动时获取球体世界坐标的需求,以下是两种可行的实现方式:
方法一:使用PyVista内置pick方法
适合快速实现,无需直接操作VTK底层API:
import pyvista as pv def myCallback(src, evt): x, y = src.GetEventPosition() # 执行拾取,show=False关闭默认拾取标记 picked_obj = p.pick(x, y, show=False) if picked_obj: world_coord = picked_obj.GetPosition() print(f"Hover到球体的世界坐标: {world_coord}") else: print("未Hover到球体") sp = pv.Sphere() p = pv.Plotter() p.add_mesh(sp) p.iren.add_observer("MouseMoveEvent", myCallback) p.show()
方法二:使用VTK PointPicker精确拾取顶点
如果需要直接获取顶点ID,用于后续预览选中顶点,推荐这种方式:
import pyvista as pv import vtk def myCallback(src, evt): x, y = src.GetEventPosition() # 创建点拾取器,优先拾取网格顶点 picker = vtk.vtkPointPicker() # 针对当前渲染器执行拾取操作 picker.Pick(x, y, 0, p.renderer) if picker.GetActor(): world_coord = picker.GetPickPosition() point_id = picker.GetPointId() print(f"Hover到顶点ID: {point_id},世界坐标: {world_coord}") else: print("未Hover到球体") sp = pv.Sphere() p = pv.Plotter() p.add_mesh(sp) p.iren.add_observer("MouseMoveEvent", myCallback) p.show()
关键说明
- 两种方式都会在鼠标未Hover到球体时返回无效状态(方法一返回
None,方法二GetActor()返回None) - 方法二的
vtkPointPicker可以直接拿到顶点ID,方便你实现后续的顶点预览高亮逻辑
内容的提问来源于stack exchange,提问作者Harry Matthews
相关产品推荐
相关产品推荐

