TVTK管线与数据加载

TVTk的管线

管线技术(Pipeline,流水线)

可视化管线(Visualization Pipeline):将原始数据加工成图形数据的过程。

TVTK对象 说明
CubeSource 通过程序内部计算输出一组描述长方体的数据(PolyData)
PolyDataMapper PolyData通过该映射器将数据映射为图形数据(mapper)

图形管线(Graphics Pipeline):图形数据加工为我们所看到的图像的过程。

TVTK对象 说明
Actor 场景中的一个实体。它包括一个图形数据(mapper),具有描述该实体的位置、方向、大小的属性。
Renderer 渲染的场景。它包括多个需要渲染的Actor。
RenderWindow 渲染用的图形窗口,它包括一个或者多个Render。
RenderWindowInteractor 给图形窗口提供一些用户交互功能,例如平移、旋转、放大缩小。这些交互式操作并不改变Actor或者图形数据的属性,只是调整场景中的照相机(Camera)的一些设置。

用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(Python Shell)的窗口
gui = GUI()
win = ivtk.IVTKWithCrustAndBrowser()
win.open()
win.scene.add_actor(a)
     
#窗口左侧栏,可将下面四行代码去掉查看变化,你发现你会加上这四行代码的。
dialog = win.control.centralWidget().widget(0).widget(0)
from pyface.qt import QtCore
dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000))
dialog.show()
 
gui.start_event_loop()

代码优化结构,将之封装成函数:

from tvtk.api import tvtk
 
def ivtk_scene(actors):
    from tvtk.tools import ivtk
    #创建一个带Crust(Python Shell)的窗口
    win = ivtk.IVTKWithCrustAndBrowser()
    win.open()
    win.scene.add_actor(actors)
    #窗口左侧栏,可将下面四行代码去掉查看变化,你发现你会加上这四行代码的。
    dialog = win.control.centralWidget().widget(0).widget(0)
    from pyface.qt import QtCore
    dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000))
    dialog.show()
    return win
 
def event_loop():
    from pyface.api import GUI
    gui = GUI()
    gui.start_event_loop()
 
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)
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

由于这两个函数可复用性和使用频率较高,可将这两个函数保存在tvtkfunc.py文件中,以后使用的话就用:

from tvtkfunc import ivtk_scene, event_loop

可以在上述界面调整照相机、实体Actor、光源、场景,下面是照相机的属性:

属性 说明
clipping_plane 它有两个元素,分别表示照相机到近、远两个裁剪平面的距离。在这两个平面范围之外将不会显示
position 照相机在三维空间中的坐标
focal_point 照相机所聚焦的焦点坐标
view_up 照相机的上方向矢量

数据集

数据集(Dataset)。

  • 点(Point)和数据(Data)
  • 点之间:连接vs非连接
  • 多个相关的点组成单元(Cell)
  • 点的连接:显式vs隐式
  • 数据:标量(Scalar)vs矢量(Vector)

数据集-Imagedata

ImageData表示二维或三维图像的数据结构。

from tvtk.api import tvtk
img = tvtk.ImageData(spacing=(1, 1, 1), origin=(1, 2, 3), dimension=(3, 4, 5))
参数 说明
origin 三维网格数据的起点坐标
spacing 三维网格数据在X、Y、Z轴上的间距
dimensions 为在X、Y、Z轴上的网格数

数据集-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:创建任意形状的网格,需要指定点的坐标。

points、dimensions、point_data.scalars等属性进行初始化

数据集-Polydata
PolyData:由一系列的点、点之间的联系以及由点构成的多边形组成。

TVTK数据加载

TVTK模型读取

s = tvtk.STLReader(file_name = 'stl文件名')

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()

python.stl文件百度云链接

运行效果截图:

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)

combxyz.bin和combq.bin文件百度云链接

Reference :
中国大学MOOC北京理工大学Python科学计算三维可视化黄天羽、嵩天老师课件
课程主页

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容