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

7.6 KiB
Raw Blame History

分模算法改进总结

概述

本次改进实现了更合理的分模算法,使用传统几何方法计算分型面和分型线,同时预留了 AI 模型介入的接口。

主要改进

1. 分型面检测优化

改进前

  • 固定使用 Z 方向作为分型方向
  • 分型面总是水平面(XY 平面)
  • 不考虑产品实际几何特征

改进后

实现三级检测策略:

def _detect_parting_surface(self, shape, analysis):
    """
    优先级:
    1. AI 模型检测(如果已设置)
    2. 基于法向量分析的几何方法
    3. 简化方法(基于边界框,回退方案)
    """

法向量分析 (_analyze_face_normals):

  • 统计所有面的法向量
  • 计算平均法向量作为最优分型方向
  • 自动适应产品几何特征

代码位置: mold_generator.py:637-684

2. 真实分型线计算

改进前

  • 使用简化矩形(4 个点)
  • 不贴合产品实际轮廓

改进后

使用布尔运算求交线:

def _calculate_parting_line(self, shape, parting_surface):
    """
    使用 BRepAlgoAPI_Section 计算产品与分型面的真实交线
    - 提取交线(边)
    - 沿边采样点(至少 10 个点)
    - 返回精确的分型线路径
    """

代码位置: mold_generator.py:706-758

3. AI 模型接口预留

接口设计

添加了 AI 模型集成方法:

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

集成方式

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

5. 分型线长度精确计算

改进前

def _calculate_parting_line_length(self, parting_line: List) -> float:
    return 250.0  # mm  # 固定值

改进后

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

新增文件

1. src/core/ai_mold_assistant.py

AI 模型接口示例类:

  • AIPartingSurfaceDetector - 分型面检测器
  • AIDraftAnalyzer - 拔模分析器
  • AICavityLayoutOptimizer - 型腔布局优化器

2. scripts/test_mold_splitting.py

完整的分模算法测试脚本:

  • 测试简单长方体分模
  • 测试 STEP 文件分模
  • 测试 AI 模型接口
  • 测试分型线计算算法

3. scripts/simple_test.py

简化的测试脚本(用于快速验证)

使用示例

基本使用(几何方法)

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 辅助

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)

技术细节

法向量分析算法

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 - 简化测试脚本

新增导入

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 接口的设计使得未来可以轻松集成深度学习模型,提升分模智能化水平。