CreoOtkPluging/Shell Optimization Solution.md
root 60ea4cef1c 实现完整的Shrinkwrap外壳导出功能 - 高性能优化版本
主要功能:
- 新增Shrinkwrap外壳导出API (/api/creo/shrinkwrap/shell)
- 使用OTK SurfaceSubsetInstructions实现真正的外壳导出
- 智能重名处理,自动生成唯一文件名
- 完全使用用户参数配置,无硬编码限制

性能优化:
- 移除耗时的装配体分析和差异计算
- 简化文件保存逻辑,统一保存到工作目录
- 精简API响应格式,专注核心导出功能
- 大幅提升导出速度和系统稳定性

技术突破:
- 解决Windows API宏冲突问题 (GetCurrentDirectory)
- 实现SurfaceSubset vs MergedSolid性能差异优化
- 建立稳定的跨线程OTK操作机制
- 支持装配体和零件的统一外壳导出

文件变更:
+ ShrinkwrapManager.h/cpp - 核心Shrinkwrap功能实现
+ ShellExportHandler.h/cpp - HTTP API处理逻辑
* MFCCreoDll.cpp - 集成新的消息处理和路由
* CLAUDE.md - 更新项目文档

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-02 16:21:03 +08:00

8.7 KiB
Raw Blame History

在 Creo 5 实现“只保留装配外壳、剔除内部”的完整方案(不含代码)。我把 GUI 操作、参数取值、产物管理、验证与批处理、以及二次开发OTKJ-Link落地步骤都拆开写清楚尽量覆盖坑点与细节。


0. 目标与产物约定

  • 目标:从一个复杂装配生成一个“仅含外表面”的轻量模型,用于快速打开与尺寸测量;内部零件全部被忽略移除。
  • 产物(建议二选一)
    1. 独立外壳零件(.prt与原装配解耦适合下游共享、测量与仿真前置。
    2. 装配内的 Envelope 简化表示:与原装配保持关联,装配更新后外壳可随动。

1. 推荐主线ShrinkwrapOuter shell生成独立外壳零件

1.1 GUI 操作步骤Creo 5

  1. 打开顶层装配(建议在 Master Simp Rep 下)。
  2. File → Save As → Save a CopyType 选择 Shrinkwrap。
  3. 在 Shrinkwrap 对话框中设置:
    • Collection method选 Outer shell关键只采集装配外表面内部自动忽略
    • Quality level建议 79110越高越细外观准确性与文件大小时间平衡
    • Fill holes Gap control
      • 若希望保留通孔、开窗等细节以便测量,关闭 Fill holes
      • 若要形成更“紧”的外壳,开启 Fill holes 并设合适 Max gap例如 0.51.0 mm
    • Ignore small faces Chord height
      • 开启 Ignore small faces阈值建议取关键尺寸的 0.10.5%(避免小倒角小标志导致外壳噪声);
      • Chord height弦高控制三角化误差0.050.2 mm 视模型尺度而定。
    • Output优先选 SolidSurface geometry而非纯 Facet便于后续测量与布尔运算。
  4. 命名:AsmName_SW_OS_Q8_Gap1.prt 一类的可读命名(含方法与关键参数)。
  5. 生成后自动打开外壳零件,保存。

备注Outer shell 的判断在内核里处理,不依赖视角;相比“自研判定外露面”更稳健。

1.2 外壳零件质量与可用性优化

  • 文件瘦身:若外观面过密,可适度降低 Quality 或放宽 Chord height再次导出比对外观差异。
  • 边角锯齿:提高 Quality 或降低 Chord height必要时对外壳零件做少量 SmoothHeal。
  • 测量稳定性:确保输出为 实体或封闭曲面。若为 Quilt可用 SolidifyThicken 封体。

1.3 测量建议

  • 外形尺寸:直接在外壳零件中用 Measure边面基准测量对大模型可用 Section 截面测量。
  • 内腔近似尺寸(若已填孔形成封闭外壳):用 Mass Properties 读体积;或用 OffsetSection 制作参考几何后测量。

2. 关联更新方案Envelope简化表示

2.1 适用场景

  • 需要随装配设计变更而更新“外壳视图”,又不想每次手工导出 Shrinkwrap。

2.2 GUI 步骤Creo 5

  1. 在顶层装配打开 View Manager → Simp Rep。
  2. 新建一个 Envelope 类型的简化表示(或使用 Default Envelope
  3. 在 Envelope 设置中选择基于 ShrinkwrapOuter shell 的规则生成外壳表示(与 1.1 的参数一致或略放宽)。
  4. 命名与管理:ENV_OS_Q7ENV_FAST 等,便于在总装下游装配中直接切换加载。

2.3 使用与维护

  • 在需要快速打开或测量时,切换到 Envelope simp rep 加载;
  • 装配更新后,更新 Envelope 以同步外壳;必要时建立 Update note 流程 防止遗漏。

3. 二次开发OTK J-Link无代码落地要点

需求:批量对多套装配生成外壳;或一键生成外壳并存放到统一位置;或在 PDM 动作里挂钩。

3.1 配置权限

  • 许可:确保有 Creo TOOLKITOTK 的开发许可;
  • 版本匹配:开发环境与 Creo 5 版本匹配(头文件与库一致);
  • 数据访问:若通过 Windchill工管系统确认签出签入策略避免生成失败或卡权限

3.2 运行时输入输出设计

  • 输入顶层装配文件路径、Simp Rep默认 Master、Shrinkwrap 参数(方法=Outer shell、质量、孔洞、弦高、忽略小面阈值、输出类型
  • 输出:外壳零件保存路径、命名规范、版本控制策略(例如加日期参数摘要)。
  • 日志:记录源装配名、面数体积、生成时间、参数集、失败原因码(空装配、拓扑自交等)。

3.3 参数集(建议预设三档)

  • FastQ=5、Chord=0.20.3、Ignore small faces=开阈值偏大、Fill holes=关;用于大批量初筛浏览。
  • BalancedQ=78、Chord=0.1、Ignore small faces=开中等阈值、Fill holes=按需;用于常规测量。
  • TightQ=910、Chord=0.05、Ignore small faces=关或小阈值、Fill holes=按需;用于高精度测量对外交付。

3.4 错误处理与回退

  • 组件缺失家族表未实例化:先触发 RegenerateResolve失败则跳过并记录。
  • 几何不闭合Heal 失败:降阶为 Surface 外壳 输出并提示需要手修;或自动放宽 ChordGap 后重试一次。
  • 内存占用高超时:对超大装配自动切至 Fast 档;或先对源装配应用一个临时 Rule-based Simp Rep如按体积阈值剔除小紧固件再做 Shrinkwrap。

4. 备选与增强

4.1 规则简化(可作为 Shrinkwrap 前置加速)

  • 在 View Manager → Simp Rep 新建 Rule-based 表示:
    • Exclude 体积质量尺寸小于阈值的组件(大量螺钉、垫片先剔除,可显著提速 Shrinkwrap
    • Exclude 指定层(如电气标识层)或指定类型(弹簧、柔性件)。
  • 在该 Simp Rep 下再执行 Shrinkwrap Outer shell步骤同 1.1)。

4.2 结果校核(强烈建议纳入流程)

  • 外形偏差对比:将外壳与原装配叠合,做 Global Interference Clearance 或 Compare Geometry抽查 35 条关键尺寸偏差(目标 ≤ 0.2 mm 或依项目设限)。
  • 质量属性:若外壳作为近似质量模型使用,校核质量与体积差异阈值(例如 ≤ 2%)。
  • 开孔保留性:若测量依赖孔窗口,抽检是否被 Fill holes 意外封闭。

4.3 命名与配置管理

  • 统一命名模版:项目_装配_SW_OS_QChordGap_日期.prt
  • 在模型参数中写入:SW_METHOD=OuterShell, SW_QUALITY=8, SW_FILL_HOLES=No, SW_CHORD=0.10 等,便于追溯;
  • 若走 PDM定义外壳零件的 生命周期与可见性(只读、对外可分享)。

5. 典型问题与处理建议FAQ

  • 外壳看起来“破面漏面”
    • 提高 Quality 或减小 Chord height
    • 关闭 Ignore small faces 或调小阈值;
    • 输出 Surface 后用 Heal Geometry 尝试修复,再 Solidify。
  • 文件仍然很大生成缓慢
    • 先用 Rule-based Simp Rep 排除小件再做 Shrinkwrap
    • 减小 Quality增大 Chord或关闭高代价选项如高级填孔
    • 分层执行:对大子装先各自 Shrinkwrap再在顶层对这些外壳做二次 Shrinkwrap。
  • 关键小特征被抹平,测不到
    • 关掉 Ignore small faces 或降低其阈值;
    • 提高 Quality 降低 Chord
    • 对关键区域单独做 Local Refine先对关键子装独立 Shrinkwrap再装配上来

6. 一页式落地清单(可直接照此执行)

  1. 选择产物:独立外壳零件(默认) Envelope 简化表示(需关联)。
  2. (可选)前置规则简化:排除小件与无关层,加速 Shrinkwrap。
  3. Shrinkwrap 参数:
    • Method=Outer shellQuality=79Chord=0.050.15Ignore small faces=开阈值合理Fill holes=按需。
    • Output=SolidSurface geometry。
  4. 命名与保存:采用统一命名与参数写入;入库或归档。
  5. 校核:抽检 35 条关键外形尺寸;检查孔窗口保留性;必要时微调参数重生。
  6. 测量分发:在外壳零件中测量;对外提供该外壳模型以减少泄密与体量。
  7. (可选)自动化:准备三档参数集,批处理顶层装配与重点子装;记录日志。

结论

  • 在 Creo 5用 ShrinkwrapOuter shell 就能稳定地“只保留外壳、删除内部”;若要关联更新,用 Envelope 简化表示。
  • 关键在于 Outer shell + 合理的 QualityChordFillIgnore small faces 参数组合,并配合 规则简化与结果校核。
  • 若需要规模化与一致性,按第 3 节的无代码要点完成 OTKJ-Link 的批处理与参数固化即可。

如你愿意,我可以把以上步骤整理成一张操作卡(流程图 + 参数建议表),便于团队统一执行。