在我的应用程序中,我构建了一个vtkAssembly对象,并且可以使用自定义的InteractorStyle与之交互,该对象可以扩展vtkInteractorStyleTrackballActor。我将交互器添加到渲染窗口并设置我的自定义样式。我可以旋转,缩放和移动对象,一切都按预期工作。
因为这是渲染窗口中的唯一对象,所以我希望允许用户从任何地方控制该对象。更具体地说:用户不必将鼠标精确地放在对象上即可旋转,缩放等。
我已经有了一个观察者,当用户单击渲染窗口时,它不仅会触发对象本身,而且还会触发对象的相应旋转吗?
这是我自定义的vtkInteractorStyle类:
class SynchronousInteractorStyle(vtk.vtkInteractorStyleTrackballActor):
button_active = False
def __init__(self, process, parent=None):
self.process = process
self.AddObserver("LeftButtonPressEvent", self.left_button_press_event)
self.AddObserver("LeftButtonReleaseEvent", self.left_button_release_event)
self.AddObserver("MiddleButtonPressEvent", self.middle_button_press_event)
self.AddObserver("MiddleButtonReleaseEvent", self.middle_button_release_event)
self.AddObserver("RightButtonPressEvent", self.right_button_press_event)
self.AddObserver("RightButtonReleaseEvent", self.right_button_release_event)
def left_button_press_event(self, obj, event):
print("I'm triggered!")
self.button_active = True
self.OnLeftButtonDown()
return
def left_button_release_event(self, obj, event):
self.button_active = False
self.OnLeftButtonUp()
return
def middle_button_press_event(self, obj, event):
self.button_active = True
self.OnMiddleButtonDown()
return
def middle_button_release_event(self, obj, event):
self.button_active = False
self.OnMiddleButtonUp()
return
def right_button_press_event(self, obj, event):
self.button_active = True
self.OnRightButtonDown()
return
def right_button_release_event(self, obj, event):
self.button_active = False
self.OnRightButtonUp()
return
谢谢。
更新: 我想我找到了一种实现自己想要实现的目标的可能方法。 可以重写OnLeftButtonDown(interactor)方法,但是我无法弄清楚为启动旋转必须调用哪些函数。
这是我重写尝试的一个示例,但是交互器提供了一个vtkInteractorStyleTrackballActor对象,调用StartRotation()并没有任何作用。
def OnLeftButtonDown(interactor):
print(interactor)
interactor.StartRotate()
return