当前位置:首页>python>基于Python的开源网格生成软件PyMeshGen近期更新

基于Python的开源网格生成软件PyMeshGen近期更新

  • 2026-10-21 13:29:28
基于Python的开源网格生成软件PyMeshGen近期更新

PyMeshGen 近期更新:新增3D网格处理与CGNS文件支持

本文介绍PyMeshGen项目近期完成的功能更新,主要包括3D网格处理能力增强、CGNS文件格式支持以及可视化功能的改进。


前言

PyMeshGen是一个基于Python开发的开源网格生成工具,旨在为计算流体力学(CFD)和有限元分析(FEA)提供易用的网格生成解决方案。项目自开源以来,一直致力于降低网格生成算法的学习门槛,为初学者和研究者提供简洁易懂的代码实现。

近期,PyMeshGen进行了一系列更新,主要围绕以下几个方面展开:

  • 扩展3D网格单元类型支持
  • 新增CGNS文件格式支持
  • 改进可视化渲染功能
  • 优化代码架构和测试覆盖

本文将详细介绍这些更新的具体内容和实现细节。


一、文件格式支持扩展

1.1 CGNS文件格式支持

CGNS(CFD General Notation System)是CFD领域广泛使用的数据格式标准,许多商业CFD软件(如ANSYS Fluent、OpenFOAM等)都支持该格式。本次更新新增了CGNS文件的读取功能,主要包括以下内容:

核心功能实现

  • 文件读取:实现了CGNS文件的基本读取功能,能够解析网格节点、单元和边界信息
  • 边界条件处理:支持读取和解析CGNS文件中的边界条件定义
  • 高阶元素检测:添加了高阶元素的识别功能,能够区分线性单元和高阶单元
  • 单元测试:为CGNS读取功能编写了完整的单元测试,确保代码质量

代码结构

CGNS相关功能被组织在独立的模块中,主要包含以下组件:

# CGNS单元类型定义CGNS_CELL_TYPES = {"NODE": 0,"BAR_2": 1,"TRI_3": 2,"QUAD_4": 3,"TETRA_4": 4,"PYRA_5": 5,"PENTA_6": 6,"HEXA_8": 7,# 更多类型...}# CGNS边界条件类型CGNS_BOUNDARY_TYPES = {"BCWall": 2,"BCInlet": 3,"BCOutlet": 4,# 更多类型...}

1.2 meshio库集成

为了支持更多网格文件格式,项目集成了meshio库。meshio是一个功能强大的网格I/O库,支持30多种网格文件格式,包括:

  • VTK系列格式(.vtk, .vtu, .vtp等)
  • Fluent格式(.msh, .cas)
  • CGNS格式(.cgns)
  • STL格式(.stl)
  • 以及其他多种格式

通过meshio的集成,用户可以更方便地导入不同来源的网格文件,提升了工具的通用性。

使用示例

import meshio# 读取网格文件mesh = meshio.read("example.msh")# 获取节点坐标nodes = mesh.points# 获取单元连接关系cells = mesh.cells

1.3 文件操作日志回调

为了便于调试和问题排查,为FileOperations类添加了日志回调功能。用户可以在文件操作过程中实时获取进度信息和错误提示。


二、3D网格处理能力增强

2.1 新增3D单元类型支持

此前PyMeshGen主要支持2D网格生成,本次更新扩展了3D网格的处理能力,新增了四种主流3D单元类型:

单元类型
单元编号
应用场景
特点
四面体
2
复杂几何体网格生成
灵活适应任意形状,生成算法成熟
金字塔
5
过渡区域连接
用于连接四面体和六面体网格
三棱柱
6
边界层网格
适合薄层结构,常用于边界层生成
六面体
4
结构化网格
计算效率高,数值精度好

实现细节

每种单元类型都实现了以下功能:

  • 单元连接关系存储
  • 几何参数计算(体积、面积等)
  • 可视化渲染支持
  • 单元质量评估

以四面体为例,其体积计算实现如下:

deftetrahedron_volume(coords):"""    计算四面体体积    coords: 4个节点的坐标,形状为(4, 3)    """    a = coords[1] - coords[0]    b = coords[2] - coords[0]    c = coords[3] - coords[0]    volume = abs(np.dot(a, np.cross(b, c))) / 6.0return volume

2.2 几何计算功能扩展

为了支持3D网格,扩展了几何计算功能模块,主要包括:

  • 3D坐标系统支持
  • 四面体体积计算
  • 高阶元素识别
  • 3D网格重构功能

这些功能为后续的网格质量评估和优化算法奠定了基础。

2.3 数据结构优化

将Unstructured_Grid类拆分到独立模块中,使其能够更好地支持3D坐标系统。同时,将Fluent类型定义和VTK单元类型定义也移至独立模块,提升了代码的可维护性。


三、可视化功能改进

3.1 渲染模式切换

PyMeshGen基于VTK(Visualization Toolkit)实现网格可视化,本次更新新增了三种渲染模式:

  • 实体模式:以实体方式显示网格,适合查看整体结构
  • 线框模式:以线框方式显示网格,便于查看拓扑关系
  • 点云模式:仅显示节点,便于检查节点分布

用户可以通过工具栏按钮快速切换不同的渲染模式,以适应不同的查看需求。

实现代码片段

defset_render_mode(self, mode):"""    设置渲染模式    mode: 'solid', 'wireframe', 'points'    """for actor in self.actors:if mode == 'solid':            actor.GetProperty().SetRepresentationToSurface()elif mode == 'wireframe':            actor.GetProperty().SetRepresentationToWireframe()elif mode == 'points':            actor.GetProperty().SetRepresentationToPoints()    self.render_window.Render()

3.2 视图控制工具

为了提升用户操作体验,添加了便捷的视图控制功能:

  • 六个标准视图方向(前/后/左/右/上/下)
  • 等轴测视图
  • 可拖拽停靠的视图工具栏
  • 相机投影和缩放控制优化

这些功能参考了主流CAE软件(如ANSYS、OpenFOAM)的设计,符合工程师的使用习惯。

3.3 部件显示控制

为部件列表添加了复选框,用户可以独立控制每个部件的显示/隐藏状态。这对于包含多个部件的大型模型特别有用,用户可以:

  • 逐个查看不同部件
  • 隐藏不需要关注的部件
  • 快速定位问题区域

四、代码质量与测试

4.1 代码重构

为了提升代码的可维护性和可扩展性,进行了一系列重构工作:

  • 将Fluent类型定义移至独立模块
  • 将VTK单元类型定义移至独立模块
  • 重构CGNS读取器代码结构
  • 优化导入路径和模块组织

这些重构使代码结构更加清晰,便于后续的功能扩展和维护。

4.2 测试覆盖增强

测试是保证代码质量的重要手段,本次更新增强了测试覆盖率:

  • 新增CGNS文件分析工具的单元测试
  • 增强网格导入测试的健壮性
  • 更新测试用例使用示例文件
  • 添加高阶元素检测测试

测试示例

deftest_cgns_reader():"""测试CGNS文件读取功能"""    reader = CGNSReader()    mesh = reader.read("test.cgns")assert mesh isnotNoneassert len(mesh.nodes) > 0assert len(mesh.cells) > 0assert len(mesh.boundaries) > 0

五、实际应用示例

5.1 读取CGNS文件并可视化

以下是一个完整的使用示例,展示如何读取CGNS文件并进行可视化:

from PyMeshGen.file_operations import FileOperationsfrom PyMeshGen.mesh_display import MeshDisplay# 创建文件操作对象file_ops = FileOperations()# 读取CGNS文件mesh = file_ops.read_file("example.cgns")# 创建可视化对象display = MeshDisplay()# 显示网格display.set_mesh(mesh)display.set_render_mode('wireframe')display.show()

5.2 多格式网格转换

利用meshio的集成功能,可以方便地进行网格格式转换:

import meshio# 读取Fluent格式网格mesh = meshio.read("input.msh")# 导出为VTK格式mesh.write("output.vtk")# 导出为CGNS格式mesh.write("output.cgns")

六、更新统计

本次更新共完成27个提交,具体统计如下:

类别
数量
新增功能
15项
优化改进
8项
问题修复
4项
测试增强
多项

主要涉及的文件模块:

  • 文件I/O模块(file_operations.py, cgns_reader.py等)
  • 网格显示模块(mesh_display.py)
  • GUI模块(gui_main.py, ribbon_widget.py等)
  • 数据结构模块(unstructured_grid.py, cell_types.py等)

七、使用指南

7.1 安装与启动

# 克隆项目git clone https://github.com/your-repo/PyMeshGen.git# 安装依赖pip install -r requirements.txt# 启动图形界面python start_gui.py

7.2 快速开始

  1. 导入文件:通过菜单"文件 -> 打开"或拖拽文件到窗口中
  2. 切换视图:使用视图工具栏切换渲染模式
  3. 控制显示:在部件列表中勾选/取消勾选部件
  4. 导出结果:通过"文件 -> 导出"选择目标格式

八、后续计划

根据项目的开发路线图,后续版本将重点推进以下功能:

8.1 核心功能扩展

  • 3D网格生成:实现3D阵面推进法生成四面体网格
  • 3D边界层网格:开发3D边界层层推进算法,支持边界层网格生成
  • 多方向层推进:扩展层推进算法,支持多方向推进
  • 几何内核引入:集成几何内核,提升几何处理能力
  • 曲线网格生成:实现曲线离散及曲线网格生成功能
  • 曲面网格生成:开发曲面网格生成算法

8.2 性能优化

  • EdgeSwap效率优化:优化EdgeSwap算法,提升网格优化速度
  • 网格重构与渲染效率

8.3 其他改进

  • 网格质量评估工具
  • 用户文档完善
  • 更多单元测试覆盖

👇点击左下方“阅读原文”访问项目!


全文结束,感谢观看,创作不易。

😁😁

欢迎关注、留言、点赞、分享、推荐!

👇👇


【往期回顾】

Python + VTK + PyQt5:开源网格生成工具PyMeshGen GUI实现详解
Ansys Fluent网格文件cas和msh的读取实例及代码
想入门网格生成算法?建议你看看PyMeshGen
用 Python + VTK + Tkinter 打造自己的 3D 模型查看器

我用DeepSeek-V3.1做了一下PDE编程求解,来看看结果怎么样

使用Qwen Code实现CFD开发自动化AI工作流

我用Qwen3-Coder做了一下PDE编程求解,3轮对话就完成!

使用Qwen3-Coder求解一维扩散方程

PyFR求解结果后处理之ParaView使用记录

开源高阶求解器PyFR2.1安装使用记录(CUDA并行版本)

让NACA0012翼型动起来,变成一条鱼

开源网格生成软件Gmsh最新版4.13.1编译

最新文章

随机文章