接前面PyVista使用小记(一),继续了解PyVista 的基本用法。
PyVista 支持的 Filter
不同的数据集支持不同的Filter,考虑如下数据集:
- Dataset:所有数据类型的基类
- PolyData:适合表示表面网格
- UnstructuredGrid:适合表示体网格
- ImageData:适合表示规则网格数据
- Composite:用于组织多个数据集
简单列一下
基础几何处理 Filters
| Filter名称 | Dataset | PolyData | UnstructuredGrid | ImageData | Composite | 用途描述 |
|---|---|---|---|---|---|---|
| clip | ✓ | ✓ | ✓ | ✓ | ✓ | 使用平面或函数切割模型 |
| slice | ✓ | ✓ | ✓ | ✓ | ✓ | 创建截面,可支持多平面切割 |
| threshold | ✓ | ✓ | ✓ | ✓ | ✓ | 基于标量数值范围筛选数据 |
| extract_edges | × | ✓ | × | × | × | 提取模型边缘线框 |
| decimate | × | ✓ | × | × | × | 简化网格,减少面数 |
| smooth | × | ✓ | × | × | × | 平滑网格表面 |
| compute_normals | × | ✓ | ✓ | × | × | 计算表面法向量 |
模型生成 Filters
| Filter名称 | Dataset | PolyData | UnstructuredGrid | ImageData | Composite | 用途描述 |
|---|---|---|---|---|---|---|
| extrude | × | ✓ | × | × | × | 将 2D 形状沿方向向量拉伸成 3D |
| ribbon | × | ✓ | × | × | × | 将线段转换为带状几何体 |
| tube | × | ✓ | × | × | × | 将线段转换为管状几何体 |
| delaunay_2d | × | ✓ | × | × | × | 从点云生成 2D 三角网格 |
| delaunay_3d | × | ✓ | ✓ | × | × | 从点云生成 3D 四面体网格 |
| reconstruct_surface | × | ✓ | × | × | × | 从点云重建 3D 表面 |
布尔操作 Filters
| Filter名称 | Dataset | PolyData | UnstructuredGrid | ImageData | Composite | 用途描述 |
|---|---|---|---|---|---|---|
| boolean_difference | × | ✓ | × | × | × | 计算两几何体的差集 |
| boolean_intersection | × | ✓ | × | × | × | 计算两几何体的交集 |
| boolean_union | × | ✓ | × | × | × | 计算两几何体的并集 |
| merge | × | ✓ | ✓ | × | ✓ | 合并多个几何体,不移除重叠部分 |
数据处理 Filters
| Filter名称 | Dataset | PolyData | UnstructuredGrid | ImageData | Composite | 用途描述 |
|---|---|---|---|---|---|---|
| cell_centers | ✓ | ✓ | ✓ | ✓ | × | 计算网格单元的中心点 |
| compute_gradient | ✓ | ✓ | ✓ | ✓ | × | 计算标量场的梯度 |
| contour | ✓ | ✓ | ✓ | ✓ | × | 生成等值线/等值面 |
| sample | ✓ | ✓ | ✓ | ✓ | × | 在指定点位置采样数据 |
| probe | ✓ | ✓ | ✓ | ✓ | × | 使用一个数据集探测另一个数据集 |
变换 Filters
| Filter名称 | Dataset | PolyData | UnstructuredGrid | ImageData | Composite | 用途描述 |
|---|---|---|---|---|---|---|
| translate | ✓ | ✓ | ✓ | ✓ | ✓ | 对几何体进行平移变换 |
| rotate | ✓ | ✓ | ✓ | ✓ | ✓ | 对几何体进行旋转变换 |
| scale | ✓ | ✓ | ✓ | ✓ | ✓ | 对几何体进行缩放变换 |
| transform | ✓ | ✓ | ✓ | ✓ | ✓ | 使用 4x4 矩阵进行线性变换 |
特殊用途 Filters
| Filter名称 | Dataset | PolyData | UnstructuredGrid | ImageData | Composite | 用途描述 |
|---|---|---|---|---|---|---|
| warp_by_scalar | ✓ | ✓ | ✓ | ✓ | × | 根据标量场对几何体进行变形 |
| warp_by_vector | ✓ | ✓ | ✓ | ✓ | × | 根据向量场对几何体进行变形 |
| streamlines | ✓ | × | ✓ | ✓ | × | 生成流线用于可视化矢量场 |
| extract_surface | × | ✓ | ✓ | ✓ | × | 提取体数据的表面 |
简单例子
几个简单例子
Extrude(挤压、拉伸)
1 | |
其中:
- vector:Direction and length to extrude the mesh in.
- capping:Control if the sweep of a 2D object is capped. The default is False, which differs from VTK’s default.
例子:

- 曲线拉伸成曲面
- 面拉伸成体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |
Extrude Rotate(拉伸旋转)
1 2 3 4 5 6 7 8 9 10 | |
其中:
- resolution:Number of pieces to divide line into.
- translation:Total amount of translation along the axis.
- dradius:Change in radius during sweep process.
- angle:The angle of rotation in degrees.
- capping:Control if the sweep of a 2D object is capped. The default is False, which differs from VTK’s default.
例子:

- 直线旋转拉伸成圆/圆锥
- 折线旋转拉伸成体
- 面旋转拉伸(旋转对称,或者螺旋)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | |
Extrude Trim(拉伸裁剪)
1 2 3 4 5 6 7 8 | |
其中:
- direction:Direction vector to extrude.
- trim_surface:Surface which trims the surface.
- extrusion:Control the strategy of extrusion. One of the following:
- "boundary_edges"
- "all_edges"
- capping:Control the strategy of capping. One of the following:
- "intersection"
- "minimum_distance"
- "maximum_distance"
- "average_distance"
例子:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |
交、差、并
分为布尔操作和普通的操作:
| 操作类型 | 描述 | 结果 | 示例 | 使用场景 |
|---|---|---|---|---|
| 布尔差集(boolean_difference) | 从第一个几何体中去除与第二个几何体相交的部分 | 返回不相交的部分 | 由球体1减去与球体2的重叠部分 | 物体差集,去除交叠部分 |
| 布尔交集(boolean_intersection) | 返回两个几何体的交叠部分 | 返回相交的部分 | 仅返回两个球体的交集部分 | 提取交集区域 |
| 布尔并集(boolean_union) | 合并两个几何体,返回它们的并集 | 返回两个几何体合并后的部分 | 合并两个球体得到一个新的物体 | 合并物体,得到完整区域 |
| 普通合并(merge) | 将两个几何体合并成一个,保留其所有部分 | 返回包含两个几何体的集合体 | 直接合并两个球体,包含重叠部分 | 合并物体为一个大物体,不改变形状 |
| 交集(intersection) | 返回两个几何体的交叠部分(交集区域) | 返回交集区域,通常为PolyData对象 | 提取两个球体的交集部分 | 提取交集区域,适用于提取重叠区域 |

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | |
生成8瓣空心圆柱体(一)
有前面的准备,可以做些简单的事情

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | |
生成8瓣空心圆柱体(二)
换一种方式

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | |
参考
- https://docs.pyvista.org/api/core/filters
- https://docs.pyvista.org/examples/01-filter/