采用重写vtkInteractorStyle拾取到了vtk窗口中的点云坐标,将这个坐标存储到了一个变量中,想将其传递给主函数进行进一步处理。目前尝试过用signal信号机制进行通信,以及直接将vtkInteractorStyle实例化,打点调用其中的变量,但均失败
def area_fra_show(self):
style = MyInteractor(self.vtk_widget.iren, self.vtk_widget.ren)
style.SetDefaultRenderer(self.vtk_widget.ren)
self.vtk_widget.iren.SetInteractorStyle(style)
data = style.data #每次都显示为空
class MyInteractor(vtk.vtkInteractorStyleTrackballCamera):
parameter_Signal = pyqtSignal(list)
def __init__(self, iren, ren):
self.iren = iren
self.ren = ren
self.pick_Actor = []
self.data = []
def run(self):
self.AddObserver("RightButtonPressEvent", self.RightButtonPressEvent)
self.AddObserver("MiddleButtonPressEvent", self.quit_pick) #按键盘任意键停止
def quit_pick(self, obj, event):
for i in self.pick_Actor:
self.ren.RemoveActor(i)
self.iren.RemoveObservers('RightButtonPressEvent') #终止选择
def RightButtonPressEvent(self, obj, event):
clickPos = self.iren.GetEventPosition()
cellPicker = vtk.vtkPointPicker()
self.iren.SetPicker(cellPicker)
picker = self.iren.GetPicker()
picker.Pick(clickPos[0], clickPos[1], 0, self.ren)
point_position = picker.GetPickPosition()
print(point_position)
self.data.append(point_position)