现在您有了一个包装的 VTK 数据对象,您可以开始访问和修改数据集。一些最常见的属性访问包括点和点/单元数据(分别分配给网格节点或单元的数据属性)。
首先,检查一些常见的元属性:
code.matlab
import pyvista as pv
from pyvista import examples
import numpy as np
mesh = examples.load_airplane()
# 检查此网格中有多少个单元
mesh.n_cells
2452
# 检查此网格中有多少个点
mesh.n_points
1335
# 那标量数组呢?有吗?
mesh.n_arrays
0
# 网格边界是什么?
mesh.bounds
BoundsTuple(x_min = 139.06100463867188,
x_max = 1654.9300537109375,
y_min = 32.09429931640625,
y_max = 1319.949951171875,
z_min = -17.741199493408203,
z_max = 282.1300048828125)
# 此网格的中心在哪里?
mesh.center
(897.0, 676.02, 132.19)
通过获取任何 PyVista 网格上的 points 属性作为 numpy.ndarray 来访问点:
code.matlab
the_pts = mesh.points
isinstance(the_pts, np.ndarray)
True
the_pts[0:5, :]
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)
访问网格节点和单元上的不同数据属性是通过带有对 VTK 对象回调的字典进行接口的。这些不同点和单元数组的字典可以直接访问和修改,作为 NumPy 数组。在下面的示例中,我们加载数据集,访问该数据集上的数组,然后添加更多数据:
code.matlab
mesh = examples.load_uniform()
# 从点数据字典中获取数据数组
arr = mesh.point_data['Spatial Point Data']
# 向单元数据分配新数组:
mesh.cell_data['foo'] = np.random.rand(mesh.n_cells)
# 不记得您的数组是点还是单元数据?您可以直接查询网格对象并从数据集中访问数组。
foo = mesh['foo']
isinstance(foo, np.ndarray)
True
# 或者您只想在适合的位置添加数组。
mesh['new-array'] = np.random.rand(mesh.n_points)