当前位置:   article > 正文

基于pyvista的三维矩阵数据显示_pyvista显示切片

pyvista显示切片

pyvista是对vtk的封装,使用更简单。下面是一个简单的测试,显示三维随机场数据,从文件读取三维矩阵数据,三维网格显示,以及三个方向的切片显示。

  1. import numpy as np
  2. import pyvista as pv
  3. from argon2 import __main__
  4. def createRegularMesh(values, origin, cellSize):
  5. # 首先类似于新建一个空的矩阵
  6. grid = pv.UniformGrid()
  7. # 然后设置维度,如果想给cell填充数据则维度设置为 矩阵shape + 1,
  8. # 如果是给point填充数据指定为矩阵shape
  9. # 填充cell,颜色就不是渐变的,是每个块一个颜色,正好和ct的数据一样。
  10. grid.dimensions = np.array(values.shape) + 1
  11. # 设置origin和spacing,这两个参数正好和ct的参数一个意思。
  12. grid.origin = origin # The bottom left corner of the data set
  13. grid.spacing = cellSize # These are the cell sizes along each axis
  14. # 设置(网格)矩阵的值
  15. grid.cell_arrays["values"] = values.flatten(order="F") # Flatten the array!
  16. return grid
  17. def showRegularGrid3D(values, origin, cellSize):
  18. gridMesh = createRegularMesh(values, origin, cellSize)
  19. # plot
  20. gridMesh.plot(show_edges=False)
  21. def showRegularSlice3D(values, origin, cellSize, slicex, slicey, slicez):
  22. #指定三维数据场,顶点坐标,网格尺寸,以及三个方向切片的坐标
  23. gridMesh = createRegularMesh(values, origin, cellSize)
  24. #指定x y z三个方向的坐标
  25. slices = gridMesh.slice_orthogonal(x=slicex, y=slicey, z=slicez)
  26. slices.plot()
  27. def readArray3D(ni, nj, nk, fileName, headInfoNum):
  28. #读取三维矩阵数据
  29. #矩阵数据按行排列,从外向内,分别为k循环,j循环,和i循环。
  30. dat=np.loadtxt(fileName, skiprows = headInfoNum)
  31. print(dat.shape)
  32. #设置矩阵维数
  33. values = np.reshape(dat, (nk,nj,ni)).transpose(2,1,0)
  34. return values
  35. def test1():
  36. _values = np.random.rand(10,10,5)
  37. print(_values.shape)
  38. _origin=(0,0,0)
  39. _cellSize=(1,1,1)
  40. showRegularGrid3D(_values,_origin, _cellSize)
  41. def test2():
  42. _fileName = R"./../../../CASE2/readTIArray_temp.ecl"
  43. _ni = 100
  44. _nj = 100
  45. _nk = 20
  46. _headInfoNum=1
  47. _origin=(0,0,0)
  48. _cellSize=(10,10,5)
  49. _values = readArray3D(_ni, _nj, _nk, _fileName, _headInfoNum)
  50. print(_values.shape)
  51. showRegularGrid3D(_values,_origin, _cellSize)
  52. def test3():
  53. _fileName = R"./../../../CASE2/readTIArray_temp.ecl"
  54. _ni = 100
  55. _nj = 100
  56. _nk = 20
  57. _headInfoNum=1
  58. _origin=(0,0,0)
  59. _cellSize=(10,10,5)
  60. _values = readArray3D(_ni, _nj, _nk, _fileName, _headInfoNum)
  61. print(_values.shape)
  62. _slicex=_ni*_cellSize[0]
  63. _slicey=1*_cellSize[1]
  64. _slicez=_nk*_cellSize[2]
  65. showRegularSlice3D(_values,_origin, _cellSize, _slicex, _slicey, _slicez)
  66. if __name__== "__main__":
  67. #test1()
  68. #test2()
  69. test3()

产生随机数三维矩阵,test1()

 

读取三维矩阵数据并显示,test2(),其中矩阵数据按行排列,从外向内,分别为k循环,j循环,和i循环。

切片显示方式

参考资料

https://blog.csdn.net/u012925804/article/details/105292081

 

 

 

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

闽ICP备14008679号