# PreCess **Repository Path**: precess/PreCess ## Basic Information - **Project Name**: PreCess - **Description**: 专注网格处理的CAE前处理软件,面向网格算法开发者与工业界实际网格处理业务需求。本Gitee仓库为主仓库,在本仓库提交Issue与PR。 - **Primary Language**: C++ - **License**: AGPL-3.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 11 - **Created**: 2024-12-01 - **Last Updated**: 2026-09-21 ## Categories & Tags **Categories**: cae **Tags**: Cpp, Windows, Linux, macOS, Qt ## README [![Forks][forks-shield]][forks-url] [![Gitee Stargazers][stars-shield]][stars-url] [![Github Stargazers][github-stars-shield]][github-stars-url] [![Issues][issues-shield]][issues-url] [![Contributors][contributors-shield]][contributors-url] [![project_license][license-shield]][license-url] [![zread][zread-shield]][zread-url]
Logo

前蔚处理 PreCess

专注网格处理的CAE前处理软件,面向网格算法开发者与工业界实际网格处理业务需求。
项目文档 »

在线体验 · 发行版 · Bug 报告 · 功能反馈

展开目录
  1. 关于项目
  2. 快速构建项目
  3. 功能用法
  4. 路线图
  5. 参与项目
  6. 许可证
  7. 联系方式
  8. 鸣谢
## 🔭关于项目 [![Product Name Screen Shot][product-screenshot]](https://geohubdut.netlify.app/products/item-a765/) **"PreCess"** 取自 **Pre-Process** 前处理的英文名。**“前蔚处理”** 取自 **前处理**。 **前蔚处理 PreCess** 是专注网格处理的 CAE 前处理开源软件,面向网格算法开发者与工业界需求。提供可视化交互框架,用户可在渲染窗口中直接拾取点、线、面、体在内的网格/几何元素等作为算法输入,可视化展示算法结果,降低验证调试成本。应用于网格算法研发、工业 CAE 前处理及游戏资产处理,致力成为 CAE 前处理开源生态底座。 本项目使用**插件化架构**,将功能都封装在插件中。插件按 IO、算法、编辑、功能(`FeatureSystem` 事件驱动,可声明参数、菜单、按键绑定与视口交互能力)四类系统注册,由主程序运行时按需加载。**核心库** `core/` 与 `model/` 采用 **LGPLv3** 许可,允许在不修改依赖源码前提下被闭源软件链接使用;**应用与插件层**(`app/`、`plugins/` 等)采用 **AGPLv3** 许可。 本项目使用CMake构建,力争做到**跨平台**开发,目标兼容Windows/Linux/MacOS系统。使用前沿开发技术,力争成为工业软件CAE前处理领域前沿的开源软件项目,成为工业软件CAE前处理领域**最好的网格处理开源项目**。

(back to top)

### 🤔我们能做什么? 长久以来网格算法开发存在**痛点问题**: 1. 对算法开发者:网格算法需要可视化**输出**结果时,需要打包若干个可视化工具用于做结果的后处理。这些交互输入和后处理逻辑可以被集成到同一个软件中。 2. 对工业界:网格算法开发离工业界实际应用需求较远,我们可以提供一个**集成网格算法的平台**,接触工业界的网格处理业务需求来迭代算法。 我们是大连理工大学软件学院网格组的学生实践团队,致力于**网格算法研发与工业应用**。我们可以为**网格算法开发者**提供一个可视化交互框架,降低验证调试成本; 对于**工业界**处理网格的业务需求,我们可以提供集成网格算法的平台。一方面凭借许可证的灵活性可以集成各种开源网格算法处理技术;另一方面背靠大工软院网格团队的优秀网格算法基础,做商业定制化网格软件开发。

(back to top)

### 🛠️项目技术 * [![C++][C++]][C++-url] * [![CMake][CMake]][CMake-url] * [![Qt][Qt]][Qt-url] * [![VTK][VTK]][VTK-url] * [![OCC][OCC]][OCC-url] * [![spdlog][spdlog]][spdlog-url] * [![Catch2][Catch2]][Catch2-url] * [![KDDockWidgets][KDDockWidgets]][KDDockWidgets-url] **插件层功能依赖**(由 `PreCess-deps.bat` 或 `PreCess-deps.sh` 获取,随对应插件按需构建): * [![CGAL][CGAL]][CGAL-url]:插件共用网格转换层 `plugins/shared/cgal_support` 与网格修复插件(CGAL PMP) * [![Gmsh][Gmsh]][Gmsh-url]:Gmsh 渐进式网格划分插件(`gmsh::shared`) * [![TetGen][TetGen]][TetGen-url]:TetGen 体网格剖分插件(`tetgen::tetgen`,旧版调用外部 `tetgen` 可执行文件)

(back to top)

## 🚀快速构建项目 #### Windows用户 1. 在本项目[发行版页面](https://gitee.com/precess/PreCess/releases),下载带预编译依赖包`PreCess-deps`与项目源码`PreCess`,并解压放置在相同目录`` 2. `Win`+`Q`搜索并打开`x64 Native Tools Command Prompt for VS 2022` 3. 执行命令: ```bash cd /d "/PreCess" cmake -S . -B ./build -GNinja "-DCMAKE_PREFIX_PATH=/PreCess-deps" -DCMAKE_INSTALL_PREFIX=./install-rel -DCMAKE_BUILD_TYPE=Release cmake --build ./build --target install "./install-rel/bin/PreCess.exe" ``` > 开发提示:仓库自带 `CMakeUserPresets.json.example` 预设模板用来便捷配置Windows VS开发环境,根据需要复制并重命名为 `CMakeUserPresets.json`,然后修改其中的路径和环境变量。

(back to top)

## ⚙️功能用法 - **模型导入与展示**:支持 IGES、STEP、OBJ、PLY、`.m`、Medit `.mesh`、Abaqus `.inp`、VTK `.vtk`、`.off` 等格式导入与展示,支持多文件同时导入;几何与网格分层组织、网格/几何渲染风格切换(如「网格·面·带网格线」「网格·线·带内部线」等)、体网格切面裁剪。 - **交互式选择与算法调用**:组件/点/边/面/体/几何点线面体选择器,网格面支持按角度扩散多选;对选择结果调用网格算法插件(Gmsh 渐进式划分、TetGen/TetGenLib 体网格剖分、CCGMeshToNURBS、执行 cmd 命令等)。 - **几何处理**:基础图元创建——点、直线边(坐标/选点)、矩形面、圆盘/扇形面、长方体、圆柱、圆锥/圆台、球体/部分球体;几何编辑——闭合边成面、面拉伸为实体、删除几何。以功能系统插件提供,菜单点选后经参数侧栏执行。 - **网格编辑**:创建面、删除面等编辑插件。 - **测量与尺寸标注**:视口交互测量与参数化尺寸标注(距离/角度/半径/长度/面积/体积/包围盒/重心)。 - **网格质量分析**:计算所选组件的网格质量并生成标量属性,支持属性渲染与颜色表。 - **网格修复**:基于 CGAL PMP 的孔洞三角化填补、自相交面检测、退化面清理。 - **插件开发与集成**:功能皆插件,按 IO/算法/编辑/功能(FeatureSystem 事件驱动)四类系统注册;功能可声明参数、菜单、按键绑定与视口交互能力,示例见 `plugins/` 目录。 _For more examples, please refer to the [Documentation](https://gitee.com/precess/PreCess/wikis/Home)_

(back to top)

## 🗺️路线图 需要完成的**特性、功能**,即**迭代计划**: > 未加粗的目标仍处于计划预览状态。 * [ ] **CI支持**: * [x] 完成项目的测试框架:对每个功能类都要编写单元测试 * [ ] 配置远程托管平台的自动测试与检查 * [x] Doxygen 文档自动生成、自动构建与单元测试 CI * [ ] 代码静态检查 CI * [ ] **跨平台构建**: * [x] 依赖下载脚本迁移到 Python,并提供 bat/sh 入口和 fetch/build 分段 * [x] 依赖及主程序的交叉编译(依赖产物按平台分目录存放) * [ ] linux/mac 交叉编译 * [x] WebAssembly 交叉编译 * [x] Qt 插件支持静态链接,以便 WebAssembly 等仅支持静态链接的平台使用 * [x] WebAssembly 适配,包括壳网页、捆绑字体、浏览器文件导入导出等 * [x] PWA 应用(manifest + Service Worker 离线缓存,可安装、可离线启动) * [x] **网格类型支持**:做到能导入并可视化三角形网格、四边形网格、更广义的多边形网格、体网格 * [x] **渲染窗口的基础交互支持**:支持各种网格元素的拾取:点、边、面、体及几何元素,网格面支持按角度扩散多选 * [x] 体网格的切面支持,实现切平面裁剪网格的可视化效果 * [ ] 更便捷的切面可视化与可视化,效果参考[HexaLab](https://www.hexalab.net/) * [ ] **辅助数据结构系统**:一些网格算法需要依赖某种特定的数据结构如CTMesh等,需要一个系统用于注册插件给定的数据结构类型、拿模型数据构造并存储于内存中,以免每次执行算法对数据结构反复构造 * [ ] **数据层存储附加数据支持**:可以存储**模型核心数据**外的附加数据,如顶点id、uv纹理坐标等,也可用于存储**辅助数据结构**。**模型核心数据**指模型点的坐标与面构成等模型的核心数据 * [ ] **现代化UI开发**: * [x] 可停靠的窗口:引入KDDockWidgets * [ ] 优化焦点管理,及时失焦。 * [ ] 窗口焦点管理:能够选中某个窗口 * [ ] 右键菜单管理 * [x] 渲染窗口、对象树右键菜单(显隐等操作) * [ ] 通用右键菜单注册管理 * [ ] 键盘快捷键管理 * [x] 功能插件按键绑定(FeatureSystem KeyEvent) * [ ] 全局快捷键管理 * [ ] 软件选项设置管理 * [x] 插件注册/注销管理 * [ ] 偏好设置窗口:主题设置 * [ ] Python解释器对软件的控制:参考HyperMesh等,激进点参考Blender * [ ] 菜单栏视图或窗口header按钮或窗口header右键菜单可以管理窗口状态:开关、选项页等。参考HyperMesh、Ansys,激进点的参考Visual Studio与Blender * [ ] 类Blender的自定义窗口布局预设 * [ ] 任务执行 * [x] 任务的失败恢复与撤销重做 * [x] 模型层快照/恢复原语(组件/模型级 takeSnapshot/restoreSnapshot) * [x] 撤销重做:边界自动记录(Auto)+ Manual staged 预览会话(beginStaged/commitStaged/cancelStaged/revertStaged),线性历史;设计约定见 AGENTS.md 第 10 节 * [ ] 任务暂停或断点:算法执行过程中的调试。一般都是每次执行输出一个结果到文件再打开模型查看情况,也许可以做到更精细的算法控制 * [ ] UI的更新机制:数据更新还挺困难。比如数据更新可能会导致当前操作不合法,需要考虑避免 * [ ] 从软件中剥离业务逻辑:这服务于以下几点 * [x] C++类库:模型层已抽象为 `core/`、`model/` 静态库 * [ ] 对模型层做Python Wrapper接口层,可以像Blender将模型层打包成wheel与UI解释器调用接口 * [x] Qt-free 会话层 `model/session`:Session 组合根 + SessionQuery 原生查询(QML 适配器瘦身为纯包装,签名不变) * [x] pybind11 绑定模块 `precess`(顶层 `python/` 目录,LGPLv3;顺序传参调用 `call(feature, *args)` + `feature_params` 自省,Combo 按选项下标;wheel 打包待后续) * [x] app 内嵌 Python 运行环境:QPythonRuntime + Python 控制台(F11;活会话注入 `precess.current`,Python ≡ GUI 线程执行约定) * [ ] 无头 CLI 与 wheel 打包(含插件加载的 Qt 解耦) * [ ] 无头软件:软件不是必须得要一个UI吧!命令行也是一种调用接口方法 * [ ] C/S架构:模型层打包成服务器上的服务,类ParaView * [ ] 插件管理 * [x] 插件管理界面:偏好设置中提供插件注册/注销管理 * [ ] 完善动态插件机制:ABI稳定过于抽象,在用户的插件使用过程中逐渐完善 * [ ] 插件化的还不够彻底,目前只是实现了业务逻辑的插件化,没有考虑渲染或者UI的插件化 * [x] 静态插件机制设计:使用constexpr静态注册,元数据在插件编译时嵌入。尽量兼容动态插件接口 * [ ] 多任务管理 * [ ] 算法不阻塞UI,区分工作线程与界面线程 * [ ] 任务资源占用识别与任务的多线程调度:模型A正在运行某个拓扑操作,此时不能同时对A进行另一个拓扑操作。并行的资源占用、任务暂停。考虑使用std::execution实现UE5的任务图的可行性。 * [ ] 算法图:可以以蓝图的形式连接各个算法的输入输出,并予以执行。参考UE5的蓝图系统与Blender的几何节点 * [ ] 动画系统:一些算法的执行过程就是完美的动画 * [ ] 操作结果预览:Blender在进行某些网格操作如挤出收口等操作时,有预览效果可以看得到。但这要UI与算法功能强相关,功能又在dll插件里,跨层操作难度大。参考Blender 可以查看开启的或进行中的 [Issues](https://gitee.com/precess/PreCess/issues) 或 [里程碑](https://gitee.com/precess/PreCess/milestones) 来了解每个任务目前的具体进度。也可以**开启新的Issue**描述遇到的bug、建议或新的项目需求。

(back to top)

## 🤝参与项目 Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 由衷感谢任何你尝试对本项目做出的贡献!无论是贡献代码还是为项目反馈意见建议,甚至只是反馈修复拼写错误等小问题都**十分感谢**!更欢迎您参与项目例会与项目系列课程活动、尝试调试代码解决问题。 > **接口稳定性提示**:项目处于**预览阶段**(当前 0.x 版本),`core/`、`model/` 库与插件接口**随时可能发生二进制级或源代码级的不兼容变更**,不提供稳定性承诺;不同**编译器/编译器版本或构建配置**也可能导致软件与插件dll二进制不兼容。插件源码**随主仓库同步构建**是规避该问题最稳妥的方式;独立构建时只要与主程序使用**兼容的编译器、构建配置与依赖库版本**,同样可以保持二进制兼容。无论哪种方式,注意及时更新到与主仓库兼容的最新 API 接口。 在此从简单开始列举可以为项目的**贡献形式**: 1. 给项目一个**Star**🌟! 2. **新建[Issue](https://gitee.com/precess/PreCess/issues)**:反馈项目bug、功能改进建议、新功能建议。写Issue时按照给定模板进行填写,并标注对应的tag标签。如, * 项目Bug:反馈程序运行过程中遇到的bug,填写Issue时附带程序的输出记录。最好能做到稳定复现Bug,并附带Bug的复现操作流程。标注**bug标签** * 改进建议:标注enhancement标签 * 新功能:标注feature标签 3. **发起Pull Request**:尝试修改完善项目文档、或解决实现Issue。 1. Fork本仓库 2. 创建你的Feature分支 (`git checkout -b feature/AmazingFeature`) 3. Commit你做的更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到个人的Fork仓库 (`git push origin feature/AmazingFeature`) 5. 开启一个Pull Request请求。如果解决了某个Issue填写对应的Issue 在AI时代理论上**每个人都可以**修改项目代码并实现功能,如果缺少指导与项目结构理解可以[参与交流](#联系方式)。**贡献代码**难度由简单排序: 1. 修改完善项目**[Wiki文档](https://gitee.com/precess/PreCess/wikis)**、根据[注释要求](https://gitee.com/precess/PreCess/wikis/%E4%BB%A3%E7%A0%81%E6%8F%90%E4%BA%A4%E8%A7%84%E8%8C%83#%E6%B3%A8%E9%87%8A)完善程序**注释** 2. 为项目补充缺失的单元**测试**等测试代码 3. 发现并调试修复程序中的**bug** 4. 基于现有架构做**二次开发**,开发软件拓展插件,集成网格算法等功能 5. 开发软件的**UI框架与渲染窗口**:UI框架、渲染窗口交互 6. 开发**软件核心部分**代码:按需开发或完善系统、修改调整模型核心数据结构

(back to top)

## ⚖️许可证 本项目对**不同目录代码**分别采用 `LGPLv3` 与 `AGPLv3` 双许可证: - **`core/`、`model/`、`cmake/`(LGPLv3)**:核心库层与其构建辅助脚本。 允许在**不修改依赖源码**的前提下被闭源软件链接使用,便于二次开发; `cmake/` 中的 Find 模块可被下游 LGPL 使用者直接复用。 - **`app/`、`plugins/`、`resource/` 及其余目录(AGPLv3)**:应用、插件与 应用品牌资源。由于插件依赖链中可能包含以 AGPLv3 发布的第三方库, 此部分统一采用 AGPLv3;分发或通过网络对外提供服务时须遵守 AGPLv3 全部条款(含第 13 条网络分发义务)。 LGPLv3 与 AGPLv3 兼容,因此 `app/` / `plugins/` 可以正常调用 `core/` / `model/`;只是任何发行版一旦打包了 AGPLv3 组件,整体分发义务按 AGPLv3 处理。 许可证边界与义务详情参见 `LICENSE.md`(正式版本,英文)、 `LGPLv3-LICENSE.txt` 与 `AGPLv3-LICENSE.txt`。 中文翻译版本见 `LICENSE.zh-CN.md`(仅供参考,以英文版本为准)。

(back to top)

## 📞联系方式
Logo
仓库链接: [https://gitee.com/precess/PreCess](https://gitee.com/precess/PreCess) github镜像:[https://github.com/a-ciue/PreCess](https://github.com/a-ciue/PreCess)

(back to top)

## 🙏鸣谢 * [大连理工大学软件学院先进工业软件与软件工程研究所](https://ss.dlut.edu.cn/index.htm) * 大连理工大学特色化示范性软件学院大型工业软件特色班

(back to top)

[contributors-shield]: https://img.shields.io/endpoint?url=https%3A%2F%2Fgitee-badge.vercel.app%2Fjson%2Fcontributors%2Fprecess%2FPreCess [contributors-url]: https://gitee.com/precess/PreCess/graphs/contributors [forks-shield]: https://gitee.com/precess/PreCess/badge/fork.svg?theme=dark [forks-url]: https://gitee.com/precess/PreCess/network/members [stars-shield]: https://gitee.com/precess/PreCess/badge/star.svg?theme=dark [stars-url]: https://gitee.com/precess/PreCess/stargazers [github-stars-shield]: https://img.shields.io/github/stars/a-ciue/PreCess?style=social [github-stars-url]: https://github.com/a-ciue/PreCess/stargazers [issues-shield]: https://svg.hamm.cn/gitee.svg?user=precess&project=PreCess&type=issue [issues-url]: https://gitee.com/precess/PreCess/issues [license-shield]: https://img.shields.io/badge/license-LGPLv3%2FAGPLv3-blue.svg [license-url]: https://gitee.com/precess/PreCess/blob/master/LICENSE.md [zread-shield]: https://img.shields.io/badge/Ask_Zread-_.svg?style=flat-square&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff [zread-url]: https://zread.ai/a-ciue/PreCess [linkedin-shield]: https://img.shields.io/badge/-111-black.svg?colorB=555 [linkedin-url]: https://linkedin.com/in/linkedin_username [product-screenshot]: resource/PreCess_letter.png [C++]: https://img.shields.io/badge/C++%2017-000000?style=for-the-badge&logo=cplusplus&logoColor=white [C++-url]: https://cppreference.com/ [CMake]: https://img.shields.io/badge/CMake-000000?style=for-the-badge&logo=cmake&logoColor=white [CMake-url]: https://cmake.org/ [Qt]: https://img.shields.io/badge/Qt%20Quick%206-000000?style=for-the-badge&logo=qt&logoColor=white [Qt-url]: https://qt.io/ [VTK]: https://img.shields.io/badge/VTK-000000?style=for-the-badge&logo=vtk&logoColor=white [VTK-url]: https://vtk.org/ [OCC]: https://img.shields.io/badge/OpenCASCADE-000000?style=for-the-badge&logo=occ&logoColor=white [OCC-url]: https://dev.opencascade.org/ [spdlog]: https://img.shields.io/badge/spdlog-000000?style=for-the-badge&logo=spdlog&logoColor=white [spdlog-url]: https://github.com/gabime/spdlog [Catch2]: https://img.shields.io/badge/Catch2-000000?style=for-the-badge&logo=catch2&logoColor=white [Catch2-url]: https://github.com/catchorg/Catch2 [KDDockWidgets]: https://img.shields.io/badge/KDDockWidgets-000000?style=for-the-badge&logo=kddockwidgets&logoColor=white [KDDockWidgets-url]: https://github.com/KDAB/KDDockWidgets [CGAL]: https://img.shields.io/badge/CGAL-000000?style=for-the-badge&logo=cgal&logoColor=white [CGAL-url]: https://www.cgal.org/ [Gmsh]: https://img.shields.io/badge/Gmsh-000000?style=for-the-badge&logo=gmsh&logoColor=white [Gmsh-url]: https://gmsh.info/ [TetGen]: https://img.shields.io/badge/TetGen-000000?style=for-the-badge&logo=tetgen&logoColor=white [TetGen-url]: https://wias-berlin.de/software/tetgen/