如何在pyvista中不按按键选择点

How to pick point with out key press in pyvista

我正在使用 pyvista 可视化 stl 文件。为了获取点信息,我使用下面的代码来实现这个

import pyvista as pv

p = pv.Plotter()

mesh = pv.read(filename)

p.add_mesh(mesh) 

def callback(x, y) :return

p.enable_point_picking(callback=callback) 

p.show()

我可以通过将光标保持在点上并按 'P' 键来选择点。

我想要这个功能,不需要通过点击鼠标来按键。可能吗?

我得到了这个动作的一个解决方案。由于 pyvista 是 vtk 的基础,我使用了 vtk 函数并且它工作正常。如果有人找到更好的解决方案,请post。

mouse=pv._vtk.vtkInteractorStyleTrackballCamera()
mouse.SetDefaultRenderer(plotter.ren_win.GetRenderers().GetFirstRenderer())
plotter.SetInteractorStyle(mouse)

def clicked(m,event):
    try:
        modifiers = QApplication.keyboardModifiers()
        if modifiers==QtCore.Qt.ControlModifier:pass
        else:
            clickPos = m.GetInteractor().GetEventPosition()
            picker = pv._vtk.vtkPointPicker()
            picker.Pick(clickPos[0], clickPos[1],0, m.GetDefaultRenderer())
            actor=picker.GetActor()
            if actor!=None:print(actor)
            m.OnLeftButtonDown()
    except Exception as e:print(e)
mouse.AddObserver("LeftButtonPressEvent", clicked)

谢谢。我根据您的建议编辑了我的代码。看起来好多了

def clicked(event):
    picker = pv._vtk.vtkPropPicker()
    picker.PickProp(event[0], event[1],plotter.ren_win.GetRenderers().GetFirstRenderer())
    actor=picker.GetActor()
    if actor!=None:print(actor)
plotter.track_click_position(callback=clicked,side='left', viewport=True)

您可以使用 pyvista Plotter 的 track_click_position 方法,并且仍然像上面那样使用您的回调函数。文档是 here.