如果将vtk显示3D数据,比作是一场演唱会,那么
vtkActor = 歌手,舞台上的独立单位
vtkPolyDataMapper = 歌手正在唱的歌
vtkRenderer = 花里胡哨的舞台
vtkRenderWindow = 建造舞台的地方
vtkRenderWindowInteractor = 歌迷在线点歌
歌手唱的具体什么歌词,哼哼的是什么调,需要根据Source来决定。
以上这些缺一不可
#!/usr/bin/env python
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
# 常用颜色模块
from vtkmodules.vtkCommonColor import vtkNamedColors
# 空间变换模块
from vtkmodules.vtkCommonTransforms import vtkTransform
# 添加球体数据源
from vtkmodules.vtkFiltersSources import vtkSphereSource
# 坐标轴
from vtkmodules.vtkRenderingAnnotation import vtkAxesActor
from vtkmodules.vtkRenderingCore import (
vtkActor, #演员
vtkPolyDataMapper, #数据映射器
vtkRenderWindow, #渲染窗口
vtkRenderWindowInteractor, #渲染窗口的交互器
vtkRenderer #渲染器
)
def main():
#创建常用颜色
colors = vtkNamedColors()
# 创建一个球体,球心位于0,0,0的位置,半径0.5
sphereSource = vtkSphereSource()
sphereSource.SetCenter(0.0, 0.0, 0.0)
sphereSource.SetRadius(0.5)
# 创建数据映射器,连接到球体
sphereMapper = vtkPolyDataMapper()
sphereMapper.SetInputConnection(sphereSource.GetOutputPort())
# 创建演员,可以理解为表演者
sphereActor = vtkActor()
sphereActor.SetMapper(sphereMapper)
# 创建渲染器和渲染窗口
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.SetWindowName('Axes')
renderWindow.AddRenderer(renderer)
# 创建交互器
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
# 将球添加到渲染器中
renderer.AddActor(sphereActor)
renderer.SetBackground(colors.GetColor3d('SlateGray'))
# 创建一个变换器,可以移动Actor
transform = vtkTransform()
transform.Translate(1.0, 0.0, 0.0)
# 创建坐标轴
axes = vtkAxesActor()
# 使用上面的变换器,重新定位坐标轴位置
axes.SetUserTransform(transform)
# 坐标轴标签的属性可以如下设置,这将x轴标签设置为红色
#axes.GetXAxisCaptionActor2D().GetCaptionTextProperty()
# .SetColor(colors.GetColor3d('Red'));
# the actual text of the axis label can be changed:
# axes->SetXAxisLabelText('test');
renderer.AddActor(axes)
#设置相机的视角和高度
renderer.GetActiveCamera().Azimuth(50)
renderer.GetActiveCamera().Elevation(-30)
renderer.ResetCamera()
# 窗口起个名字
renderWindow.SetWindowName('Axes')
# 渲染窗口
renderWindow.Render()
# 开始鼠标交互
renderWindowInteractor.Start()
if __name__ == '__main__':
main()
?
|