You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:10:18