tvtk管线技术、数据集与数据加载
管线技术也称流水线技术(Pipeline)每个对象只实现相对简单的任务,
整个管线进行复杂的可视化处理
在tvtk中分为可视化管线和图形管线
可视化管线(Visualization Pipeline):将原始数据加工成图形数据的过程
图形管线(Graphics Pipeline):图形数据加工为所看到的图像
数据可视化分为五个模块:
数据模块,数据预处理模块,数据映射模块,绘制模块和显示模块。
前两部分为可视化管线
与可视化管线相关的两个对象:
tvtk.CubeSource数据对象和tvtk.PolyDataMapper图形对象
后三部分为图形管线
与图形管线相关的四个tvtk对象:
Actor实体对象,
Renderer渲染场景对象
RenderWindow渲染用的图形窗口对象
RenderWindowInteractor用户交互对象
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)
"""
运行之后左侧窗口出现空白,这个是一个小小的bug,后续将会修复它
这个bug如何产生的呢?
在vtk中引入了GUI模块。
在GUI开启的时候它的子窗口Dialogue其实是个子窗口空间,应存在于主窗口之中
因为这个bug的存在,使它脱离了这个窗口
"""
#修正错误
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()
为方便操作tvtk的管线并方便修改各个tvtk对象属性
使用ivtk库方便操作导入from tvtk.api import ivtk
以下是运行效果,支持鼠标拖拽改变角度和大小

修正之后


为使代码变得简洁,在此进行简单的封装
from tvtk.api import tvtk
'''可以把以下两个函数分别写到一个文件中
在开头from tvtkfunc import ivtk_scene,event_loop
使代码变得简洁
'''
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(数据集(Dataset)
数据集
点(point)
连接vs非连接
多个相关的点组成单元(Cell)
连接:显示vs隐式
数据(Data)
标量(Scalar)vs矢量(Vector)
可以属于点(Point)也可以属于单元(Cell)
TVTK库中提供的五种数据集
ImageData:表示二维或三维图像数据结构(可以理解成二维三维数组)
spacing参数:三维网络数据在X,Y,Z轴上的间距
origin参数:三维网络数据的起点坐标
dimensions参数:在X,Y,Z轴上的网格数
RectilinearGrid:间距不均匀的网格,所有点都在正交的网格上
StructuredGrid:
创建任意形状的网格,需要指定点的坐标和属性point,demensions等
点和单元的关系由点在网格中的位置所决定
PolyData:由一系列的点、点之间的联系以及由点构成的多边形组成
UnstructuredGrid
#构建ImageData数据集
from tvtk.api import tvtk
img=tvtk.ImageData(spacing=(1,1,1),origin=(1,2,3),dimensions=(3,4,5))
#img.get_point(0)获得网格中第一个点的坐标值
print("ImageData数据集:")
for n in range(6):#输出image对象的所有点
print("%.1f,%.1f,%.1f" % img.get_point(n))
#RectilinearGrid使用
#(因为不均匀,所以网格对象上的所有点表示对象交点)
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)
print("RectilinearGrid数据集:")
for n in range(6):
print(r.get_point(n))
运行效果:

tvtk提供了object,PLY和STL的文件读取类,分别是vtkOBJReader,
stl文件是在计算机图形应用系统中用于表示三角形网格的一种文件格式
这种格式应用简单广泛
TVTK模型(从外部)读取
s=tvtk.STLReader(file_name="stl文件名")
from tvtk.api import tvtk
from tvtkfunc import ivtk_scene,event_loop
#之前已经把函数ivtk_scene,event_loop封装到tvtkfunc.py中 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单词



'''tvtk读取Plot3D文件
使用MultiBlock数据读取
Plot3D文件分为:
网格文件(XYZ文件)
空气动力学文件(Q文件)
通用结果文件
'''
from tvtk.api import tvtk
def read_data():#读入数据
#MultiBolck调用形式
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)#为查看细节获取网格数据集
运行结果如下:


tvtk管线技术、数据集与数据加载的更多相关文章
- 科学计算三维可视化---TVTK入门(数据加载)
一:数据加载 大多数可视化应用的数据并非是在TVTK库中构建的,很多都是通过接口读取外部数据文件 (一)使用vtkSTLReader来读取外部文件 .stl 文件是在计算机图形应用系统中,用于表示三角 ...
- PyTorch 数据集类 和 数据加载类 的一些尝试
最近在学习PyTorch, 但是对里面的数据类和数据加载类比较迷糊,可能是封装的太好大部分情况下是不需要有什么自己的操作的,不过偶然遇到一些自己导入的数据时就会遇到一些问题,因此自己对此做了一些小实 ...
- python多种格式数据加载、处理与存储
多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...
- AE数据加载
1. 数据加载问题: 任何系统都离不开数据的加载,下边就AE中几种常用的数据加载做一个列举.以便查阅: 1.加载个人数据库 个人数据库是保存在Access中的数据库.其加载方式有两种:通过名字和通过属 ...
- Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...
- RE:通过移动端滑动手势实现数据加载
背景: 基于要尝试的移动端项目需要有一个通过上拉下滑手势达成加载不同数据的功能,其涉及到滑动手势和ajax数据加载方面的知识点.故对整个实现过程做一个记录整理.个人JS功底有限,看 ...
- 【微信小程序】模仿58同城页面制作以及动态数据加载
完成动态数据的加载,如下 使用上班的空余时间慢慢的学习,相信总有一天我会很熟悉的掌握这门技术. 本次学习小总结: 微信小程序使用的代码基本与HTML.CSS.JS等前段有关知识一样. 微信小程序js使 ...
- asp.net数据加载进度和模态窗口的完美打开,而且窗口不被阻止
采用jquery的技术打开模态窗口,效果肯定不错,但是微软的asp.net ajax就无法用了,例如updatepanel面板和updateprogress就看不到效果,也就是jquery与asp.n ...
- jqPlot图表插件学习之ajax-json数据加载
一.准备工作 首先我们需要到官网下载所需的文件: 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载 ...
随机推荐
- OpenCV实时美颜摄像并生成H264视频流
为什么美颜摄像这么简单的功能,OpenCV这个开源项目网上很少有代码呢?对于在windows平台下,生成h264视频流也比价麻烦,没有现成的api可以使用,需要借助MinGw编译libx264,或者f ...
- 用API给用户添加职责
DECLARE lc_user_name VARCHAR2(100) := 'PRAJ_TEST'; lc_resp_appl_short_name VARCHAR2(100) := 'FND' ...
- 05 Android强制设置横屏或竖屏/全屏
全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeature(Window.FEATURE_NO_TIT ...
- android打包方法超过65k错误
近日,Android Developers在Google+上宣布了新的Multidex支持库,为方法总数超过65K的Android应用提供了官方支持. 如果你是一名幸运的Android应用开发者,正在 ...
- 利用openssl管理证书及SSL编程第3部分:将MinGW编译的openssl dll导出def和lib供MSVC使用
将MinGW编译的openssl dll导出def和lib供MSVC使用 前面我们用mingw把openssl 编译成了动态库,得到下面2个dll文件: libeay32.dll ssleay32.d ...
- gitlab6 nginx配置和启动脚本
gitlab6 nginx配置和启动脚本 cheungmine 2013-10 最近把gitlab安装到了ubuntu12.04.3的虚拟机上了.参考: https://github.com/gitl ...
- 【Unity Shaders】Reflecting Your World —— 在Unity3D中创建Cubemaps
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- 分布式进阶(十五)ZMQ
我们为什么需要ZMQ 目前的应用程序很多都会包含跨网络的组件,无论是局域网还是因特网.这些程序的开发者都会用到某种消息通信机制.有些人会使用某种消息队列产品,而大多数人则会自己手工来做这些事,使用TC ...
- [Django] 单元测试小记
从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合理,单元测试写起来就麻烦的多呀.公司的项目一直都是用Dj ...
- MacBook 最近发现的一些问题和技巧
本猫的mba最近键盘莫名会失灵,但用鼠标切换其他用户时时好的,切换回来又不行,体现如下: 1.Spotlight里可以输入,其他不可以 2.cmd+tab可以切换进程 现在只有重启后才可以恢复. 网上 ...