热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

tvtk管线技术、数据集与数据加载

管线技术也称流水线技术(Pipeline)每个对象只实现相对简单的任务,整个管线进行复杂的可视化处理在tvtk中分为可视化管线和图形管线可视化管线(VisualizationPipeline):将

管线技术也称流水线技术(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)#为查看细节获取网格数据集

运行结果如下:

 


推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 题目描述:牛客网新员工Fish每天早上都会拿着一本英文杂志,在本子上写下一些句子。他的同事Cat对这些句子非常感兴趣,但发现这些句子的单词顺序被反转了。例如,“student. a am I”实际上是“I am a student.”。Cat请求你帮助他恢复这些句子的正常顺序。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
author-avatar
手机用户2502897855
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有