Python科学计算三维可视化(1) ——TVTK库入门

最近在中国大学MOOC网上学习python科学计算三维可视化相关知识,记录下来,以供参考。

科学可视化基础

科学计算的可视化方法

  1. 二维标量数据场
    1.1 颜色映射方法
    1.2 等值线方法
    1.3 立体图法和层次分割法
  2. 三维标量数据场
    2.1 面绘制方法(surface rendering)
    2.2 体绘制方法(volume rendering)
  3. 矢量数据场
    3.1 直接法
    3.2流线法(stream line)

TVTK库的安装

VTK-7.1.1-cp36-cp36m-win_amd64.whl
numpy-1.12.1+mkl-cp36-cp36m-win_amd64.whl
traits-4.6.0-cp36-cp36m-win_amd64.whl
mayavi-4.5.0+vtk71-cp36-cp36m-win_amd64.whl
PyQt4-4.11.4-cp36-cp36m-win_amd64.whl

TVTK库的安装小测

>>> from tvtk.api import tvtk
>>> s = tvtk.CubeSource(x_length = 1.0,y_length = 2.0,z_length = 3.0)
>>> print(s)    
vtkCubeSource (0000020A22196F60)
  Debug: Off
  Modified Time: 96
  Reference Count: 2
  Registered Events: 
    Registered Observers:
      vtkObserver (0000020A25B90240)
        Event: 33
        EventName: ModifiedEvent
        Command: 0000020A258E4CD0
        Priority: 0
        Tag: 1
  Executive: 0000020A25BA0170
  ErrorCode: No error
  Information: 0000020A25C6E570
  AbortExecute: Off
  Progress: 0
  Progress Text: (None)
  X Length: 1
  Y Length: 2
  Z Length: 3
  Center: (0, 0, 0)
  Output Points Precision: 0

创建一个基本三维对象

s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)

CubeSource对象的属性

属性说明
s.x_length长方体对象在X轴方向的长度
s.y_length长方体对象在y轴方向的长度
s.z_length长方体对象在z轴方向的长度
s.center长方体对象所在坐标系的原点
s. output_points_precision长方体对象的精度

CubeSource对象的方法

VTK方法Tvtk说明
Set/GetXLength()x_length设置/获取长方体对象在X轴方向的长度
Set/GetYLength()y_length设置/获取长方体对象在Y轴方向的长度
Set/GetZLength()z_length设置/获取长方体对象在Z轴方向的长度
Set/GetCenter()center设置/获取长方体对象所在坐标系的原点

Tvtk库的基本三维对象

三维对象说明
CubeSource立方体三维对象数据源
ConeSource圆锥三维对象数据源
CylinderSource圆柱三维对象数据源
ArcSource圆弧三维对象数据源
ArrowSource箭头三维对象数据源

创建一个圆锥数据源

>>> s = tvtk.ConeSource(height = 3.0,radius = 1.0,resolution = 36)    #高度、底面圆半径。底面圆分辨率
>>> s.height
3.0
>>> s.radius
1.0
>>> s.resolution
36
>>> s.center
array([ 0.,  0.,  0.])
>>> print(s)
vtkConeSource (0000020A25B7FE10)
  Debug: Off
  Modified Time: 133
  Reference Count: 2
  Registered Events: 
    Registered Observers:
      vtkObserver (0000020A25B91260)
        Event: 33
        EventName: ModifiedEvent
        Command: 0000020A258E4490
        Priority: 0
        Tag: 1
  Executive: 0000020A25BA0F80
  ErrorCode: No error
  Information: 0000020A25C6F240
  AbortExecute: Off
  Progress: 0
  Progress Text: (None)
  Resolution: 36
  Height: 3
  Radius: 1
  Capping: On
  Center: (0, 0, 0)
  Direction: (1, 0, 0)
  Output Points Precision: 0

TVTK库显示一个三维对象

from tvtk.api import tvtk

# 创建一个长方体数据源,并且同时设置其长宽高
s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)
# 使用PolyDataMapper将数据转换为图形数据
m = tvtk.PolyDataMapper(input_connection=s.output_port)
# 创建一个Actor
a = tvtk.Actor(mapper=m)
# 创建一个Renderer,将Actor添加进去
r = tvtk.Renderer(background=(0, 0, 0))
r.add_actor(a)
# 创建一个RenderWindow(窗口),将Renderer添加进去
w = tvtk.RenderWindow(size=(300,300))
w.add_renderer(r)
# 创建一个RenderWindowInteractor(窗口的交互工具)
i = tvtk.RenderWindowInteractor(render_window=w)
# 开启交互
i.initialize()
i.start()

原始数据转换为屏幕上图像,TVTK对象共同协调完成:
tvtk.CubeSource
tvtk.PolyDataMapper
tvtk.Actor
tvtk.Renderer
tvtk.RenderWindow
tvtk.RenderWindowInteractor
在TVTK中,这种对象之间协调完成工作的过程被称作管线(Pipeline)。

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值