管线技术也称流水线技术(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. 关于AndroidSDK配置时的tools目录下找不到adb.exe的错误

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在配置android SDK的时候,有时会发现在android-sdk-windows\tools目录下并没有adb.exe,这 ...

  2. 剑指Offer——栈的java实现和栈的应用举例

    剑指Offer--栈的java实现和栈的应用举例 栈是一种先进后出的数据结构, 栈的实现如下: 首先定义了栈需要实现的接口: public interface MyStack<T> { / ...

  3. 保证service存活

    Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStart ...

  4. javascript之event对象

    注意:以下给出的是在IE下的event事件说明,如果应用在非IE下可能会出现兼容性问题,需要结合具体的应用环境,使用兼容性的函数来处理 1.altKey 描述: 检查alt键的状态. 语法: even ...

  5. Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴

    对于在Linux下开发的同学来说,Shell可以说是一种基本功. 对于运维的同学来说,Shell可以说是一种必备的技能,而且应该要非常熟练的书写Shell.对于Release Team,软件配置管理的 ...

  6. ffmbc——为广播电视以及专业用途量身定制的FFmpeg

    无意中发现了个为广播电视以及专业用途量身定制的FFmpeg.也是开源的,记录之. ffmbc 全称是 FFMedia Broadcast,是个改版的FFmpeg,有如下功能: 创建可以导入Final ...

  7. Leetcode_9_Palindrome Number

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41598031 Palindrome Number Dete ...

  8. (三十四)NavigationController初步

    为了了解底层,首先不基于UIWindow而基于UIWindow来创建App. 由于Xcode6没有以前的基于UIWindow的空项目,所以选择SingleView,然后删除storyboard,移除B ...

  9. libevent之Reactor模式

    通过前边的一篇博文轻量级网络库libevent初探,我们知道libevent实际上是封装了不同操作系统下的/dev/poll.kqueue.event ports.select.poll和epoll事 ...

  10. WebService开发指南

    WebServiceInAurora Web Service Web Service是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作.在Aurora框架 ...