[英]how to implement myself interactor style in vtk python
目前,我需要使用 pyqt 和 vtk 來啟動我們的項目。 我需要實現自己的交互風格。 我從 vtk.vtkInteractorStyleTrackballCamera 繼承了一個類。 我的代碼是:
import vtk, sys
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PyQt5.QtWidgets import *
class myInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self):
super(myInteractorStyle, self).__init__()
def OnLeftButtonDown(self):
super(myInteractorStyle, self).OnLeftButtonDown()
print('left button down')
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.frame = QFrame()
self.vl = QVBoxLayout()
self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
self.vl.addWidget(self.vtkWidget)
self.ren = vtk.vtkRenderer()
self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)
self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()
# style = vtk.vtkInteractorStyleTrackballCamera()
style = myInteractorStyle()
self.iren.SetInteractorStyle(style)
# Create source
source = vtk.vtkSphereSource()
source.SetCenter(0, 0, 0)
source.SetRadius(5.0)
# Create a mapper
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(source.GetOutputPort())
mapper.ScalarVisibilityOff()
# Create an actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(1, 1, 1)
actor.GetProperty().ShadingOff()
self.ren.AddActor(actor)
self.ren.ResetCamera()
self.frame.setLayout(self.vl)
self.setCentralWidget(self.frame)
self.show()
self.iren.Initialize()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())
當左鍵單擊時,我希望此代碼可以打印“左鍵按下”,但事實並非如此。 我的代碼有什么問題? 任何建議表示贊賞。
嘗試一下:
...
class myInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self, parent=None):
self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)
def leftButtonPressEvent(self, obj, event):
self.OnLeftButtonDown()
print('left button down')
...
更新:
如何獲得點擊點的坐標?
class myInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self, parent=None):
self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)
def leftButtonPressEvent(self, obj, event):
clickPos = self.GetInteractor().GetEventPosition() # <<<-----<
print(f'left button down: {clickPos}')
self.OnLeftButtonDown()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.