如何在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.
我正在使用 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.