当前位置:   article > 正文

Python TVTK 标量数据可视化与矢量数据可视化,空间轮廓线可视化_python中tvtk库绘制structuredgrid数据图形

python中tvtk库绘制structuredgrid数据图形

Python数据可视化分为算法

标量可视化,矢量可视化,轮廓线可视化
  标量又称无向量,只有大小没有方向,运算遵循代数运算法则好比质量,密度,温度,体积,时间
  矢量又称向量,它是由大小,方向共同肯定的量,运算时遵循几何运算法则,如速度,加速度,力,磁场强度,电场强度等shell

#实例1标量数据可视化
'''
使用等值面对标量场进行可视化(体绘制[三维空间数据场]经常使用手段)
等值面:标量场中标量值相等的曲面,相似地图中的等高线
  tvtk.ContourFilter等值面过滤器,用来得到等值面,
  它是由vtkObject<--vtkAlogorithm<--vtkPolyDataAlgorithm继承获得的一个类
两个方法
  generate_values()设定n条等值线的值,通常用于从新绘制等值线
  set_value()设定一条等值线的值,通常用于覆盖某条等值线或者新增长一条等值线api

  1. from tvtk.api import tvtk
  2. from tvtkfunc import ivtk_scene,event_loop
  3. #读入plot3D数据
  4. plot3d=tvtk.MultiBlockPLOT3DReader(
  5. xyz_file_name="combxyz.bin",#网格文件
  6. q_file_name="combq.bin",#空气动力学结果文件
  7. scalar_function_number=100,#设置标量数据数量
  8. vector_function_number=200#设置矢量数据数量
  9. )
  10. plot3d.update()
  11. grid = plot3d.output.get_block(0)#获取读入的数据集
  12. con = tvtk.ContourFilter()#建立等值面对象
  13. con.set_input_data(grid)#将网格与其进行绑定
  14. #范围由数组Scalars.range决定,颜色也由scalars决定
  15. con.generate_values(10,grid.point_data.scalars.range)#建立10个等值面
  16. #默认映射表:最小值为红色,最大值为蓝色
  17. #对映射器进行构造
  18. m=tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range,input_connection=con.output_port)
  19. #对标量行为属性进行赋值,设置成新增长的数组的取值范围
  20. a=tvtk.Actor(mapper=m)
  21. #因为这十个等值面会相互嵌套,为观察等值面内部结构,修改Actor对象透明度为0.5
  22. a.property.opacity=0.5
  23. #绘制交互窗口
  24. win=ivtk_scene(a)
  25. win.scene.isometric_view()
  26. event_loop()

generate_values是建立等值面的函数,它能够同时设定n条等值线的值。
尝试更改generate_values之中的n值以后颜色改变。可使用set_value方法设置每一个等值面的值,它的第一个参数指定了第几个等值面,第二个参数指定了等值面的值。
运行效果是很漂亮的,经过设置不一样的透明度会出现不一样的效果。数组

矢量数据可视化
用箭头表示矢量数据场的数据,
  箭头的大小能够表示标量信息,
  箭头的方向能够表示矢量数据的方向
为了在矢量数据的网格处放置箭头符号,使用tvtk库提供的Glyph3D方法
能够产生放缩,着色和具备方向的符号
vtkObject<--vtkAlgorithm<--vtkPolyDataAlgorithm<--vtkGly3D
能够采用降维的方法下降数据密度
可使用tvtk.MaskPoints()对数据进行降采样
vtkObject<--vtkAlgorithm<--vtkPolyDataAlgorithm<--vtkMaskPointsapp

  1. from tvtk.api import tvtk
  2. from tvtkfunc import ivtk_scene,event_loop
  3. #读入plot3D数据
  4. plot3d=tvtk.MultiBlockPLOT3DReader(
  5. xyz_file_name="combxyz.bin",#网格文件
  6. q_file_name="combq.bin",#空气动力学结果文件
  7. scalar_function_number=100,#设置标量数据数量
  8. vector_function_number=200#设置矢量数据数量
  9. )
  10. plot3d.update()
  11. grid = plot3d.output.get_block(0)#获取读入的数据集(StructureGrid)
  12. #对数据集中的数据进行随机选取,每50个点选择一个点
  13. mask = tvtk.MaskPoints(random_mode = True,on_ratio = 50)#为数据进行了降采样
  14. #每50个点选择一个点,为数据进行了降采样。为了观察效果能够在shell中进行输出降采样的效果
  15. mask.set_input_data(grid)#将grid与musk相连
  16. #建立表示箭头的PolyData数据集
  17. glyph_source = tvtk.ArrowSource()#ArrowSource能够改为ConeSource()出来的箭头变成圆锥,scale_factor=2设置防缩系数
  18. #在Mask采样后的PolyData数据集每一个点上放置一个箭头
  19. #箭头的方向、长度和颜色因为点对应的矢量和标量数据决定
  20. #在本例中箭头的方向表示速度的方向,大小和颜色表示密度
  21. #箭头越大,该点标量值越大。箭头的颜色表表示标量值的大小
  22. #红色对应的标量值越小,蓝色对应的标量值越大
  23. glyph=tvtk.Glyph3D(input_connection=mask.output_port,scale_factor=4)#4表示符号的共同放缩系数
  24. #tvtk的可视化技术,它输入数据的每一个点都被拷贝一个符号。
  25. #符号自己是经过Glyph3D的filter的第二个输入函数来接收vtkPolyData的类型数据
  26. #而后经过ArrowSource在每一个点上放置一个箭头
  27. glyph.set_source_connection(glyph_source.output_port)
  28. m=tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range,input_connection=glyph.output_port)
  29. a=tvtk.Actor(mapper=m)
  30. #交互窗口绘制
  31. win=ivtk_scene(a)
  32. win.scene.isometric_view()
  33. event_loop()

运行效果以下,能够说是仿真版的西北风本风了哇咔咔咔dom

按照注释的方法换成圆锥是什么效果呢?函数

哈哈哈小圆锥萌萌哒~若是我再皮一下换成立方体呢?oop

居然莫名地好看。。spa

降采样技术是挺重要的,要不可能根本出不来scala

可使用tvtk.MaskPoints()对数据进行降采样。能够经过Shell查看降采样以前的数据个数和降采样以后的数据个数

相差仍是多的

空间轮廓线可视化
针对载入的流体数据计算其空间轮廓线并进行三维可视化
使用tvtk.StructuredGridOutlineFilter()来实现PoluData对象的外边框计算
该类也是继承自
vtkObject<--vtkAlgorithm<--vtkPolyDataAlgorithm<--vtkStructuredGridOutlineFilter

  1. from tvtk.api import tvtk
  2. from tvtk.common import configure_input
  3. from tvtkfunc import ivtk_scene,event_loop
  4. #读入plot3D数据
  5. plot3d=tvtk.MultiBlockPLOT3DReader(
  6. xyz_file_name="combxyz.bin",#网格文件
  7. q_file_name="combq.bin",#空气动力学结果文件
  8. scalar_function_number=100,#设置标量数据数量
  9. vector_function_number=200#设置矢量数据数量
  10. )
  11. plot3d.update()#让plot3D计算出其输出数据
  12. grid = plot3d.output.get_block(0)#获取读入的数据集(StructureGrid)
  13. outline = tvtk.StructuredGridOutlineFilter()#计算表示外边框(轮廓)的PolyData对象
  14. configure_input(outline,grid)#调用将外框计算与数据集产生关联
  15. #两个参数:一个是外框PolyData对象一个是流体数据grid
  16. m = tvtk.PolyDataMapper(input_connection=outline.output_port)
  17. a = tvtk.Actor(mapper=m)#建立一个Action实体Actor
  18. a.property.color= 0.3, 0.3, 0.3
  19. #窗口绘制
  20. win = ivtk_scene(a)

运行结果就是当前文件的轮廓线

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/996040
推荐阅读
相关标签
  

闽ICP备14008679号