CreoOtkPluging/Creo技术方案总结.md

336 lines
17 KiB
Markdown
Raw Permalink 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 前端技术路线与算法体系总结
## 摘要
本文档面向计划构建与 MFCCreoDll 插件协同工作的前端工程,系统梳理现有 C++/MFC 插件所提供的几何分析与模型管理能力,说明其依托的 PTC Creo Parametric Toolkit (OTK C++) API以及前端接入时需要遵循的通信约定、架构设计、算法协同与性能优化策略。文档重点扩展薄壳分析与 Shrinkwrap 外壳导出的几何原理、数值指标与 API 依赖,提供数据结构、流程图示与复杂度分析,为后续实现桌面端或 Web 前端提供完整的工程蓝图。
## 1. 引言
### 1.1 背景与动机
- **插件职责**MFCCreoDll 通过内置 `HttpServer` 将 Creo OTK 的装配遍历、几何分析、批量操作等能力封装为 HTTP JSON 接口,面向企业内部自动化建模与模型瘦身场景。
- **前端缺口**:仓库未包含任何前端 UI无 JavaScript/TypeScript/HTML/CSS 及构建脚本),现有用户依赖命令行或脚本调用,缺乏可视化入口和交互式分析能力。
- **建设目标**搭建一套专业化前端工作台实现模型状态可视化、薄壳削减决策、Shrinkwrap 导出监控、批量操作编排与日志追踪,提升 Creo 工程师的决策效率。
### 1.2 设计原则
1. **分层解耦**:前端仅通过 HTTP/JSON 与插件交互,不直接依赖 OTK SDK业务逻辑与呈现分离便于扩展。
2. **可观测性**所有长耗时任务薄壳分析、Shrinkwrap、批量操作需暴露进度、耗时、错误分类便于运维监控。
3. **可组合性**:提供参数模板、操作剧本与结果数据的导入导出,支持在 CI/CD 或 PLM 流程中复用。
4. **安全性**:在远程部署场景下需支持 TLS、Token 校验与审计日志,避免 Creo 能力被滥用。
## 2. 技术架构蓝图
### 2.1 系统角色
| 角色 | 描述 | 关键职责 |
| --- | --- | --- |
| **Creo 插件 (C++)** | 运行于 Creo Session 的 DLL负责与 OTK C++ 交互 | 处理模型操作、几何分析、文件导出、批量执行;输出 JSON |
| **前端应用** | 浏览器或 Electron 桌面应用 | 展示数据、收集用户输入、调度任务、渲染图表与报告 |
| **本地 HTTP 服务** | 插件内置 `HttpServer` | 提供 REST 风格接口,端口默认 12345支持 CORS |
### 2.2 前端分层结构
1. **Presentation Layer**:基于 React/Vue 等组件库构建视图,包含仪表盘、图表、树状组件、文件选择器。
2. **Application Layer**:管理路由、权限、国际化、主题,以及业务逻辑 orchestrator。
3. **Data Layer**:封装 API 客户端Axios/Fetch实现请求队列、超时、重试、缓存与统一错误处理。
4. **State Management Layer**:使用 Redux Toolkit、Zustand 或 Pinia 保存 Creo 会话信息、当前模型上下文、分析结果、任务队列。
5. **Computation Layer**:通过 Web Worker / Rust WASM 实现本地重计算(排序、聚合、差异分析),减少主线程阻塞。
6. **Persistence Layer**IndexedDB、SQLite (在 Electron 中) 或本地文件用于缓存配置、模板、历史日志、结果快照。
### 2.3 数据流视图
1. 用户在 UI 发起操作 →
2. 前端构造 JSON 请求 → HTTP 客户端发送至 `http://127.0.0.1:12345`
3. 插件通过 OTK 执行业务逻辑 →
4. 插件返回标准化 JSON`success`, `data`, `error`)→
5. 前端解析并更新状态树 →
6. 触发 UI 渲染更新 / 日志记录 / 通知提示。
## 3. 功能模块设计
### 3.1 会话监控中心
- 实时展示 Creo 连接状态、版本号、当前工作目录 (`/api/status/creo`)。
- 记录最近 N 次 API 调用与耗时,支持过滤与导出。
- 提供 `Reconnect`/`Check Session` 按钮,触发 `/test` 接口用于诊断。
### 3.2 模型生命周期控制台
- **打开模型**:支持完整路径和 `dirname + filename` 两种输入形式,提供最近使用列表。
- **保存模型**:展示文件大小、保存耗时、成功提示;允许用户配置保存策略(自动备份等)。
- **关闭模型**:支持 `force_close` 参数,提示未保存修改。
### 3.3 几何分析工作台
- **复杂度分析**:对 `/api/analysis/geometry-complexity` 输出进行聚合展示热力图、TopN 列表、曲线趋势。
- **层级统计分析**:渲染层级数量、各层组件数、风险评分,并支持导出 CSV/Excel。
### 3.4 薄壳分析与削减决策中心
- 展示 `safeDeletions`、`suggestedDeletions`、`preserveList` 三类结果,提供可视化标签(置信度、体积收益、风险因素)。
- 支持按 `confidence`、`volumeReduction`、`component_type` 等条件筛选与排序。
- 提供策略模拟:选择候选集合后预估整体体积/文件大小/性能收益变化。
### 3.5 Shrinkwrap 外壳导出面板
- 提供参数表单(质量、弦高、填孔、小面过滤、忽略 Skeleton 等)与预设模板选择。
- 实时展示执行日志、导出文件路径、文件大小,并允许用户打开文件所在目录。
- 支持任务排队、超时重试与错误分类提示。
### 3.6 装配树与路径操作
- 树状/平铺视图展示组件层级,支持懒加载与虚拟滚动。
- 提供路径复制、按路径删除、子组件统计与风险提示。
- 结合层级分析结果,对高风险删除操作弹出确认/二次认证。
### 3.7 模型搜索与索引视图
- 支持关键字、类型、是否在会话、相似度阈值、组件/特征等多筛选条件。
- 采用命中高亮、标签分类、匹配理由展示(如命中名称/属性/路径)。
- 支持导出搜索结果、保存搜索条件模板。
### 3.8 批量操作编排平台
- 流程画布支持拖拽组合操作单元(打开、保存、导出、分析、任务脚本)。
- 执行时展示步骤进度、耗时、返回 JSON、错误信息支持暂停/继续/跳过。
- 支持剧本库、参数化模板、执行历史回放与日志导出。
## 4. 接口协议与数据契约
### 4.1 请求规范
- 所有接口使用 `application/json; charset=utf-8`
- 请求体大小默认限制 1 MB (`Config::MAX_REQUEST_SIZE`);前端需对大型任务参数进行压缩或拆分。
- CORS 头默认为 `Access-Control-Allow-Origin: *`,前端可在浏览器直接调用。
### 4.2 响应结构
```json
{
"success": true,
"data": { ... },
"error": null
}
```
- **success**: 布尔值,标识操作是否成功。
- **data**: 成功时包含有效载荷(模型信息、分析结果、执行统计等)。
- **error**: 失败时包含错误描述;插件在部分接口中返回结构化错误(含分类、建议)。
### 4.3 关键接口示例
| URL | 方法 | 描述 |
| --- | --- | --- |
| `/api/model/open` | POST | 打开模型,支持 `file_path``dirname` + `filename` |
| `/api/model/save` | POST | 保存当前模型,返回文件大小、保存耗时 |
| `/api/model/close` | POST | 关闭模型,支持 `force_close` |
| `/api/analysis/geometry-complexity` | POST | 几何复杂度分析 |
| `/api/analysis/shell-analysis` | POST | 薄壳分析 |
| `/api/creo/shrinkwrap/shell` | POST | Shrinkwrap 外壳导出 |
| `/api/creo/batch-operations` | POST | 批量操作执行 |
### 4.4 类型定义建议
- 使用 TypeScript `type`/`interface` 映射接口返回数据。可通过脚本解析头文件或 JSON 样例生成类型声明,确保编译期类型安全。
- 对复杂对象(如薄壳分析结果)建立细粒度类型,便于校验和测试。
## 5. 核心算法解析
### 5.1 薄壳分析算法体系
#### 5.1.1 几何数据采集
- 利用 `wfcWAssembly::ListDisplayedComponents` 获取装配组件列表。
- 调用 `pfcSolid::GetMassProperty`、`pfcSolid::GetOutline` 获取体积、包围盒等几何属性。
- 对细长组件使用 22 点采样(角点 8、面心 6、边心 12构建顶点集为 PCA 计算做准备。
#### 5.1.2 主方向与包围盒选择
1. 计算协方差矩阵 `Σ = (1/N) Σ (v_i - μ)(v_i - μ)^T`,在 OTK 中通过手工矩阵运算实现。
2. 求解特征值/特征向量,确定主轴 `e1, e2, e3`
3. 评估长宽比、表面积、体积,若满足:
- 长宽比 > `OBB_ASPECT_RATIO_THRESHOLD` (默认 4.0)
- 或表面积差值 < `OBB_SURFACE_TOL`
则使用 OBB否则采用 AABB
#### 5.1.3 多方向投影与网格离散
- 方向集合`D = {±X, ±Y, ±Z}`记作 6 个单位向量
- 96 × 96 网格离散化平面对每个网格单元记录最小深度值
- 对组件 `c`投影覆盖率计算公式
\[
\text{visibility}(c) = \frac{1}{|D|} \sum_{d \in D} \mathbb{I}\left( \frac{A_{c,d}}{A_{\text{total},d}} \geq \tau_d \right)
\]
其中 `A_{c,d}` 为组件在方向 `d` 的可见面积`τ_d = 0.001` (0.1%)。
#### 5.1.4 双阶段投票机制
- **阶段一**设置严格窗口 `δ_strict = 0.001 * diag(assembly)`要求 80% 方向可见识别高置信度外壳
- **阶段二**对剩余组件放宽窗口至 `max(0.002*diag, 0.15*median_thickness)`重复投影与判定补齐遗漏
#### 5.1.5 Leave-One-Out (LOO) 归因
1. 计算全局可见矩阵 `V_all`
2. 对组件 `c`构造 `V_{-c}`移除该组件比较差异
\[
\Delta V_c = \frac{\|V_all - V_{-c}\|_1}{\|V_all\|_1}
\]
3. `ΔV_c` 小于阈值的组件被判定为内部件
#### 5.1.6 光线追踪验证
- 从装配质心 `G` 向候选外壳组件中心发射射线调用 `pfcCreateSelectionEvaluator` / `pfcSelectionEvaluator::ComputeInterference` 检测遮挡
- 如果射线被其他组件阻挡降低其置信度或标记为内部组件
#### 5.1.7 置信度模型
- 综合指标
- 投影得票数 `votes`
- LOO 贡献度 `ΔV`
- 光线通过率 `ray_clear_ratio`
- 历史统计可选
- 置信度计算示例
\[
\text{confidence} = w_1 \cdot \frac{\text{votes}}{6} + w_2 \cdot (1 - \Delta V) + w_3 \cdot \text{ray\_clear\_ratio}
\]
默认 `w_1=0.5, w_2=0.3, w_3=0.2`结果分级为
| 置信度范围 | 标签 |
| --- | --- |
| 0.75 | 高置信度推荐删除 |
| 0.450.75 | 中置信度谨慎执行 |
| < 0.45 | 保留或人工检查 |
#### 5.1.8 前端可视化策略
- 为每个组件绘制卡片/表格行包含
- 可视化标签颜色/图标表示置信度等级
- 体积减少估计 (`volumeReduction`)
- 文件大小减少估计
- 风险因素列表外露面少”“与关键件相连”)
- 支持拖拽将组件加入待处理列表”,实时计算整体收益
### 5.2 Shrinkwrap 外壳导出算法
#### 5.2.1 调用流程
1. 获取当前模型 `session->GetCurrentModel()`判断类型是否为装配或零件
2. 生成目标名称
- `GenerateSafePartName` 清理特殊字符限制长度 31
- 检测冲突`session->GetModel`),必要时追加序号或时间戳。
3. 调用 `session->CreatePart(new_name)` 创建结果模型。
4. `pfcShrinkwrapSurfaceSubsetInstructions::Create` 构造参数:
- `SetQuality(quality)`
- `SetAutoHoleFilling(fill_holes)`
- `SetIgnoreSmallSurfaces(ignore_small_surfaces)`
- `SetSmallSurfPercentage(small_surface_percentage)`
- `SetIgnoreQuilts(ignore_quilts)`
- `SetIgnoreSkeleton(ignore_skeleton)`
- `SetAssignMassProperties(assign_mass_properties)`
5. 执行 `source_solid->ExportShrinkwrap(instructions)`
6. 保存文件:
- 获取当前工作目录 `session->GetCurrentDirectory()`
- 检查文件存在性 (`_access`);若存在,则调用 `GenerateUniqueFilePath` 自动重命名。
- 执行 `model->Save()`,使用 `GetFileSizeEx` 计算大小。
#### 5.2.2 参数预设
| 预设 | quality | chord_height | fill_holes | ignore_small_surfaces | small_surface_percentage | 输出类型 |
| --- | --- | --- | --- | --- | --- | --- |
| fast | 3 | 0.3 | false | false | 0.0 | `solid_surface` |
| balanced | 5 | 0.15 | false | false | 0.0 | `solid_surface` |
| tight | 5 | 0.1 | false | false | 0.0 | `solid_surface` |
- 前端需在 UI 中展示每个预设的特点、适用场景与注意事项。
#### 5.2.3 异常分类与恢复
| 异常类型 | 触发条件 | 前端处理建议 |
| --- | --- | --- |
| `Toolkit Error` | OTK 底层故障或模型损坏 | 提示“请检查模型完整性或重启 Creo” |
| `BadArgument` | 参数越界(如质量 > 10 | 高亮错误字段,提供建议范围 |
| `OutOfMemory` | 内存不足 | 建议降低质量或关闭其他程序 |
| `Timeout` | 超过 `timeout_seconds` | 提供重试、增加超时或后台执行选项 |
#### 5.2.4 前端监控指标
- 任务阶段耗时:数据准备、几何计算、文件写入(可按 30%/60%/10% 显示)
- 成品文件大小、路径、生成时间
- 参数回显与导出日志(含 JSON 原始请求与响应)
### 5.3 几何复杂度与层级分析
#### 5.3.1 指标体系
- **复杂度分值**:由 `GeometryAnalyzer::AnalyzeGeometryComplexity` 根据面数、曲率、特征数量、体积等计算。
- **层级统计**`HierarchyStatisticsAnalyzer` 输出各层组件数量、深度、类型分布。
- **风险推荐**`HierarchyAnalysis` 给出 `safe_deletions``risky_deletions`,附带原因、风险因素、置信度。
#### 5.3.2 前端推导
- 对复杂度分值按照分位数划分等级(如 P75/P90/P95渲染热力图。
- 计算层级树的深度 `depth = max(level)`,节点数量 `N`,平均分支因子 `b = N / depth`
- 对风险推荐进行文本解析,生成可视化标签,如“关键约束”“连接紧固件”“支撑结构”。
## 6. 工程实践
### 6.1 性能优化
- **虚拟化渲染**:对大规模列表/树使用 react-window/react-virtualized。
- **请求合并**:对频繁调用的 API 实现请求合并/去重;可采用 `AbortController` 取消过期请求。
- **缓存策略**:对静态数据(如组件字典、部件类型映射)使用 IndexedDB对分析结果采取版本化缓存便于比较。
- **Web Worker**:在 Worker 中执行排序、差异分析、统计聚合,避免主线程卡顿。
### 6.2 安全与权限
- 在桌面环境下可绑定 Windows AD 账号或企业 SSO对敏感操作引入角色权限如只读/分析/执行)。
- 提供操作日志签名或 Hash 校验,确保操作记录不可篡改。
- 若开放远程访问部署反向代理Nginx实现 TLS、鉴权头注入、防刷限制。
### 6.3 测试策略
- **单元测试**:对数据解析、类型映射、排序筛选、状态管理等进行 Jest/Vitest 测试。
- **契约测试**:使用 Pact/JSON Schema 验证接口契约,防止插件更新导致前端解析失败。
- **端到端测试**:结合 Cypress/Playwright模拟用户执行分析、导出、批量操作的完整流程。
- **性能基准**:对大模型数据(>10k 组件)进行性能压测,确保 UI 响应时间在 300ms 内。
## 7. 性能与资源评估
### 7.1 任務耗時基线(参考)
| 任务 | 平均耗时 (中等规模装配) | 影响因素 |
| --- | --- | --- |
| 薄壳分析 | 1235 s | 组件数量、几何复杂度、硬件配置 |
| Shrinkwrap | 520 s | 质量参数、弦高、模型拓扑 |
| 几何复杂度分析 | 38 s | 面数、特征数量 |
| 批量操作 (5 步) | 1025 s | 操作类型、每步耗时 |
- 前端需对 > 5 s 的任务提供进度反馈;> 30 s 的任务建议支持后台执行。
### 7.2 资源占用建议
- **内存**:保持前端单页内存占用 < 500 MB对大型数据采用分页与懒加载
- **CPU**将重计算任务排序批量差异移交 Worker主线程 CPU 使用率维持在 30% 以下
- **网络**单次请求体 < 1 MB前端可使用压缩/二进制传输 MessagePack优化传输
## 8. 结论与展望
MFCCreoDll 插件已将 Creo OTK 的核心几何处理能力以 HTTP JSON 形式开放为前端构建专业化的模型管理平台奠定基础本文档提出了分层架构设计主要功能模块关键算法流程与工程最佳实践特别对薄壳分析与 Shrinkwrap 外壳导出给出了数学原理参数体系与异常处理策略可指导前端团队快速落地高可靠高性能的解决方案
未来工作方向包括
1. **实时推送**激活仓库中的 `WebSocketServer` 模块与前端的事件总线集成实现任务进度与状态事件的实时推送
2. **三维可视化集成**通过 Three.js Cesium 引入轻量模型预览与薄壳分析结果联动高亮显示
3. **自动化脚本协同**提供 CLI/REST 混合模式允许 DevOps 流程直接调用前端定义的剧本实现无人值守的模型清理流水线
4. **智能化推荐**基于历史分析结果训练机器学习模型提高薄壳削减建议与批量操作排序的智能性
通过本技术路线前端团队能够在不直接依赖 OTK 的情况下充分发挥现有插件能力 Creo 工程师提供高可用高可观测性的生产力工具