这篇文章主要介绍了初学者如何使用PyVista进行三维模型的可视化,包括安装PyVista库和其相关插件,导入三维模型,将PyVista窗口嵌入PyQt中以及显示应力云图等操作。文章通过详细的代码示例,展示了如何读取三维模型文件,如何将PyVista集成到自己的软件中,以及如何使用PyVista显示模型的应力分布。
最近在做一个应力云图可视化的项目,一开始在用Open3d再弄,但是那种色带其实并不是很好的控制。于是我就在找一些新的可视化库。在CSDN上看到了PyVista,再打开官网一看里面的example,真酷啊!不论后面是不是真的能用得上,至少先学学吧,感觉还是蛮有意思的。
帮助文档有很多的示例代码,from pyvista import examples
,这里面的代码直接复制就可以运行,就不再赘述了。
PyVista 是一个开源的 Python 库,用于三维图形和 mesh(网格)分析。PyVista 建立在 VTK(Visualization Toolkit)之上,通过提供更加简洁的 API 和现代化的界面来简化 VTK 的复杂性,使得用户能够更加容易地创建和定制高质量的三维可视化效果。PyVista 支持多种类型的网格数据,包括结构化和非结构化网格,并提供了一系列工具来处理这些数据,如网格操作、切片、等值面提取、体绘制等。此外,PyVista 还支持与其它流行的科学计算 Python 库如 NumPy、Pandas、SciPy 等的集成,使得数据转换和分析工作更加高效。
安装用了下清华源,这样比较快!
pip install pyvista -i https://pypi.tuna.tsinghua.edu.cn/simple
还有一些插件也可以顺手安装上:
三维可交互面板绘制的插件
pip install ipygany
基于pyqt的一个弹出式绘图插件
pip install pyvistaqt
PyVista 是基于 VTK 的,它继承了 VTK 的文件读取能力,这意味着它支持 VTK 自己的格式以及其他一些流行的三维模型格式。
常见的三维模型文件格式应该都可以支持:
import pyvista as pv
filename = 'example.stl'
reader = pv.get_reader(filename)
mesh = reader.read()
mesh.plot()
读取效果如下:
很多时候,都希望把PyVista添加到自己的软件中,作为一个自己软件的控件进行显示。下面的代码是一个demo:
import sys
import pyvista as pv
from pyvistaqt import BackgroundPlotter
from PyQt5.QtWidgets import QApplication, QFileDialog, QMainWindow, QPushButton, QVBoxLayout, QWidget
class STLViewer(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('STL Viewer')
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.layout = QVBoxLayout(self.centralWidget)
self.button = QPushButton('Open STL File')
self.button.clicked.connect(self.openSTLFile)
self.layout.addWidget(self.button)
self.plotter = BackgroundPlotter(show=False)
self.layout.addWidget(self.plotter.interactor)
self.setGeometry(100, 100, 800, 600)
def openSTLFile(self):
options = QFileDialog.Options()
fileName, _ = QFileDialog.getOpenFileName(self, "Open STL File", "", "STL Files (*.stl);;All Files (*)",
options=options)
if fileName:
mesh = pv.read(fileName)
self.plotter.add_mesh(mesh)
self.plotter.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
viewer = STLViewer()
viewer.show()
sys.exit(app.exec_())
显示效果如下:
有机械专业里面,很多需要读取文件并显示出来应力云图。下面是我用一些随机的应力值显示的效果。可以显示网格和隐藏网格:
代码如下: