科学计算三维可视化---TVTK库可视化实例
2024-09-23 15:12:06
一: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 = , #设置标量数据数量
vector_function_number=, #设置矢量数据数量
) #读入Plot3D数据
plot3d.update() #让plot3D计算器输出数据
return plot3d plot3d = read_data()
grid = plot3d.output.get_block() #获取读入的数据集对象 con = tvtk.ContourFilter() #创建等值面对象
con.set_input_data(grid) #将网格与其绑定
con.generate_values(,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. win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()
set_value设置每个等值面的值
第一个参数是指定第几个等值面,第二个参数是设置该等值面的值
set_value(,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 = , #设置标量数据数量
vector_function_number=, #设置矢量数据数量
) #读入Plot3D数据
plot3d.update() #让plot3D计算器输出数据
return plot3d plot3d = read_data()
grid = plot3d.output.get_block() #获取读入的数据集对象 #对数据集中的数据进行随机选取,每50个点选择一个点,是对数据进行降采样
mask = tvtk.MaskPoints(random_mode=True,on_ratio=)
mask.set_input_data(grid) #将grid和mask相连
#创建表示箭头的PolyData数据集
glyph_source = tvtk.ArrowSource()
#在Mask采样后的PolyData数据集每个点上放置一个箭头
#箭头的方向(速度方向),长度<箭头越大,表示标量越大>和颜色<也表示标量大小,红色小,蓝色大>(两个都表示密度)由于点对应的矢量和标量数据决定
#将上面的降采样数据与箭头符号化相关联
glyph = tvtk.Glyph3D(input_connection=mask.output_port,
scale_factor=) #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. 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 =
(三)空间轮廓线可视化
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 = , #设置标量数据数量
vector_function_number=, #设置矢量数据数量
) #读入Plot3D数据
plot3d.update() #让plot3D计算器输出数据
return plot3d plot3d = read_data()
grid = plot3d.output.get_block() #获取读入的数据集对象 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()
思路扩展:
将空间轮廓可视化和标量数据可视化或者矢量数据可视化一起使用,形成更加完善的形状
最新文章
- PHP函数的实现原理及性能分析
- android MPAndroidChart饼图实现图例后加数字或文本(定制图例)
- Android 源码下载
- jquery更改Reaper某一列的值
- awr相关指标解析
- Python open()
- vue+vux+axios+vuex+vue-router的项目的理解
- MySql按每日、每周、每月分组统计数据
- 使用webpack配置vue项目代理 (超简单)
- C++跨平台集成websocketpp
- [luogu5003]跳舞的线【动态规划】
- 【17】有关python面向对象编程的提高【多继承、多态、类属性、动态添加与限制添加属性与方法、@property】
- sklearn11_函数汇总
- Android用户界面开发:Fragment
- Oracle11g_OCM 课堂教学目录表
- .NetCore生产环境下构建Consul(单个DC数据中心)的服务器健康检查
- CSS父元素高度随子元素高度变化而变化
- wordpress调用函数大全
- Android实现带图标的ListView
- 【luogu P3959 宝藏】 题解
热门文章
- 第一个spring冲刺团队贡献分(80分满分)
- ubuntu安装php-curl拓展
- 牛客网国庆集训派对Day4题目 2018年
- 14_Java面向对象_第14天(Eclipse高级、类与接口作为参数返回值)_讲义
- 05_Java基础语法_第5天(方法)_讲义
- 6/10 sprint2 看板和燃尽图的更新
- 第212天:15种CSS居中的方式,最全了
- 第211天:git和github的区别和使用详解
- 数据库事物 jdbc事物 spring事物 隔离级别:脏幻不可重复读
- C++ STL 常用遍历算法