赞
踩
pyvista是对vtk的封装,使用更简单。下面是一个简单的测试,显示三维随机场数据,从文件读取三维矩阵数据,三维网格显示,以及三个方向的切片显示。
- import numpy as np
- import pyvista as pv
- from argon2 import __main__
-
-
-
- def createRegularMesh(values, origin, cellSize):
- # 首先类似于新建一个空的矩阵
- grid = pv.UniformGrid()
-
- # 然后设置维度,如果想给cell填充数据则维度设置为 矩阵shape + 1,
- # 如果是给point填充数据指定为矩阵shape
- # 填充cell,颜色就不是渐变的,是每个块一个颜色,正好和ct的数据一样。
- grid.dimensions = np.array(values.shape) + 1
-
- # 设置origin和spacing,这两个参数正好和ct的参数一个意思。
- grid.origin = origin # The bottom left corner of the data set
- grid.spacing = cellSize # These are the cell sizes along each axis
-
- # 设置(网格)矩阵的值
- grid.cell_arrays["values"] = values.flatten(order="F") # Flatten the array!
-
- return grid
-
- def showRegularGrid3D(values, origin, cellSize):
- gridMesh = createRegularMesh(values, origin, cellSize)
- # plot
- gridMesh.plot(show_edges=False)
-
- def showRegularSlice3D(values, origin, cellSize, slicex, slicey, slicez):
- #指定三维数据场,顶点坐标,网格尺寸,以及三个方向切片的坐标
- gridMesh = createRegularMesh(values, origin, cellSize)
- #指定x y z三个方向的坐标
- slices = gridMesh.slice_orthogonal(x=slicex, y=slicey, z=slicez)
- slices.plot()
-
- def readArray3D(ni, nj, nk, fileName, headInfoNum):
- #读取三维矩阵数据
- #矩阵数据按行排列,从外向内,分别为k循环,j循环,和i循环。
- dat=np.loadtxt(fileName, skiprows = headInfoNum)
- print(dat.shape)
- #设置矩阵维数
- values = np.reshape(dat, (nk,nj,ni)).transpose(2,1,0)
- return values
-
- def test1():
- _values = np.random.rand(10,10,5)
- print(_values.shape)
- _origin=(0,0,0)
- _cellSize=(1,1,1)
- showRegularGrid3D(_values,_origin, _cellSize)
-
- def test2():
- _fileName = R"./../../../CASE2/readTIArray_temp.ecl"
- _ni = 100
- _nj = 100
- _nk = 20
- _headInfoNum=1
- _origin=(0,0,0)
- _cellSize=(10,10,5)
- _values = readArray3D(_ni, _nj, _nk, _fileName, _headInfoNum)
- print(_values.shape)
- showRegularGrid3D(_values,_origin, _cellSize)
-
- def test3():
- _fileName = R"./../../../CASE2/readTIArray_temp.ecl"
- _ni = 100
- _nj = 100
- _nk = 20
- _headInfoNum=1
- _origin=(0,0,0)
- _cellSize=(10,10,5)
- _values = readArray3D(_ni, _nj, _nk, _fileName, _headInfoNum)
- print(_values.shape)
- _slicex=_ni*_cellSize[0]
- _slicey=1*_cellSize[1]
- _slicez=_nk*_cellSize[2]
- showRegularSlice3D(_values,_origin, _cellSize, _slicex, _slicey, _slicez)
-
- if __name__== "__main__":
- #test1()
- #test2()
- test3()
产生随机数三维矩阵,test1()
读取三维矩阵数据并显示,test2(),其中矩阵数据按行排列,从外向内,分别为k循环,j循环,和i循环。
切片显示方式
参考资料
https://blog.csdn.net/u012925804/article/details/105292081
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。