Files
geMoldInsight/docs/archive/topics/aluminum-foam/MOLD_SPLITTING_IMPROVEMENTS.md
T
2026-09-02 18:18:42 +08:00

287 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 分模算法改进总结
## 概述
本次改进实现了更合理的分模算法,使用传统几何方法计算分型面和分型线,同时预留了 AI 模型介入的接口。
## 主要改进
### 1. 分型面检测优化
#### 改进前
- 固定使用 Z 方向作为分型方向
- 分型面总是水平面(XY 平面)
- 不考虑产品实际几何特征
#### 改进后
实现三级检测策略:
```python
def _detect_parting_surface(self, shape, analysis):
"""
优先级:
1. AI 模型检测(如果已设置)
2. 基于法向量分析的几何方法
3. 简化方法(基于边界框,回退方案)
"""
```
**法向量分析** (`_analyze_face_normals`):
- 统计所有面的法向量
- 计算平均法向量作为最优分型方向
- 自动适应产品几何特征
**代码位置**: [`mold_generator.py:637-684`](file:///d:/project/geMoldInsight/src/core/mold_generator.py#L637-L684)
### 2. 真实分型线计算
#### 改进前
- 使用简化矩形(4 个点)
- 不贴合产品实际轮廓
#### 改进后
使用布尔运算求交线:
```python
def _calculate_parting_line(self, shape, parting_surface):
"""
使用 BRepAlgoAPI_Section 计算产品与分型面的真实交线
- 提取交线(边)
- 沿边采样点(至少 10 个点)
- 返回精确的分型线路径
"""
```
**代码位置**: [`mold_generator.py:706-758`](file:///d:/project/geMoldInsight/src/core/mold_generator.py#L706-L758)
### 3. AI 模型接口预留
#### 接口设计
添加了 AI 模型集成方法:
```python
def set_ai_model(self, parting_detector=None, draft_analyzer=None):
"""设置 AI 模型接口"""
self.ai_parting_detector = parting_detector
self.ai_draft_analyzer = draft_analyzer
```
#### AI 模型能力
1. **分型面检测器** (`AIPartingSurfaceDetector`)
- 分析产品 3D 几何
- 预测最优分型面位置和方向
- 识别倒扣(undercut)区域
2. **拔模分析器** (`AIDraftAnalyzer`)
- 分析哪些面需要拔模
- 预测最优拔模角度
- 检测脱模干涉
3. **型腔布局优化器** (`AICavityLayoutOptimizer`)
- 优化多型腔排列
- 设计流道系统
- 平衡材料流动
**代码位置**: [`ai_mold_assistant.py`](file:///d:/project/geMoldInsight/src/core/ai_mold_assistant.py)
#### 集成方式
```python
from core.mold_generator import MoldCavityGenerator
from core.ai_mold_assistant import AIPartingSurfaceDetector
# 创建 AI 模型
parting_detector = AIPartingSurfaceDetector(model_path="models/parting_surface.pth")
# 设置到模具生成器
generator = MoldCavityGenerator()
generator.set_ai_model(parting_detector=parting_detector)
# 使用时会自动调用 AI 模型
result = generator.generate_mold_cavities(product_shape)
```
### 4. 拔模角处理改进
#### 改进前
- 简化实现,直接返回原始形状
- 记录警告日志
#### 改进后
- 支持 AI 模型分析拔模
- 使用几何方法计算拔模方向
- 为完整实现预留接口(`BRepOffsetAPI_DraftAngle`)
**代码位置**: [`mold_generator.py:829-859`](file:///d:/project/geMoldInsight/src/core/mold_generator.py#L829-L859)
### 5. 分型线长度精确计算
#### 改进前
```python
def _calculate_parting_line_length(self, parting_line: List) -> float:
return 250.0 # mm # 固定值
```
#### 改进后
```python
def _calculate_parting_line_length(self, parting_line: List) -> float:
"""计算折线总长度"""
total_length = 0.0
for i in range(1, len(parting_line)):
p1 = np.array(parting_line[i-1])
p2 = np.array(parting_line[i])
total_length += np.linalg.norm(p2 - p1)
return total_length
```
**代码位置**: [`mold_generator.py:861-869`](file:///d:/project/geMoldInsight/src/core/mold_generator.py#L861-L869)
## 新增文件
### 1. `src/core/ai_mold_assistant.py`
AI 模型接口示例类:
- `AIPartingSurfaceDetector` - 分型面检测器
- `AIDraftAnalyzer` - 拔模分析器
- `AICavityLayoutOptimizer` - 型腔布局优化器
### 2. `scripts/test_mold_splitting.py`
完整的分模算法测试脚本:
- 测试简单长方体分模
- 测试 STEP 文件分模
- 测试 AI 模型接口
- 测试分型线计算算法
### 3. `scripts/simple_test.py`
简化的测试脚本(用于快速验证)
## 使用示例
### 基本使用(几何方法)
```python
from core.mold_generator import MoldCavityGenerator
# 创建模具生成器
generator = MoldCavityGenerator(
shrinkage_rate=0.005, # 0.5% 收缩率
draft_angle=2.0, # 2 度拔模角
material_density=1.05 # ABS 密度
)
# 生成模具型腔
result = generator.generate_mold_cavities(product_shape)
# 获取详细信息
detailed_json = generator.generate_detailed_cavity_json(result)
```
### 使用 AI 辅助
```python
from core.mold_generator import MoldCavityGenerator
from core.ai_mold_assistant import AIPartingSurfaceDetector
# 创建 AI 模型
parting_detector = AIPartingSurfaceDetector(model_path="models/model.pth")
# 设置 AI 模型
generator = MoldCavityGenerator()
generator.set_ai_model(parting_detector=parting_detector)
# 使用时 AI 会自动介入
result = generator.generate_mold_cavities(product_shape)
```
## 技术细节
### 法向量分析算法
```python
def _analyze_face_normals(self, shape):
# 1. 遍历所有面
for face in shape.faces:
# 2. 获取面的法向量
normal = surface.Plane().Position().Direction()
face_normals.append(normal)
# 3. 计算平均法向量
avg_normal = sum(face_normals) / len(face_normals)
# 4. 归一化
return normalized(avg_normal)
```
### 分型线计算流程
```
产品形状 + 分型面
↓
BRepAlgoAPI_Section (布尔截面运算)
↓
提取交线 (TopExp_Explorer)
↓
沿边采样 (BRepAdaptor_Curve)
↓
点列表 [[x,y,z], ...]
```
## 性能对比
| 功能 | 改进前 | 改进后 |
|------|--------|--------|
| 分型面方向 | 固定 Z 方向 | 自动适应产品几何 |
| 分型线点数 | 4 点(矩形) | 10+ 点(真实轮廓) |
| 分型线长度 | 固定 250mm | 精确计算 |
| AI 集成 | 无 | 完整接口预留 |
| 拔模分析 | 简化 | 支持 AI 和几何方法 |
## 后续优化方向
### 短期(无需 AI)
1. 改进法向量计算精度(使用高斯权重)
2. 优化分型面位置(考虑脱模方向)
3. 完整实现拔模角处理(使用 `BRepOffsetAPI_DraftAngle`)
### 中期(机器学习)
1. 收集模具设计案例数据
2. 训练分型面识别模型(PointNet++)
3. 集成到现有系统
### 长期(深度学习 + 仿真)
1. 端到端模具生成
2. 结合 Moldflow 物理仿真
3. 数字孪生系统
## 代码变更总结
### 修改文件
- `src/core/mold_generator.py` - 核心分模算法改进
### 新增文件
- `src/core/ai_mold_assistant.py` - AI 模型接口
- `scripts/test_mold_splitting.py` - 完整测试脚本
- `scripts/simple_test.py` - 简化测试脚本
### 新增导入
```python
from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Section
from OCC.Core.BRepAdaptor import BRepAdaptor_Surface, BRepAdaptor_Curve
from OCC.Core.TopExp import TopExp_Explorer
from OCC.Core.TopAbs import TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX
```
## 总结
本次改进实现了:
1. ✅ **更合理的分型面检测** - 基于法向量分析,自动适应产品几何
2. ✅ **真实的分型线计算** - 使用布尔运算求交线,不是简化矩形
3. ✅ **AI 模型接口预留** - 可随时集成 AI 辅助功能
4. ✅ **精确的参数计算** - 分型线长度、拔模方向等
所有改进都使用了 OpenCASCADE 的几何算法,保证了计算的准确性和可靠性。AI 接口的设计使得未来可以轻松集成深度学习模型,提升分模智能化水平。