IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    初学PyVista可视化的基本操作(窗口集成,模型导入,应力云图)

    52txr发表于 2024-05-15 14:19:00
    love 0

    这篇文章主要介绍了初学者如何使用PyVista进行三维模型的可视化,包括安装PyVista库和其相关插件,导入三维模型,将PyVista窗口嵌入PyQt中以及显示应力云图等操作。文章通过详细的代码示例,展示了如何读取三维模型文件,如何将PyVista集成到自己的软件中,以及如何使用PyVista显示模型的应力分布。

    为什么学PyVista

    最近在做一个应力云图可视化的项目,一开始在用Open3d再弄,但是那种色带其实并不是很好的控制。于是我就在找一些新的可视化库。在CSDN上看到了PyVista,再打开官网一看里面的example,真酷啊!不论后面是不是真的能用得上,至少先学学吧,感觉还是蛮有意思的。

    PyVista 0.43.1 - 官方帮助文档

    帮助文档有很多的示例代码,from pyvista import examples,这里面的代码直接复制就可以运行,就不再赘述了。

    PyVista 是一个开源的 Python 库,用于三维图形和 mesh(网格)分析。PyVista 建立在 VTK(Visualization Toolkit)之上,通过提供更加简洁的 API 和现代化的界面来简化 VTK 的复杂性,使得用户能够更加容易地创建和定制高质量的三维可视化效果。PyVista 支持多种类型的网格数据,包括结构化和非结构化网格,并提供了一系列工具来处理这些数据,如网格操作、切片、等值面提取、体绘制等。此外,PyVista 还支持与其它流行的科学计算 Python 库如 NumPy、Pandas、SciPy 等的集成,使得数据转换和分析工作更加高效。

    能显示的效果

    PyVista安装

    安装用了下清华源,这样比较快!

    pip install pyvista -i https://pypi.tuna.tsinghua.edu.cn/simple

    安装PyVista

    还有一些插件也可以顺手安装上:

    三维可交互面板绘制的插件

    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()

    读取效果如下:

    显示的效果

    把窗口嵌入PyQt中

    很多时候,都希望把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_())

    显示效果如下:

    集成到到自己的PyQt软件中

    显示应力云图

    有机械专业里面,很多需要读取文件并显示出来应力云图。下面是我用一些随机的应力值显示的效果。可以显示网格和隐藏网格:

    显示出应力云图效果

    代码如下:



沪ICP备19023445号-2号
友情链接