T V T K TVTK TVTK
TVTK是在VTK基础上用traits进行了封装
TVTK库官方文档
http://www.vtk.org/doc/nightly/html/annotated.html
安装
pip install vtk -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --user
pip install mayavi -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --user
pip install pyqt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --user
安装成功测试
from tvtk.tools import tvtk_doc
tvtk_doc.main()
from tvtk.api import tvtk
s = tvtk.CubeSource(x_length=1.0,y_length=2.0,z_length=3.0)
print(s)
CubeSource对象的属性
CubeSource对象的方法
Tvtk库的基本三维对象
可视化一个长方体
# 显示长方体的实例
# 1.导入库
from tvtk.api import tvtk
# 2.创建一个长方体数据源,并且同时设置长宽高
s = tvtk.CubeSource(x_length=1.0,y_length=2.0,z_length=3.0)
# 3.使用PolyDataMapper将数据转换为图形数据
m = tvtk.PolyDataMapper(input_connection = s.output_port)
# 4.创建一个Actor
a = tvtk.Actor(mapper=m)
# 5.创建一个Renderer,将Actor添加进去
r = tvtk.Renderer(background=(0,0,0))
r.add_actor(a)
# 6.创建一个RenderWindow(窗口),将Renderer添加进去
w = tvtk.RenderWindow(size=(300,300))
w.add_renderer(r)
# 7.创建一个RenderWindowInteractor(窗口的交互工具)
i = tvtk.RenderWindowInteractor(render_window = w)
# 8.开启交互
i.initialize()
i.start()
显示一个长方体
原始数据转换为屏幕上图像,需要以下的TVTK对象共同协调完成:
- tvtk.CubeSource
- tvtk.PolyDataMapper
- tvtk.Actor
- tvtk.Renderer
- tvtk.RenderWindow
- tvtk.RenderWindowInteractor
ok,ok,ok,重点来了
在TVTK中,这种对象之间协调完成工作的过程被称作管线(Pipeline)
。
管线技术(Pipeline,流水线)
- 可视化管线(Visualization Pipeline):将原始数据加工成图形数据的过程。
- 图形管线(Graphics Pipeline) :图形数据加工为我们所看到的图像的过程。(
将三维图形数据在二维平面进行展示
)
# 创建一个长方体数据源,并且同时设置长宽高
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)
使用ivtk显示立方体的程序
# 使用ivtk显示立方体的程序
from tvtk.api import tvtk
from tvtk.tools import ivtk
from pyface.api import GUI
s = tvtk.CubeSource(x_length=1.0,y_length=2.0,z_length=3.0)
m = tvtk.PolyDataMapper(input_connection = s.output_port)
a = tvtk.Actor(mapper = m)
# 创建一个带Crust的窗口
gui = GUI()
win = ivtk.IVTKWithCrustAndBrowser()
win.open()
win.scene.add_actor(a)
# 开始界面消息循环
gui.start_event_loop()
def event_loop():
from pyface.api import GUI
gui = GUI()
gui.start_event_loop()
照相机
照相机属性
实体
场景编辑器
TVTK的数据集
- 点(Point)和数据(Data)
- 点之间:连接vs非连接
- 多个相关的点组成单元(Cell)
- 点的连接:显式vs隐式
- 数据:标量(Scalar) vs矢量(Vector)
1.数据集-Imagedata
ImageData表示二维或三维图像的数据结构。
参数
from tvtk.api import tvtk
img = tvtk.ImageData(spacing=(1,1,1),origin=(1,2,3),dimensions=(3,4,5))
print(img.get_point(0))
for n in range(6):
print( "%.1f,%.1f,%.1f"% img.get_point(n))
数据集-RectilinearGrid
RectilinearGrid:间距不均匀的网格,所有点都在正交的网格上。
from tvtk.api import tvtk
import numpy as np
x = np.array([0,3,9,15])
y = np.array([0,1,5])
z = np.array([0,2,3])
r = tvtk.RectilinearGrid()
r.x_coordinates = x
r.y_coordinates = y
r.z_coordinates = z
r.dimensions = len(x),len(y),len(z)
数据集-StructuredGrid
StructuredGrid:创建任意形状的网格,需要指定点的坐标。
数据集-Polydata
PolyData:由一系列的点、点之间的联系以及由点构成的多边形组成。
TVTK模型读取
from tvtk.api import tvtk
from tvtkfunc import ivtk_scene,event_loop
s = tvtk.STLReader(file_name = "python.stl")
m = tvtk.PolyDataMapper(input_connection = s.output_port)
a = tvtk.Actor(mapper = m)
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()
TVTK MultiBlock数据读取Plot3D
- 网格(XYZ文件)
- 空气动力学结果(Q文件)
- 通用结果
from tvtk.api import tvtk
def read_data():# 读入数据
plot3d = tvtk.MultiBlockPLOT3DReader(
xyz_file_name="combxyz.bin",#网格文件
q_file_name="combq.bin",#空气动力学结果文件
scalar_function_number=100,#设置标量数据数量
vector_function_number=200#设置矢量数据数量
)
plot3d.update()
return plot3d
plot3d = read_data()
grid = plot3d.output.get_block(0)