TVTK-三维可视化数据
9.1 TVTK使用简介
9.1.1 显示圆锥
作为第一例子,让我们来看一个显示圆锥的小程序:
1 # coding: utf-8
-*-2 from enthought.tvtk.api import tvtk
3
4 # 创建一个圆锥数据源,并且同时设置其高度,底面半径和底面圆的分辨率(用36边形近似)
5 cs = tvtk.ConeSource(height=3.0, radius=1.0, resolution=36)
6 # 使用PolyDataMapper将数据转换为图形数据
7 m = tvtk.PolyDataMapper(input = cs.output)
8 # 创建一个Actor
117
9 a = tvtk.Actor(mapper=m)
10 # 创建一个Renderer,将Actor添加进去
11 ren = tvtk.Renderer(background=(0.1, 0.2, 0.4))
12 ren.add_actor(a)
13 # 创建一个RenderWindow(窗口),将Renderer添加进去
14 rw = tvtk.RenderWindow(size=(300,300))
15 rw.add_renderer(ren)
16 # 创建一个RenderWindowInteractor(窗口的交互工具)
17 rwi = tvtk.RenderWindowInteractor(render_window=rw)
18 # 开启交互
19 rwi.initialize()
20 rwi.start()
此程序的运行画面如下:
图 9.1 -使用TVTK绘制简单的圆锥
首先从tvtk.api中载入tvtk,tvtk像是一个工厂,能够帮助我们创建vtk中的各种对象:
>>> from enthought.tvtk.api import tvtk
下面创建了一个ConeSource(圆锥数据源)对象,并用变量cs保存它。原始的VTK对象的属性,在 tvtk中都以trait属性的形式进行包装,因此我们可以在创建对象的同时,传递关键字参数直接配置各个 trait属性的值,在这个例子中,同时设置了圆锥的高度,底面半径和底面圆的分辨率(用36边形近似)等 属性,最后调用print_traits显示所创建的圆锥数据的所有trait属性,为了节省篇幅,这里只挑选了其 中的几个属性:
1 >>> cs = tvtk.ConeSource(height=3.0, radius=1.0, resolution=36)
2 >>> cs.print_traits()
3 ...
4 angle: 18.43494882292201
5 ...
118 第 9 章 TVTK-三维可视化数据
用Python做科学计算
6 center: array([ 0., 0., 0.])
7 class_name: 'vtkConeSource'
8 ...
9 direction: array([ 1., 0., 0.])
10 ...
11 height: 3.0
12 ...
13 radius: 1.0
14 ...
15 resolution: 36
16 ...
• 可视化流水线(Visualization Pipeline):它的工作是将原始数据加工成图形数据。通常我们需要 可视化的数据本身并不是图形数据,例如某个零件内部各个部分的温度,或者是流体在各个坐标 点上的速度等等。
• 图形流水线(Graphics Pipeline):它的工作是将将图形数据加工为我们所看到的图像。可视化流 水线所产生的图形数据通常是三维空间的数据,如何在二维的屏幕上显示出来就需要图形流水线
• Renderer : 表示润色的场景。它包括多个需要润色的Actor。在圆锥的例子中,它只包括一个表 示圆锥的Actor。
• RenderWindow : 表示润色用的图形窗口,它包括一个或者多个Render。在圆锥的例子中,它 只包括一个Renderer。
• RenderWindowInteractor : 给图形窗口提供一些用户交互功能,例如平移、旋转、放大缩小。
这些交互式操作并不改变Actor或者图形数据的属性,只是调整场景中的照相机(Camera)的一些
9.1. TVTK使用简介 119
设置而已。
什么是PolyData
PolyData是一个描述一组三维空间中的点、线、面的数据结构。点、线、面通过以下几个属性描 述:
• points : 类型为Points,保存三维空间中的点的坐标的数组,这些数据不是用来显示的。
• verts : 类型为CellArray,它描述需要显示的顶点,其值为 points 某个坐标点的下标,即通 过 verts 属性描述 points 中的哪些点是最终需要显示的。
• line : 类型为CellArray,它描述需要显示的边线,其值为边线的两个端点在 points 中的下 标。
• polys : 类型为CellArray,它描述需要显示的面,其值为构成面的各个点在 points 中的下 标。