TVTK

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对象共同协调完成:

  1. tvtk.CubeSource
  2. tvtk.PolyDataMapper
  3. tvtk.Actor
  4. tvtk.Renderer
  5. tvtk.RenderWindow
  6. tvtk.RenderWindowInteractor

ok,ok,ok,重点来了

在TVTK中,这种对象之间协调完成工作的过程被称作管线(Pipeline)


管线技术(Pipeline,流水线)

  1. 可视化管线(Visualization Pipeline):将原始数据加工成图形数据的过程。
  2. 图形管线(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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值