1

我正在使用 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”键来选择点。

我想要这个功能,而无需点击鼠标按键。可能吗?

4

2 回答 2

1

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

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)
于 2021-10-29T12:20:21.220 回答
1

您可以使用track_click_positionpyvista Plotter 的方法,并且仍然使用上述回调函数。文档在这里

于 2021-11-03T10:10:09.410 回答