VTK Python PyQt 监听键盘 控制 Actor 移动 变色

KeyPressInteractorStyle

在vtk 中有时我们需要监听 键盘或鼠标做一些事;

1. 创建 Actor;

Sphere = vtk.vtkSphereSource()
Sphere.SetRadius(10)

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(Sphere.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(0.0, 1.0, 0.0)

2.创建 vtkRenderer vtkRenderWindow vtkRenderWindowInteractor

ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

3.重写交互器 Style

class KeyPressInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):

    def __init__(self, parent=None):
        self.parent = vtk.vtkRenderWindowInteractor()
        if (parent is not None):
            self.parent = parent

        self.AddObserver("KeyReleaseEvent", self.keyRelease)

    def keyRelease(self, obj, event):
        key = self.parent.GetKeySym()
        if key == 'Up':
           pt =  actor.GetPosition()
           actor.SetPosition(pt[0],pt[1]+5,pt[2])
        elif key == 'Down':
           pt =  actor.GetPosition()
           actor.SetPosition(pt[0],pt[1]-5,pt[2])
        if key == 'Left':
           pt =  actor.GetPosition()
           actor.SetPosition(pt[0]-5,pt[1],pt[2])
        elif key == 'Right':
           pt =  actor.GetPosition()
           actor.SetPosition(pt[0]+5,pt[1],pt[2])

        elif key== 'c':
            # 产生随机颜色
            r = vtk.vtkMath.Random()
            g = vtk.vtkMath.Random()
            b = vtk.vtkMath.Random()
            actor.GetProperty().SetColor(r, g, b)
        renWin.Render()
复制代码
 4.添加交互器:
iren.SetInteractorStyle(KeyPressInteractorStyle(parent=iren))

ren.AddActor(actor)
相关推荐
goomind2 天前
深度学习实战电路板缺陷检测【数据集+YOLOv5模型+源码+PyQt5界面】
人工智能·python·深度学习·yolo·计算机视觉·pyqt
天下无敌笨笨熊6 天前
PyQT开发总结
python·pyqt
胖墩会武术7 天前
PyQt5新手教程(五万字)
python·pyqt·界面开发
Trouvaille ~12 天前
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
python·qt·数据分析·pandas·pyqt·数据可视化·布局管理器
ziyu_jia12 天前
Python教程(二十) : 十分钟入门【PyQt6】
python·pyqt·pyqt6
sky0Lan13 天前
pyqt fromlayout 布局中间空隙问
pyqt
阳子92614 天前
PyQt6 / PySide 6 实现可拖拽的多标签页 web 浏览器【1】(有 Bug)
python·pyqt
ChiKuo_Z15 天前
快速构建一个ui界面程序--pyqt入门
python·ui·pyqt
阳子92616 天前
记录 PyQt6 / PySide 6 自定义边框窗口的 Bug 及可能可行的解决方案:窗口抖动和添加 DWM 环绕阴影的大致原理
windows·python·bug·pyqt
时尚IT男21 天前
PyQt 迁移到 PySide
pyqt