CreoOtkPluging/Creo技术方案总结.md

17 KiB
Raw Permalink Blame History

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 LayerIndexedDB、SQLite (在 Electron 中) 或本地文件用于缓存配置、模板、历史日志、结果快照。

2.3 数据流视图

  1. 用户在 UI 发起操作 →
  2. 前端构造 JSON 请求 → HTTP 客户端发送至 http://127.0.0.1:12345
  3. 插件通过 OTK 执行业务逻辑 →
  4. 插件返回标准化 JSONsuccess, 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 薄壳分析与削减决策中心

  • 展示 safeDeletionssuggestedDeletionspreserveList 三类结果,提供可视化标签(置信度、体积收益、风险因素)。
  • 支持按 confidencevolumeReductioncomponent_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 响应结构

{
  "success": true,
  "data": { ... },
  "error": null
}
  • success: 布尔值,标识操作是否成功。
  • data: 成功时包含有效载荷(模型信息、分析结果、执行统计等)。
  • error: 失败时包含错误描述;插件在部分接口中返回结构化错误(含分类、建议)。

4.3 关键接口示例

URL 方法 描述
/api/model/open POST 打开模型,支持 file_pathdirname + 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::GetMassPropertypfcSolid::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_deletionsrisky_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 工程师提供高可用、高可观测性的生产力工具。