• 沒有找到結果。

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 中的下 标。