接前面Qt与Python的绑定历史回顾、PySide6下Matplotlib小记以及PySide6下VTK小记,继续梳理一点点...
PyVista
PyVista 是基于 VTK 的高级封装库,简化了 VTK 的使用。
- 高效简洁:PyVista 封装了 VTK 的常用操作,只需少量代码即可完成复杂的任务。
- 易用性:PyVista 提供了更直观的 API,降低了 VTK 的学习曲线。
- 与 Python 生态的集成:PyVista 更加 Pythonic,可以直接与 NumPy、Matplotlib 等库结合使用。
例子
画个圆锥出来(是比前面直接用vtk要简洁很多):
1 2 3 4 5 6 7 8 9 |
|
主要用到了Plotter类
Plotter类
一些基本用法
创建 Plotter 对象:创建 Plotter
实例并配置窗口属性:
1 2 3 4 |
|
添加网格:通过 add_mesh
添加几何体或数据:
1 2 |
|
显示场景:通过 show 方法渲染并显示场景:
1 |
|
设置相机视角:控制相机的视角、焦点和位置:
1 2 3 |
|
导出渲染:将渲染结果保存为文件:
1 2 |
|
多视图布局:创建多子图并分别渲染不同数据:
1 2 3 4 5 6 7 8 9 10 11 |
|
网格类型
In PyVista, a mesh is any spatially referenced information and usually consists of geometrical representations of a surface or volume in 3D space.
所有 PyVista 网格类型都继承自 DataSet 类,表示不同几何类型和数据集类型。以下是 PyVista 的主要网格类型:
类名 | 描述 | 适用场景 | 基类 |
---|---|---|---|
PointSet |
表示一组点的数据集,使用显式的“点”数组定义几何。 | 仅包含点的几何数据集。 | vtk.vtkPointSet |
PolyData |
表示 1D 和 2D 几何(例如线、多边形、三角形),主要用于表面数据。 | 创建表面网格或点云。 | vtk.vtkPolyData |
UnstructuredGrid |
支持任意 1D、2D 和 3D 单元的非结构化网格,可包含体单元。 | 体数据、复杂几何,或处理生成的子集数据。 | vtk.vtkUnstructuredGrid |
StructuredGrid |
规则排列的点网格,点按坐标轴对齐,单元为 2D 四边形或 3D 六面体。 | 使用 numpy.meshgrid 生成有序网格。 |
vtk.vtkStructuredGrid |
RectilinearGrid |
矩形网格,点沿轴对齐但间距不均匀,具有隐式几何。 | 轴对齐的规则但间距不均的网格数据。 | vtk.vtkRectilinearGrid |
ImageData |
均匀网格(影像数据),点间距均匀,基于原点和单元大小生成几何。 | 影像数据(如 CT/MRI 扫描)。 | vtk.vtkImageData |
MultiBlock |
多块数据集的容器,可存储多个网格或数据集。 | 管理多个数据集作为单一对象。 | vtk.vtkMultiBlockDataSet |
PartitionedDataSet |
用于分区管理的复合数据集,封装多个分区。 | 处理分区化的数据集。 | vtk.vtkPartitionedDataSet |
pyvistaqt
pyvistaqt 专门为Qt的Python绑定提供支持(通过模块pyvistaqt),这样一来,比直接用vtk简单不少:
- QtInteractor:PyVista 提供的 QtInteractor 用作 Qt 控件,替换了 VTK 的 QVTKRenderWindowInteractor。
- 简化 API:PyVista 的 add_mesh 方法直接处理颜色和网格显示设置,而无需手动设置映射器和演员。
- 背景设置:使用 PyVista 的 set_background 设置背景颜色,提升代码可读性。
例子
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 |
|
Qt绑定?
pyvistaqt 借助于pyqt来支持不同的Qt绑定。如果只安装了一种,直接使用,如果装了多个,则需要手动指定。
通过环境变量来选择所期望的绑定:
1 2 |
|
可用选项(默认pyqt5):
- pyqt5
- pyside2
- pyqt6
- pyside6
参考
- https://docs.pyvista.org/examples/
- https://docs.pyvista.org/user-guide/what-is-a-mesh
- https://qtdocs.pyvista.org/
- https://qtdocs.pyvista.org/usage.html