主要特性: - 新接口 /api/analysis/hierarchy-statistics 统计每个层级的组件数量 - 层级0固定为1(根装配体),其他层级统计实际组件数量 - 自动移除值为0的空层级,优化返回数据 - 支持装配体和零件双模式,零件返回单层级结果 - 完善的异常处理和错误信息 技术实现: - 新增 HierarchyStatisticsAnalyzer 类处理层级统计逻辑 - 修改 CreoManager.h 暴露必要的公共接口 - 递归遍历装配体结构,正确统计各层级组件数量 - 所有注释改为英文,避免UTF-8编码冲突 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
5.5 KiB
5.5 KiB
CLAUDE.md
项目架构
MFC动态链接库(DLL)项目,作为Creo CAD软件插件运行,文档在项目文件夹otk_cpp_doc目录下。
技术栈:
- MFC框架 + OTK/ProToolkit + Windows Socket + WebSocket
核心功能:
- HTTP服务器(端口12345),提供RESTful API
- 跨线程OTK调用,定时器机制处理主线程操作
- 支持跨主机部署
已实现功能模块
1. 基础服务
- HTTP服务器 - Windows Socket实现,路由注册,超时处理
- Creo状态检测 - 连接状态、模型状态实时检测
- 模型生命周期 - 打开/关闭/保存模型
2. 分析功能
- 层级分析 - 装配体结构分析,支持target_level参数按需返回指定层级
- 层级统计 - 统计装配体每个层级的组件数量,返回层级分布统计
- 薄壳化分析 - 基于几何边界的特征删除建议
- 几何复杂度分析 - 多维度复杂度评估和排序
3. 操作功能
- STEP导出 - 装配体和零件导出,支持多种参数配置
- Shrinkwrap导出 - 外壳导出,智能重名处理
- 层级删除 - 按层级安全删除组件,使用SuppressFeatures
- 路径删除 - 按组件路径批量删除
4. 搜索功能
- 模型搜索 - 零件和装配体名称模糊匹配,支持三种匹配模式
- 层级路径显示 - 返回完整的模型树层级路径
- 去重算法 - 自动去除重复结果,保留最完整路径
核心API接口
状态查询
GET /api/status/creo # Creo连接状态
GET /api/status/model # 当前模型状态
模型操作
POST /api/model/open # 打开模型
POST /api/model/close # 关闭模型
POST /api/model/save # 保存模型
POST /api/export/model # 导出STEP
分析功能
POST /api/creo/analysis/hierarchy # 层级分析
POST /api/analysis/hierarchy-statistics # 层级统计
POST /api/analysis/shell-analysis # 薄壳化分析
POST /api/analysis/geometry-complexity # 几何复杂度分析
搜索功能
POST /api/search/models # 模型名称模糊搜索
删除操作
POST /api/creo/hierarchy/delete # 层级删除
POST /api/creo/component/delete-by-path # 路径删除
导出操作
POST /api/creo/shrinkwrap/shell # Shrinkwrap导出(支持动态超时)
关键技术特性
无锁线程通信
- 完全避免C++标准库mutex,使用原子操作和volatile指针
- MessageItem结构统一处理HTTP请求
- 50ms间隔轮询,平衡响应速度和CPU占用
层级分析优化
- target_level参数: 支持返回指定单一层级,解决前端大数据卡顿
- SOTA算法: 基于ListFeaturesByType的高效遍历
- 向后兼容: target_level=-1或未指定时返回所有层级
安全删除策略
- 使用SuppressFeatures替代DeleteFeatures避免装配体结构破坏
- 按装配体分组抑制,解决上下文匹配问题
- 保持特征引用关系完整
Shrinkwrap优化
- 动态超时控制: 支持timeout_seconds参数(10-300秒范围)
- 细分异常处理: 区分OTK工具包错误、参数错误、内存不足等
- 向后兼容: 新参数可选,不影响现有API调用
- 详细错误信息: 为不同异常类型提供具体错误描述和解决建议
几何复杂度分析优化
- 装配体去重机制: 使用std::set跟踪已处理零件,避免重复分析相同零件
- 基于文件名去重: 使用模型文件名作为唯一标识符进行重复检测
- 递归装配体支持: 正确处理多层级装配体中的重复零件
层级统计分析
- 层级计数: 统计装配体每个层级的组件数量
- 自动去重: 移除值为0的空层级,优化返回数据
- 递归统计: 正确处理多层级嵌套装配体
- 双模支持: 装配体返回层级统计,零件返回单层级结果
模型搜索优化
- 多种匹配模式: 支持prefix、contains、fuzzy三种匹配算法
- 完整层级路径: 从根装配体构建完整的模型树路径显示
- 智能去重算法: 自动去除重复结果,保留最长层级路径
- 递归搜索: 支持从根装配体开始的完整层级遍历
- 向后兼容: 不影响现有搜索功能,支持多种搜索范围
构建环境
- IDE: Visual Studio 2022 (v143工具集)
- 配置: Debug|x64
- 依赖: Creo 5.0.0.0 OTK库
- 目标: Windows 7+运行环境
开发原则
- 模块化开发 - 独立测试,逐步集成
- 向后兼容 - 保持现有API稳定
- 最小修改 - 优先扩展,避免破坏性变更
- 错误处理 - 完善异常处理,确保服务稳定
- 性能优先 - 减少数据传输,提升前端体验
已解决的关键问题
- HTTP线程mutex崩溃 → 无锁MessageItem机制
- target_level数组越界 → 安全边界检查
- DeleteFeatures崩溃 → SuppressFeatures策略
- 字符编码冲突 → UTF-8 BOM标准化
- Socket超时阻塞 → 30秒超时机制
- Shrinkwrap复杂模型500错误 → 动态超时和详细异常处理
- 几何复杂度分析重复零件 → 装配体遍历去重机制
- 模型搜索重复结果问题 → 智能去重算法保留最完整路径
- 搜索结果缺少层级路径 → 从根装配体构建完整模型树路径
- 层级统计接口编码问题 → 所有注释改为英文,避免UTF-8编码冲突
下一步计划
核心分析和操作功能已完备,建议实现WebSocket服务支持长操作和实时通信。
- 所有注释必须用英文