科学计算三维可视化---TVTK库可视化实例

一:TVTK库可视化实例

Plot3D文件知识:PLOT3D 数据格式

PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件)。网格文件中可加入所谓的IBlank参数。

(一)标量数据可视化(等值面)

generate_values()创建等值面

from tvtk.api import tvtk
from Tvtkfunc import ivtk_scene,event_loop

def read_data():    #导入数据
    plot3d = tvtk.MultiBlockPLOT3DReader(
        xyz_file_name="comxyz.bin", #网格文件
        q_file_name="combq.bin", #开启动力学结果文件
        scalar_function_number = 100, #设置标量数据数量
        vector_function_number=200, #设置矢量数据数量
    )   #读入Plot3D数据
    plot3d.update() #让plot3D计算器输出数据
    return plot3d

plot3d = read_data()
grid = plot3d.output.get_block(0)   #获取读入的数据集对象

con = tvtk.ContourFilter()  #创建等值面对象
con.set_input_data(grid)    #将网格与其绑定
con.generate_values(10,grid.point_data.scalars.range) #指定轮廓数和数据范围 其中轮廓数越大,越丰富多彩  #映射颜色最小红色,最大蓝色

m = tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range, #设置映射器的变量范围属性
                        input_connection=con.output_port)
a = tvtk.Actor(mapper=m)
a.property.opacity = 0.5    #设置透明度为0.5

win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

set_value设置每个等值面的值

第一个参数是指定第几个等值面,第二个参数是设置该等值面的值
set_value(0,0.3)

(二)矢量数据可视化(有数值和方向)

箭头大小可以表示标量信息,箭头方向可以表示矢量的方向
为了能够在矢量数据网格中放置箭头符号,我们可以使用TVTK库中提供的Glyph3D符号化技术,可以产生放缩,着色,和具有方向的符号

在一般情况下,由于矢量数据过于密集,为了使得绘制速度更快,让箭头的密度适中,我们可以使用降维的方法,来降低数据的密度

from tvtk.api import tvtk
from Tvtkfunc import ivtk_scene,event_loop

def read_data():    #导入数据
    plot3d = tvtk.MultiBlockPLOT3DReader(
        xyz_file_name="comxyz.bin", #网格文件
        q_file_name="combq.bin", #开启动力学结果文件
        scalar_function_number = 100, #设置标量数据数量
        vector_function_number=200, #设置矢量数据数量
    )   #读入Plot3D数据
    plot3d.update() #让plot3D计算器输出数据
    return plot3d

plot3d = read_data()
grid = plot3d.output.get_block(0)   #获取读入的数据集对象

#对数据集中的数据进行随机选取,每50个点选择一个点,是对数据进行降采样
mask = tvtk.MaskPoints(random_mode=True,on_ratio=50)
mask.set_input_data(grid)   #将grid和mask相连
#创建表示箭头的PolyData数据集
glyph_source = tvtk.ArrowSource()
#在Mask采样后的PolyData数据集每个点上放置一个箭头
#箭头的方向(速度方向),长度<箭头越大,表示标量越大>和颜色<也表示标量大小,红色小,蓝色大>(两个都表示密度)由于点对应的矢量和标量数据决定
#将上面的降采样数据与箭头符号化相关联glyph = tvtk.Glyph3D(input_connection=mask.output_port,
                     scale_factor=4)    #scale_factor符号的共同放缩系数
glyph.set_source_connection(glyph_source.output_port)

m = tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range, #设置映射器的变量范围属性
                        input_connection=glyph.output_port)
a = tvtk.Actor(mapper=m)
a.property.opacity = 0.5    #设置透明度为0.5

win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

总结矢量化数据可视化的三个方法

(1)Glyph3D是TVTK的符号化技术

降采样的数据会被传入作为他的数据源,他输入数据的每个点,都会拷贝一个符号,符号本身是通过ArrowSource创建,由set_source_connection关联ployData和箭头

(2)MaskPoints降采样,可输出降采样前后点的数目查看效果

降采样前

降采样后

(3)ArrowSource方法修改

创建了表示箭头的PolyData数据集
glyph_source = tvtk.ArrowSource()  
glyph_source = tvtk.ConeSource()
设置防缩系数:scale_factor = 2

(三)空间轮廓线可视化

from tvtk.api import tvtk
from tvtk.common import configure_input
from Tvtkfunc import ivtk_scene,event_loop

def read_data():    #导入数据
    plot3d = tvtk.MultiBlockPLOT3DReader(
        xyz_file_name="comxyz.bin", #网格文件
        q_file_name="combq.bin", #开启动力学结果文件
        scalar_function_number = 100, #设置标量数据数量
        vector_function_number=200, #设置矢量数据数量
    )   #读入Plot3D数据
    plot3d.update() #让plot3D计算器输出数据
    return plot3d

plot3d = read_data()
grid = plot3d.output.get_block(0)   #获取读入的数据集对象

outline = tvtk.StructuredGridOutlineFilter()    #计算表示外边框的PolyData对象
configure_input(outline,grid)   #调用tvtk.common.configure_input(),将外框计算与数据集产生关联

m = tvtk.PolyDataMapper(input_connection=outline.output_port)
a = tvtk.Actor(mapper=m)
a.property.color = 0.3,0.3,0.3  #float色彩空间0-1.0

win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

思路扩展:

将空间轮廓可视化和标量数据可视化或者矢量数据可视化一起使用,形成更加完善的形状

原文地址:https://www.cnblogs.com/ssyfj/p/9302024.html

时间: 2024-10-07 01:08:02

科学计算三维可视化---TVTK库可视化实例的相关文章

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

一:数据加载 大多数可视化应用的数据并非是在TVTK库中构建的,很多都是通过接口读取外部数据文件 (一)使用vtkSTLReader来读取外部文件 .stl 文件是在计算机图形应用系统中,用于表示三角形网格的一种文件格式.格式简单,应用广泛 def ivtk_scene(actors): from tvtk.tools import ivtk # 创建一个带有Crust(Python Shell)的窗口 win = ivtk.IVTKWithCrustAndBrowser() win.open(

科学计算三维可视化---Mayavi入门(Mayavi库的基本元素和绘图实例)

一:Mayavi库的基本元素 1.处理图形可视化和图形操作的mlab模块 2.操作管线对象,窗口对象的api (一)mlab模块 (二)mayavi的api 二:快速绘图实例 (一)mlab.mesh的使用,快速创建绘图 >>> x = [[-1,1,1,-1,-1],[-1,1,1,-1,-1]] >>> y = [[-1,-1,-1,-1,-1],[1,1,1,1,1]] >>> z = [[1,1,-1,-1,1],[1,1,-1,-1,1]]

科学计算三维可视化---Mayavi可视化实例

一:Dragon绘制实例(三维扫描的绘制) 三维扫描主要用于对物体空间外形结构以及色彩进行扫描,用以获得物体表面的空间坐标, 他的主要意义在于能够将实物的立体信息转换为计算机能够直接处理的数据信号,为实物的数字化提供了相对方便快捷的手段, 因此,三维扫描为工业建模,文物保存,虚拟空间构建都起到了非常重要的作用. 下载地址:http://graphics.stanford.edu/data/3Dscanrep/,页面搜索Dragon即可 提取文件 import tarfile,os #读取tar压

科学计算三维可视化---TraitsUI与Mayavi实例

TraitsUI与Mayavi实例 一:创建一个简单的TraitsUI与Mayavi实例 from numpy import sqrt,sin,mgrid from traits.api import HasTraits,Instance from traitsui.api import View,Item from tvtk.pyface.scene_editor import SceneEditor from mayavi.tools.mlab_scene_model import Mlab

科学计算三维可视化---Traits(Property属性)

Property属性 使用Property函数为类创建Property属性,Property属性用法和一般属性相同,但是他在获取值和赋值时会调用相应的方法 traits库也提供了Property属性 from traits.api import Property from traits.api import Property,HasTraits,Float,cached_property class rectangle(HasTraits): w = Float(1.0) h = Float(2

科学计算三维可视化---TraitsUI(View定义界面)

View定义界面 使用View来自定义界面 class ModelManager(HasTraits): model_name = Str category = Str model_file = Str model_number = Int view = View( Item("model_name", label=u"模型名称"), #将Traits属性和Item关联起来,分别定义标签,中文需要使用u Item("model_file", la

科学计算三维可视化---TraitsUI(控件)

一:文本编辑器 from traits.api import HasTraits,Int,Str,Password from traitsui.api import View,Item,Group,ModalButtons #View描述了界面的视图类,Item模块描述了界面中的控件类 class TextEdit(HasTraits): #定义文本编辑器的变量 string_trait = Str("sample string") password = Password #定义布局

python科学计算与可视化视频教程

目录: 下载链接:https://www.yinxiangit.com/616.html 第一单元TVTK入门-1.mp4第一单元TVTK入门-2.mp4第一单元TVTK入门-3.mp4 第一单元TVTK入门-4.mp4第七单元Mayavi可视化实例-1.mp4第七单元Mayavi可视化实例-2.mp4第七单元Mayavi可视化实例-3.mp4第三单元TVTK库可视化实例-1.mp4第三单元TVTK库可视化实例-2.mp4第三单元TVTK库可视化实例-3.mp4第九单元Traits基础-1.mp

Python科学计算(一)环境简介——Anaconda Python

Anaconda是一个和Canopy类似的科学计算环境,但用起来更加方便.自带的包管理器conda也很强大.下载地址为:http://www.continuum.io/downloads(访问不稳定,可能需要FQ.PS:(可以注册个nydus VPNFQ免费使用7天:http://www.nydus.com.cn)或者下载lantern.Anaconda提供了Python2.7和Python3.4两个主要版本,同时如果需要其他版本,还可以通过conda来创建. 安装完成后可以看到,Anacond