管线技术也称流水线技术(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管线技术、数据集与数据加载的更多相关文章

  1. 科学计算三维可视化---TVTK入门(数据加载)

    一:数据加载 大多数可视化应用的数据并非是在TVTK库中构建的,很多都是通过接口读取外部数据文件 (一)使用vtkSTLReader来读取外部文件 .stl 文件是在计算机图形应用系统中,用于表示三角 ...

  2. PyTorch 数据集类 和 数据加载类 的一些尝试

    最近在学习PyTorch,  但是对里面的数据类和数据加载类比较迷糊,可能是封装的太好大部分情况下是不需要有什么自己的操作的,不过偶然遇到一些自己导入的数据时就会遇到一些问题,因此自己对此做了一些小实 ...

  3. python多种格式数据加载、处理与存储

    多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...

  4. AE数据加载

    1. 数据加载问题: 任何系统都离不开数据的加载,下边就AE中几种常用的数据加载做一个列举.以便查阅: 1.加载个人数据库 个人数据库是保存在Access中的数据库.其加载方式有两种:通过名字和通过属 ...

  5. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

    Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...

  6. RE:通过移动端滑动手势实现数据加载

      背景:         基于要尝试的移动端项目需要有一个通过上拉下滑手势达成加载不同数据的功能,其涉及到滑动手势和ajax数据加载方面的知识点.故对整个实现过程做一个记录整理.个人JS功底有限,看 ...

  7. 【微信小程序】模仿58同城页面制作以及动态数据加载

    完成动态数据的加载,如下 使用上班的空余时间慢慢的学习,相信总有一天我会很熟悉的掌握这门技术. 本次学习小总结: 微信小程序使用的代码基本与HTML.CSS.JS等前段有关知识一样. 微信小程序js使 ...

  8. asp.net数据加载进度和模态窗口的完美打开,而且窗口不被阻止

    采用jquery的技术打开模态窗口,效果肯定不错,但是微软的asp.net ajax就无法用了,例如updatepanel面板和updateprogress就看不到效果,也就是jquery与asp.n ...

  9. jqPlot图表插件学习之ajax-json数据加载

    一.准备工作 首先我们需要到官网下载所需的文件: 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载 ...

随机推荐

  1. Dynamics CRM Import Solution Attribute Display Name description is null or empty

    在做解决方案导入的时候遇到错误,下载错误xml信息后查询报错如下:"Attribute Display Name description is null or empty",字面意 ...

  2. 应付模块的R12 TRACE 和 FND Debug 文件 / FND 日志 调试

     取得R12 TRACE: 1. 导航职责: 系统管理员> 配置文件> 系统> 查找 用户: 用户提交报表 配置: 初始化 SQL 语句 - 自定义 2. 点击用户栏位-编辑区域 ...

  3. 【Unity Shaders】法线纹理(Normal Mapping)的实现细节

    写在前面 写这篇的目的是为了总结我长期以来的混乱.虽然题目是"法线纹理的实现细节",但其实我想讲的是如何在shader中编程正确使用法线进行光照计算.这里面最让人头大的就是各种矩阵 ...

  4. C++对象模型的那些事儿之一:对象模型(上)

    前言 很早以前就听人推荐了<深入理解C++对象模型>这本书,从年初买来到现在也只是偶尔翻了翻,总觉得晦涩难懂,放在实验室上吃灰吃了好久.近期由于找工作对C++的知识做了一个全面系统的学习, ...

  5. Android必知必会--GreenDao缓存

    Github版 CSDN版 本篇文章不是介绍GreenDao的配置和基础使用,记录一下GreenDao缓存的问题,帮助遇到同样问题的朋友找到原因和方法,下面是示例: 场景重现 //第一次查询 List ...

  6. Java-IO之BufferedWriter(字符缓冲输出流)

    BufferedWriter是字符缓冲输出流,继承于Writer,作用是为其他字符输出流添加一些缓冲功能. BufferedWriter主要的函数列表: BufferedWriter(Writer o ...

  7. 1057. Stack (30) - 树状数组

    题目如下: Stack is one of the most fundamental data structures, which is based on the principle of Last ...

  8. 《java入门第一季》之TreeSet存储自定义对象并保证排序和唯一

    上一篇用一个简单的例子,介绍了treeset集合存储的内部过程,这里再完善其存储自定义对象保证唯一. 需求:A:  * 自然排序,按照年龄从小到大排序  *         B:  * 成员变量值都相 ...

  9. 用SpriteBuilder简化"耕牛遍地走"的动画效果(四)

    写到这突然有童鞋质疑,你这哪里是牛,分明是熊嘛! 仔细看了下,还真像牛.反正是这个意思.怪本猫猪牛熊不分,好在道理是一样的. 下面继续,言归正传. 添加一个空白的touchBegan方法,如果没有这个 ...

  10. Mybatis源码之Statement处理器CallableStatementHandler(六)

    CallableStatementHandler实际就是使用CallableStatement来执行SQL语句,当然它执行的是存储过程. 源码如下: /** * @author Clinton Beg ...