mesh的构造
- cell的数量:mesh.n_cells
- points的数量:mesh.n_points
- mesh的中心:mesh.center
- mesh的点:mesh.points
- mesh中包含的矩阵:mesh.point_arrays
- 查看mesh的信息:print mesh
- 访问mesh中矩阵的值:通过字典的方式访问
- 访问point的值:mesh.point_arrays['new_points']
- 访问cell的值:mesh.cell_arrays['new_points']
- 给mesh赋值:
- 给point赋值:mesh.point_arrays['new_points'] = np.zeros(mesh.n_points)
- 给cell赋值:mesh.cell_arrays['new_points'] = np.zeros(mesh.n_cells)
- 如果是结构化的矩阵,获得mesh的值的维度:mesh.dimensions
画mesh
有两种方法画mesh
第一种
直接画。
import pyvista as pv
from pyvista import examples
mesh = examples.load_airplane()
mesh.plot(screenshot='airplane.png')
第二种
指定更多参数的画:
先通过pv.Plotter()
新建一个渲染窗口,然后通过add_mesh
增加mesh。
plotter = pv.Plotter() # instantiate the plotter
plotter.add_mesh(mesh) # add a mesh to the scene
cpos = plotter.show() # show the rendering window
请注意,该show方法将返回渲染窗口上次使用的相机位置,以备您选择相机位置并在以后再次使用时使用。
然后,您可以使用此缓存的摄像机进行其他打印,而不必与打印窗口手动交互:
plotter = pv.Plotter(off_screen=True)
plotter.add_mesh(mesh, color='tan')
plotter.camera_position = cpos
plotter.show(screenshot='airplane.png') ## 保存成图片
可交互的窗口
- pyvista.Plotter:标准绘图仪,它将代码暂停直到关闭
- pyvista.BackgroundPlotter:创建一个交互式的渲染窗口,并且不暂停代码执行
导出mesh,保存成vtk
可以使用.save() 直接绑定到这些对象的方法将任何PyVista网格对象保存为VTK文件格式。例如,上面使用的网格可以保存为:
mesh.save("mesh.vtk")
例子
>>> mesh = examples.load_airplane()
>>> # cell的数量
>>> mesh.n_cells
2452
>>> # point的数量
>>> mesh.n_points
1335
>>> # What about scalar arrays? Are there any?
>>> mesh.n_arrays
0
>>> # What are the mesh bounds?
>>> mesh.bounds
[139.06100463867188, 1654.9300537109375, 32.09429931640625, 1319.949951171875, -17.741199493408203, 282.1300048828125]
>>> # mesh的中心
>>> mesh.center
[896.9955291748047, 676.0221252441406, 132.19440269470215]
# 点
the_pts = mesh.points
array([[896.994 , 48.7601, 82.2656],
[906.593 , 48.7601, 80.7452],
[907.539 , 55.4902, 83.6581],
[896.994 , 55.4902, 85.3283],
[896.994 , 42.8477, 77.825 ]], dtype=float32)
point_arrays
mesh = examples.load_uniform()
## 获得值
arr = mesh.point_arrays['Spatial Point Data']
print mesh #查看mesh信息
output:
UniformGrid (0x12c9a9328)
N Cells: 729
N Points: 1000
X Bounds: 0.000e+00, 9.000e+00
Y Bounds: 0.000e+00, 9.000e+00
Z Bounds: 0.000e+00, 9.000e+00
Dimensions: 10, 10, 10
Spacing: 1.000e+00, 1.000e+00, 1.000e+00
N Arrays: 2
# mesh.dimensions
mesh = examples.load_uniform()
mesh.dimensions
output:
[10, 10, 10]
mesh的值是存储成一维的,所以如果想转换成原来的三维矩阵的话,就需要按照mesh.dimensions 将arr矩阵转换成矩阵。这样其实就是一个矩阵了,因为numpy矩阵本身就是这样。
如果是'UnstructuredGrid'则没有mesh.dimensions
访问的话就会报错:
AttributeError: 'UnstructuredGrid' object has no attribute 'dimensions'