LeoHougaard/meshmind-cad
GitHub: LeoHougaard/meshmind-cad
一款本地自主的机械逆向工具,能将 STL 网格重建为带可验证特征树的可编辑 STEP 模型。
Stars: 0 | Forks: 0
# MeshMind CAD
MeshMind CAD 是一个本地、自主的机械 STL-to-STEP 重建器。它能够
检查 mesh,推断出紧凑的特征方案,构建可编辑的 CadQuery
几何模型,将重建曲面与原始模型进行比较,并
导出最佳的 valid solid。
当前的引擎可以处理恒定和多层机械拉伸、
任意平面草图拉伸、阶梯零件、盲孔、boss、
基本方位和倾斜的圆柱体/管、对齐的开口、沉头孔、
旋转体、锥形放样、圆角/倒角,以及混合直线/圆弧
和变曲率 spline 轮廓。它会刻意报告 **best effort**,
而不是假装几何上较差的重建是精确的。
## 在 Windows 上运行
在 PowerShell 中:
```
git clone https://github.com/LeoHougaard/meshmind-cad.git
cd meshmind-cad
.\run.ps1
```
首次运行会安装项目本地的 Python 3.12 环境和 JavaScript
包。打开 。
## 输出
每次成功的重建都会生成:
- `reconstruction.step` — 可编辑的边界表示 (B-rep) 实体
- `reconstruction.py` — 可读的 CadQuery 构建历史记录
- `plan.json` — 经过验证、可机器编辑的特征参数
- `reconstruction.stl` — 预览用的网格细分
- `report.json` — 拟合度指标、假设和警告
`plan.json` 使用有序的 v2 特征树 schema。每个特征都有一个稳定的
id、时间线位置、依赖列表、可读名称、抑制状态,以及
测量参数的来源。浏览器编辑器可以修改标量尺寸、
向量和草图几何形状;重新排序或抑制操作;锁定参数;
撤销/重置本地更改;然后在替换
当前导出文件之前重新构建并重新验证结果。之前保存的修订版本会保留在
`runs//history/` 下。
混合草图会将直线、恒定半径的圆弧,
以及变曲率相切 spline 线段保留为独立可编辑的几何形状。
测量到的基本方位圆柱切割在 X、
Y 或 Z 轴上会作为 Round hole 特征输出;任意轴的
圆柱体则保留为定向圆柱特征。
要直接在编辑器中重新打开已保存的重建结果,请使用
`http://127.0.0.1:8421/?run=`。
浏览器重建作为本地后台任务运行。进度覆盖层会
报告当前的几何阶段、已用时间、测试过的候选方案,以及
当前正在评估的构建中的特征数量。该进度条是由
重建事件驱动的,而不是循环的时间估算。
每个有效的中间实体也会在
浏览器中渲染为临时的 CAD。这仅使用浏览器 GPU 进行
交互式可视化;OpenCascade 重建和几何
验证仍然是 CPU 操作。
当较新的特征树修订版本替换预览时,摄像机视角会被保留。
运行产物会保存在 `runs//` 下。除非
您显式配置外部 language-model endpoint,否则输入内容永远不需要离开
计算机。
## 重建工作原理
1. 使用 Trimesh 加载并归一化三角 mesh。
2. 检测连贯的平面变化层级、解析曲面块,同时检测
基本方位和测量到的 3D 特征轴。
3. 对
每个草图轮廓拟合解析直线、圆、圆弧和相切 spline 线段。
4. 将相等的相邻截面分组到拉伸层中,并将倾斜的
解析圆柱体与多边形切片近似分离开来。
5. 构建相互竞争的单特征和多特征参数化 CadQuery 实体,
包括圆锥体、旋转体、放样和边缘处理等备选方案。
6. 对每个实体进行细分,并计算双向表面距离、体积
误差、有效性以及微小的复杂度惩罚。
7. 导出最佳候选方案,并仅在通过
自动几何阈值时将其标记为高置信度。
language model 是一个可选的规划器,而不是几何 kernel。模型
响应必须根据类型化的特征 schema 进行验证,并由
CadQuery 重建,且必须保留其几何评分。模型生成的代码永远不会被执行。
## 可选的 AI 指导
MeshMind 接受任何兼容 OpenAI 的 chat-completions endpoint。在启动前,将
`.env.example` 的值复制到您的 PowerShell 环境中:
```
$env:MESHMIND_LLM_URL = "http://127.0.0.1:8000/v1"
$env:MESHMIND_LLM_MODEL = "your-model"
$env:MESHMIND_LLM_KEY = ""
.\run.ps1
```
然后您可以输入指令,例如“优先使用标称尺寸”或“保持
安装孔精确”。如果没有这些变量,重建将保持完全的
确定性和本地化。
## 测试
```
python -m uv sync
python -m uv run pytest
python -m uv run ruff check .
cd web
npm run build
```
测试从可编辑的 STEP 几何形状开始,将其细分为 STL,
丢弃历史记录,进行重建,并验证特征结构和结果
实体。测试用例包括阶梯轴、盲孔、混合直线/圆弧轮廓、
圆角板,以及一个盲孔与垂直孔的组合。
对于大型数据集评估,请参阅 [datasets/README.md](datasets/README.md) 以及
`tools/` 下的语料库工具。研究结果和分阶段架构
请见 [docs/RESEARCH_AND_ROADMAP.md](docs/RESEARCH_AND_ROADMAP.md)。
## 当前边界
特征方案仍然将一些盲孔、boss 和异常复杂的
边缘处理过渡表示为等效的布尔拉伸层,而不是
原始的命名设计操作。自由形态的装饰性曲面、装配体、
多实体重建、受损的扫描数据以及一般的非机械
mesh 仍然超出了已验证的范围。在进行加工之前,应始终对 `best_effort` 结果进行审查。
## 技术渊源
该实现是原创的,并使用了宽松/开放的 CAD 基础设施:
CadQuery/OCCT 用于 B-rep 构建和 STEP 导出,Trimesh/SciPy/Shapely 用于
几何分析,FastAPI/Three.js 用于本地应用程序。
为该架构提供启发
的相关工作包括
[CADFit](https://github.com/AutodeskAILab/CADFit),它展示了
在 CadQuery 程序上的渲染与对比搜索,以及
[CAD-Recode](https://github.com/filaPro/cad-recode),它研究了直接从
点云生成 CadQuery 的方法。CADFit 的代码库采用非商业许可,并包含专利提示,因此其实现并未被复制到本项目
中。
## 许可证
MIT。依赖项保留其各自的许可证。
标签:3D建模, CAD, CadQuery, STL转STEP, 云资产清单, 数据可视化, 特征树, 逆向工具, 逆向工程