VTK 学习
最简单的和数据交互的方法是创建该类的对象实例,该类提供了一些预定义的事件和行
为,该类允许我们控制相机和 Actors,并且提供了操纵杆模式和跟踪球模式两种交互类型。
该类对绘制窗口的如下事件作出响应:
压下键盘 j/t 键,在操纵杆和跟踪球交互类型间切换。
压下键盘 c/a 键, 在相机和 Actors 模式间切换。
压下鼠标左键,在相机模式下,围绕相机焦点旋转,在 Actors 模式下,围绕 Actors
的原点旋转。
压下鼠标中键,在相机模式下,扫视相机,在 Actors 模式下,平移 Actors,对于 2 键
鼠标,使用 shift+鼠标左键。
压下鼠标右键,在相机模式下,推拉相机,在 Actors 模式下,缩放 Actors。
压下键盘 3 键,进入立体模式。
压下键盘 e 键,退出程序。
压下键盘 p 键,进行拾取。
压下键盘 r 键,沿着当前的视方向重新设置相机。
压下键盘 u 键,调用用户设定的方法。
压下键盘 s/w 键,Actors 的显示方式在线框/表面模式间切换。
缺省的交互类型是跟踪球模式,在这种模式下,只要鼠标键按下,就可以对相机、Actors、
Renders 进行持续的操作。
import vtk
# cone_a = vtk.vtkConeSource()
cone_a = vtk.vtkSphereSource()
coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInputConnection(cone_a.GetOutputPort())
coneActor = vtk.vtkActor()
coneActor.SetMapper(coneMapper)
ren1 = vtk.vtkRenderer()
ren1.AddActor(coneActor)
#设置背景颜色
ren1.SetBackground(0.1, 0.2, 0.4)
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
renWin.SetSize(300, 300)
renWin.Render()
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
iren.Initialize()
iren.Start()
这里23行的代码 我感觉使用的vtk 自己带的数据 vtk.vtkSphereSource() 但是这些模型都不知道位置
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonTransforms import vtkTransform
from vtkmodules.vtkFiltersSources import vtkLineSource
from vtkmodules.vtkRenderingAnnotation import vtkAxesActor
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def main():
# Create two points, P0 and P1
p0 = [0.0, 0.0, 0.0]
p1 = [1, 1, 1]
lineSource = vtkLineSource()
lineSource.SetPoint1(p0)
lineSource.SetPoint2(p1)
# Visualize
colors = vtkNamedColors()
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(lineSource.GetOutputPort())
actor = vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetLineWidth(1)
actor.GetProperty().SetColor(colors.GetColor3d("Blue"))
# 加入坐标系
transform1 = vtkTransform()
transform1.Translate(0, 0, 0)
axes1 = vtkAxesActor()
axes1.SetUserTransform(transform1)
transform2 = vtkTransform()
transform2.Translate(1, 1, 1)
axes2 = vtkAxesActor()
axes2.SetUserTransform(transform2)
renderer = vtkRenderer()
renderer.AddActor(axes1)
renderer.AddActor(axes2)
renderWindow = vtkRenderWindow()
renderWindow.SetWindowName("Line")
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderer.SetBackground(colors.GetColor3d("Silver"))
renderer.AddActor(actor)
renderer.GetActiveCamera()
renderer.GetActiveCamera().Azimuth(150)
renderer.GetActiveCamera().Elevation(60)
renderer.ResetCamera()
renderWindow.Render()
renderWindowInteractor.Start()
if __name__ == '__main__':
main()
发现不会移动不了这个坐标的姿态不然写不出相对姿态 打印坐标位置