關鍵字:VTK,滑鼠事件,互動
導讀:VTK預設的視覺化視窗,對攝像頭的行為會產生一些預設的例如旋轉,移動,放大縮小等的行為。這些行為在操作上不是很友好。
本文將講解如何重新設定滑鼠互動規則。
1、如何設定滑鼠互動
2、如何遮蔽VTK的預設滑鼠事件
3、附原始碼
1、vtkInteractorStyleTrackballCamera類
對於vtkInteractorStyle類繼承類,常用的有兩種,vtkInteractorStyleTrackballCamera和vtkInteractorStyleTrackballActor.第一個類是透過修改相機來改變觀察角度和物體大小。第二個類是透過改變actor來改變物體的位置和大小。
actor的修改,只能改變位置和大小,camera的視角變化更合適一些。因為,我只是視角不一樣。
預設的響應規則,使用起來很方便。有時候移出視窗之後,無法找到或者不方便找到。
針對這個問題,我們只需要繼承一下原始的類就可以達到這個目的。
2、繼承vtkInteractorStyleTrackballCamera類
程式碼如下:
class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera): def __init__(self, parent=None): super(MouseInteractorHighLightActor, self).__init__()
看起來似乎什麼都沒有做,但是實際上已經遮蔽了很多操作。
3、測試
整體程式碼:
class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera): def __init__(self, parent=None): super(MouseInteractorHighLightActor, self).__init__() # self.AddObserver("MouseMoveEvent", self.MouseMoveEvent) # self.AddObserver("MouseWheelForwardEvent", self.MouseWheelForwardEvent) # # self.AddObserver("MouseWheelBackwardEvent", self.MouseWheelBackwardEvent) # def MouseMoveEvent(self, obj, event): # pass # def MouseWheelBackwardEvent(self, obj, event): # pass # def MouseWheelForwardEvent(self, obj, event): # passsource = vtk.vtkCubeSource()# mappermapper = vtk.vtkPolyDataMapper()mapper.SetInputConnection(source.GetOutputPort())# actoractor = vtk.vtkActor()actor.SetMapper(mapper)# renderrender = vtk.vtkRenderer()render.AddActor(actor)# renderwindowrenderWindow = vtk.vtkRenderWindow()renderWindow.AddRenderer(render)# render window interactorrenderWindowInteractor = vtk.vtkRenderWindowInteractor()renderWindowInteractor.SetRenderWindow(renderWindow)style = MouseInteractorHighLightActor()style.SetDefaultRenderer(render)renderWindowInteractor.SetInteractorStyle(style)renderWindow.Render()renderWindowInteractor.Initialize()renderWindowInteractor.Start()
這樣顯示的效果就會很好。
圖片可能無法顯示這個效果的優劣。只有自己在程式裡顯示了。
class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera): def __init__(self, parent=None): super(MouseInteractorHighLightActor, self).__init__() # self.AddObserver("MouseMoveEvent", self.MouseMoveEvent) # self.AddObserver("MouseWheelForwardEvent", self.MouseWheelForwardEvent) # # self.AddObserver("MouseWheelBackwardEvent", self.MouseWheelBackwardEvent) # def MouseMoveEvent(self, obj, event): # pass # def MouseWheelBackwardEvent(self, obj, event): # pass # def MouseWheelForwardEvent(self, obj, event): # pass
這個類中如果把註釋的部分去掉,就遮蔽了滑鼠移動事件,滾動事件。這是我們遮蔽滑鼠事件的方法。
4、結論
本文沒有有效圖片,讀者可以根據程式碼自行操作。
最新評論