Tutorial Step5:
教程描述:
这个例子将交互的概念引入了python环境(vtkrenderinteractor),即鼠标或键盘与渲染窗口中模型的交互。比如通过鼠标进行移动、旋转、缩放等操作。该示例定义了一种与默认样式(vtkInteractorStyle)不同的交互样式:vtkInteractorStyleTrackballCamera。默认风格中,按键j和t可以切换joystic(位置感应)和trackball(运动感应)风格,在joystic风格中只要鼠标按键就会发生连续的运动。在tracball风格中鼠标按键并挪动指针才会发生运动。按键c和a在相机模式和actor模式中切换,相机模式下鼠标事件会影响相机的位置和焦点,actor模式下鼠标事件影响位于鼠标指针下的actor。其余鼠标、键盘的响应在下方链接中可自行观看:VTK: vtkInteractorStyle Class Referencehttps://vtk.org/doc/nightly/html/classvtkInteractorStyle.html#detailsvtkInteractorStyleTrackballCamera的交互风格通过交互实现操纵场景中的相机、场景的视点。在trackball交互中,鼠标运动的幅度与鼠标绑定相关的camera运动成正比。例如,按住左键进行小幅度运动会导致相机在焦点周围的旋转发生细微的变化。对于三键鼠标,左键用于旋转,右键用于缩放,中键用于平移,ctrl+左键用于旋转,shift+右键用于快速旋转,shift+右键用于环境旋转(鼠标按键较少时,shift+左键用于平移)。还有很多交互风格可以在官网中进行了解。
step5链接如下:
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def main(argv):
colors = vtkNamedColors()
cone = vtkConeSource()
cone.SetHeight(3.0)
cone.SetRadius(1.0)
cone.SetResolution(10)
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
coneActor.GetProperty().SetColor(colors.GetColor3d('Bisque'))
ren1 = vtkRenderer()
ren1.AddActor(coneActor)
ren1.SetBackground(colors.GetColor3d('MidnightBlue'))
renWin = vtkRenderWindow()
renWin.AddRenderer(ren1)
renWin.SetSize(300, 300)
renWin.SetWindowName('Tutorial_Step5')
#
# vtkRenderWindowInteractor类在vtkRenderWindow中观察events(比如键盘按键或者鼠标)这些events被译成VTK可以理解的事件调用中。然后这些VTK events的observers可以适当地进行处理
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
#
# 默认地,vtkRenderWindowInteractor实例化一个vtkInteractorStyle实例。vtkInteractorStyle将它观察到的一组events转换成与vtkRenerWindowInteractor关联的vtkRenderWindow里相机、actors和/或属性上的操作。
# 这里我们特殊说明一个特殊的交互风格:vtkInteractorStyleTrackballCamera
style = vtkInteractorStyleTrackballCamera()
iren.SetInteractorStyle(style)
#
# 不像之前的脚本我们执行一些操作并退出,这里我们保留一个运行的事件循环。用户可以使用鼠标和键盘在屏幕中根据当前的交互风格执行操作。当用户按下e,默认情况下vtkRenderWindowInteractor会调用一个exitevent。该调用会被捕获并退出事件循环(循环由start()触发)。
#
iren.Initialize()
iren.Start()
#
# 最终注意:回顾observers可以观察特殊events并且采取合适的action。在渲染窗口中按下u会使vtkRenderWindowInteractor调用一个userevent。这个可以被捕获以弹出一个GUI等等。查看 Tcl Cone5.tcl 例子有关如何工作。
if __name__ == '__main__':
import sys
main(sys.argv)
效果: