【开源可视化工具pyvista】极简入门:一框架结构的建模及vtk文件导出

文摘   2024-09-03 16:10   泰国  

在工程仿真和科学计算中,数据的可视化是至关重要的一环。它不仅能帮助我们直观地理解计算结果,还能用于演示和交流。本文要介绍的工具,PyVista,就是一个强大且易用的Python库,专为科学计算和三维数据可视化而设计。本文介绍PyVista的基本使用方法,并以一个框架结构建模数据为例,记录如何建模及保存数据

什么是PyVista?

PyVista是基于VTK(Visualization Toolkit)的Python库,旨在简化三维数据的处理和可视化。它提供了一个简单而直观的API,能够轻松创建、操作和显示三维数据。无论是有限元分析的结果,还是流体力学的模拟数据,PyVista都能为你提供强大的可视化支持。

PyVista的主要功能

  1. 三维网格操作
    PyVista支持各种类型的网格操作,如创建、变换、裁剪和合并网格。这使得在处理复杂几何形状时尤为方便。例如,你可以轻松地将多个网格结合在一起,或者对某个网格区域进行裁剪。

  2. 强大的可视化功能
    PyVista提供了多种可视化选项,支持直接在Jupyter Notebook中进行互动式可视化。你可以为不同的数据集添加颜色映射、透明度、边界线等,创建出细致的三维图像。

  3. 与其他工具的集成
    PyVista与许多Python科学计算库(如NumPy、SciPy)无缝集成,方便进行数据的预处理与后处理。此外,它还可以轻松导入和导出各种数据格式,如VTK、STL、PLY等。

为什么选择PyVista?

易用性强

相较于VTK的复杂性,PyVista的API设计简洁明了,非常适合工程师和研究人员快速上手。

社区活跃

PyVista有着活跃的开源社区,定期更新并提供丰富的教程与文档。无论你是初学者还是资深用户,都能在社区中找到帮助和灵感。

互动性强

PyVista在Jupyter Notebook中的表现尤为出色,支持互动式数据探索,能够动态调整可视化参数,方便用户进行深入分析。

PyVista的应用场景

  • 有限元分析结果的可视化
    PyVista可以轻松加载并显示有限元分析软件(如Abaqus、ANSYS)导出的数据文件,并对分析结果进行深入的可视化探索。

  • 流体力学模拟
    在CFD(计算流体力学)中,PyVista能够用于展示复杂的流体场分布,如速度场、压力场等,帮助理解流动现象。

  • 地质和地球物理数据处理
    PyVista支持地质模型的可视化,可以展示地下结构、地层等信息,广泛应用于地质工程与地球物理勘探。

如何开始使用PyVista?

要开始使用PyVista,你只需安装它:

pip install pyvista

安装完成后,可以使用以下代码进行一个简单的可视化:

import pyvista as pv
sphere = pv.Sphere()
plotter = pv.Plotter()
plotter.add_mesh(sphere, color='cyan')
plotter.show()

运行这段代码,将看到一个三维球体出现在屏幕上。

示例:框架结构的pyvista绘图

本节将展示如何通过pyvista写入一个框架的数据,并导出vtk文件。

代码内容

先上代码:

import pyvista as pv
import numpy as np

# 定义结构的节点位置(例如,立方体的8个角点)
nodes = np.array([
[0, 0, 0],
[1, 0, 0],
[1, 1, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 1],
[1, 1, 1],
[0, 1, 1],
])

# 定义框架的边(每一对节点形成一个边)
edges = np.array([
[4, 5],
[5, 6],
[6, 7],
[7, 4],
[0, 4],
[1, 5],
[2, 6],
[3, 7],
])

# 创建一个PolyData对象来存储节点和边
frame = pv.PolyData()
frame.points = nodes

# 添加边到PolyData
for edge in edges:
frame.lines = np.hstack([frame.lines, [2, edge[0], edge[1]]])

# 保存模型为VTK文件
frame.save("frame.vtk")

# 可视化
plotter = pv.Plotter()
plotter.add_mesh(frame, color="blue", line_width=4)
plotter.show()

代码解析

这段代码使用PyVista库创建了一个简单的三维框架结构,并将其保存为VTK文件,然后进行可视化。以下是对代码的逐步解释:

1. 导入库

import pyvista as pv
import numpy as np

代码导入了PyVista库(简写为pv)和NumPy库(简写为np)。PyVista用于三维数据的处理和可视化,NumPy用于数值计算和数组操作。

2. 定义节点位置

nodes = np.array([
[0, 0, 0],
[1, 0, 0],
[1, 1, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 1],
[1, 1, 1],
[0, 1, 1],
])

nodes是一个二维NumPy数组,每一行表示三维空间中的一个点。这些点代表立方体的8个角点的坐标。

3. 定义边

edges = np.array([
[4, 5],
[5, 6],
[6, 7],
[7, 4],
[0, 4],
[1, 5],
[2, 6],
[3, 7],
])

edges是一个二维数组,每一行表示一条边,连接两个节点。这里定义了8条边,连接了立方体的一部分顶点,形成了一个框架结构。

4. 创建PolyData对象

frame = pv.PolyData()
frame.points = nodes

frame是一个PolyData对象,用于存储三维点和连接这些点的线条。首先,将之前定义的nodes数组赋值给frame.points,表示结构的顶点位置。

5. 添加边到PolyData

for edge in edges:
frame.lines = np.hstack([frame.lines, [2, edge[0], edge[1]]])

这个循环遍历每一条边,将其添加到framelines属性中。[2, edge[0], edge[1]]表示一条边由两个点组成,其中edge[0]edge[1]是边的起点和终点。np.hstack用于将新的边信息附加到frame.lines中。

6. 保存为VTK文件

frame.save("frame.vtk")

将创建的结构保存为一个名为frame.vtk的VTK文件。这个文件可以在支持VTK格式的工具中打开和查看。

7. 可视化

plotter = pv.Plotter()
plotter.add_mesh(frame, color="blue", line_width=4)
plotter.show()

这一部分代码使用PyVista的Plotter对象进行可视化。frame被添加到绘图器中,并设置为蓝色,线条宽度为4。最后,plotter.show()展示了生成的三维框架结构。

PyVista可视化界面
Paraview查看模型

代码总结

这段代码创建了一个三维桁架(框架)模型,通过定义顶点和连接它们的边,将其保存为VTK文件,并使用PyVista进行可视化展示。该模型展示了立方体的部分边,形成了一个基本的三维框架结构。

结语

在现代工程和科学计算中,数据的可视化已经成为必不可少的部分。PyVista以其简单、强大、灵活的特性,成为了众多科研工作者的首选工具。无论你是从事工程仿真、数据分析,还是科学研究,PyVista都能为你的工作提供强大的支持。

往期精彩内容推荐:

开源有限元求解器介绍的专题如下:


挨踢的土木佬
一名学习编程的土木佬,计算固体力学,以第一/通讯作者身份在IJNME、IJSS、力学学报、振动工程学报等权威期刊发表论文若干。热衷分享Python编程、数据处理和数值分析(含有限元)新知,不定期更新文章与笔记。
 最新文章