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

147 lines
8.7 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.

在 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_Q7`、`ENV_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 的批处理与参数固化即可。
如你愿意,我可以把以上步骤整理成一张操作卡(流程图 + 参数建议表),便于团队统一执行。