首頁>技術>

關鍵字: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、結論

本文沒有有效圖片,讀者可以根據程式碼自行操作。

7
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 文字依然是HTML最主要的內容