新增薄壳化分析接口 POST /api/creo/analysis/shell,实现CAD模型内部特征识别和删除建议。 技术突破: - 使用OTK pfcOutline3D API实现真实几何包络盒计算 - 基于边界识别法构建外壳特征白名单 - 实现标准置信度计算和特征安全性评估算法 - 支持零件和装配体的完整薄壳化分析 - 完全移除假数据和模拟计算,实现纯几何分析 API功能: - 返回安全删除、建议删除、保留特征的完整分类 - 包含特征ID、名称、类型、置信度、体积减少预估 - 正确显示partFile和partPath信息(含扩展名) - 支持层级路径显示和文件信息追踪 已解决问题: - 修复特征名称格式(EXTRUDE_1等标准格式) - 修复路径显示问题(保留文件扩展名) - 解决编译错误(中文字符串问题) - 实现与层级分析接口一致的数据格式 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
16 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
项目架构
这是一个 MFC 动态链接库 (DLL) 项目,作为 Creo CAD 软件的插件运行。项目整合了以下技术栈:
- MFC框架: 微软基础类库,用于 Windows 应用程序开发
- OTK/ProToolkit: PTC Creo 的官方开发工具包,用于与 Creo 交互
- Windows Socket: 原生网络通信,替代第三方HTTP库
- WebSocket: 实时双向通信支持
当前功能
目前实现了基础的 HTTP 服务器,允许外部应用通过 HTTP 请求与 Creo 软件进行交互:
- HTTP 服务器监听端口 12345
- 提供
/show_message端点接收文本消息并在 Creo 中显示 - 使用定时器机制解决跨线程 OTK 调用问题
- 支持跨主机部署
项目升级计划 - Web API + WebSocket 架构
项目目标
实现Web前端通过API控制Creo进行模型分析、特征删除和格式导出的MVP系统。
接口设计
HTTP API (快速查询):
- GET /api/status/creo - 检测Creo运行状态
- GET /api/status/model - 检查模型加载状态
- GET /api/model/features - 获取特征列表
- POST /api/auth/login - 用户认证
WebSocket (长操作):
- load_model - 加载模型
- delete_features - 删除特征
- export_model - 导出模型
- analyze_structure - 分析结构
技术架构
Web前端 -> HTTP API (状态查询) -> Creo状态管理器
-> WebSocket (操作执行) -> Creo操作管理器 -> 实时日志推送
目标文件结构
MFCCreoDll/
├── src/
│ ├── core/ # 核心服务器管理
│ ├── http/ # HTTP API处理
│ ├── websocket/ # WebSocket服务
│ ├── creo/ # Creo操作封装
│ ├── utils/ # 工具类
│ └── auth/ # 认证管理
开发计划
- 第1周:基础框架 (HTTP改造 + WebSocket基础)
- 第2周:核心功能 (Creo集成 + 操作实现)
- 第3周:测试优化 (联调 + 性能优化)
关键特性
- 双端口服务:12345(HTTP) + 12346(WebSocket)
- 实时日志推送和进度反馈
- 大模型支持(>2GB)一次性加载
- 简单用户识别机制
- 跨主机部署支持
开发进度记录 - 模块化实现
✅ 已完成模块
模块1: 基础HTTP服务器 (完成)
功能: HTTP服务器框架,支持路由注册和请求处理 文件: HttpServer.h, HttpServer.cpp, Config.h 测试状态: ✅ 编译成功,功能测试通过 API端点:
/test- 服务器连通性测试/show_message?text=消息- 在Creo中显示消息
模块2: Creo状态检测 (完成)
功能: Creo连接状态和模型状态实时检测 文件: CreoManager.h, CreoManager.cpp 测试状态: ✅ 编译成功,功能测试通过,已优化增强 API端点:
/api/status/creo- Creo连接状态(包含版本、工作目录、会话ID)/api/status/model- 当前模型状态(包含名称、路径、修改状态等)
技术细节:
- 使用OTK API进行Creo交互
- 采用单例模式管理Creo会话
- 完善的异常处理机制
- 详细的状态信息返回
模块3: STEP导出功能 (完成)
功能: 支持将Creo模型导出为STEP格式 文件: CreoManager.h, CreoManager.cpp, MFCCreoDll.cpp 测试状态: ✅ 编译成功,功能测试通过,已解决崩溃问题 API端点:
POST /api/export/model- 模型导出接口
技术细节:
- 使用
pfcSTEPExportInstructions接口进行STEP导出 - 支持装配体和零件的导出
- 包含文件大小计算和时间戳功能
- 安全的JSON解析机制(避免正则表达式崩溃)
- 完善的错误处理和异常管理
API请求格式:
{
"software_type": "creo",
"format_type": "step",
"export_path": "D:\\model.stp",
"options": {
"geom_flags": "solids",
"advanced": false
}
}
API响应格式:
{
"success": true,
"data": {
"exportPath": "D:\\model.stp",
"fileSize": "15.2MB",
"format": "step",
"exportTime": "2024-01-15T10:30:00Z",
"software": "Creo Parametric",
"originalFile": "assembly.asm",
"details": {
"dirname": "D:\\",
"filename": "model.stp",
"creoson_response": {
"dirname": "D:\\",
"filename": "model.stp",
"full_path": "D:\\model.stp"
}
}
},
"error": null
}
模块4: 层级分析功能 (完成)
功能: 装配体层级结构分析,支持无限深度遍历 文件: CreoManager.h, CreoManager.cpp, MFCCreoDll.cpp 测试状态: ✅ 编译成功,已修复循环调用问题 API端点:
POST /api/creo/analysis/hierarchy- 装配体层级分析
技术细节:
- 使用SOTA算法基于ListFeaturesByType进行组件遍历
- 支持装配体和零件的完整层级分析
- 优化了API调用链,避免重复的LoadComponentModel和ListFeaturesByType调用
- 实现了组件信息提取、文件大小计算和删除安全评估
- 支持无层级限制的递归分析
API请求格式:
{
"software_type": "creo",
"project_name": "Assembly Analysis",
"max_depth": 0,
"include_geometry": false
}
API响应格式:
{
"success": true,
"message": "Hierarchy analysis completed",
"data": {
"project_name": "ASM0001.asm",
"total_levels": 9,
"total_components": 223,
"hierarchy": [
{
"level": 0,
"name": "Main Assembly",
"components": [
{
"id": "ASM0001.asm",
"name": "Asm0001",
"type": "assembly",
"level": 0,
"children_count": 5,
"path": "ASM0001.asm",
"file_size": "2.5MB",
"deletion_safety": "forbidden"
}
]
}
],
"deletion_recommendations": {
"safe_deletions": [],
"risky_deletions": []
}
},
"error": null
}
已解决的技术问题:
- 重复API调用优化 - 修复了LoadComponentModel和ListFeaturesByType的重复调用
- 递归调用优化 - 优化了组件加载流程,避免不必要的重复操作
- 内存管理改进 - 使用预加载模型参数传递,减少内存分配
模块5: 层级删除功能 (完成)
功能: 装配体层级组件删除,支持安全的组件移除 文件: CreoManager.h, CreoManager.cpp, MFCCreoDll.cpp 测试状态: ✅ 编译成功,功能测试通过,已解决崩溃问题 API端点:
POST /api/creo/hierarchy/delete- 层级组件删除接口
技术细节:
- 使用
SuppressFeatures替代DeleteFeatures实现安全删除 - 保持特征引用关系完整,避免装配体结构破坏
- 支持任意层级的组件删除,包括根层级组件
- 使用重生成指令确保模型状态一致性
- 完善的异常处理和错误恢复机制
API请求格式:
{
"software_type": "creo",
"project_name": "Assembly Delete",
"target_level": 2
}
API响应格式:
{
"success": true,
"message": "All components suppressed successfully (safer than deletion)",
"data": {
"original_levels": 5,
"target_level": 2,
"final_levels": 3,
"deleted_components": {
"level_2": [
"component1.prt",
"component2.asm"
]
},
"deletion_summary": {
"total_deleted": 15,
"successful": 15,
"failed": 0
}
},
"error": null
}
已解决的技术问题:
- Creo崩溃问题 - 使用SuppressFeatures替代DeleteFeatures避免引用丢失导致的崩溃
- 层级安全性 - 支持删除任意层级的组件,包括根层级的关键组件
- 引用完整性 - 抑制特征保持引用关系,避免外部依赖丢失
- 模型重生成 - 使用重生成指令确保删除后模型状态正确
- 异常处理 - 完善的错误处理机制,操作失败时提供详细信息
关键技术突破:
- 发现并解决了OTK DeleteFeatures在删除装配体核心组件时的崩溃问题
- 采用Suppression策略实现视觉删除效果,同时保持模型结构完整性
- 实现了从根层级到任意深度的安全组件删除
模块6: 薄壳化分析功能 (完成)
功能: CAD模型薄壳化分析,基于几何边界识别内部可删除特征 文件: CreoManager.h, CreoManager.cpp, MFCCreoDll.cpp 测试状态: ✅ 编译成功,功能测试通过,API格式已优化 API端点:
POST /api/creo/analysis/shell- 薄壳化分析接口
技术细节:
- 使用OTK
pfcOutline3DAPI进行真实几何包络盒计算 - 实现基于边界识别法的外壳特征白名单构建
- 支持零件和装配体的薄壳化分析
- 真实几何分析替代所有模拟数据和猜测逻辑
- 完善的置信度计算算法和特征安全性评估
API请求格式:
{
"software_type": "creo",
"project_name": "Shell Analysis",
"preserve_external_surfaces": true,
"analysis_mode": "aggressive"
}
API响应格式:
{
"success": true,
"message": "Shell analysis completed",
"data": {
"safeDeletions": [
{
"id": 123,
"name": "EXTRUDE_1",
"type": "EXTRUDE",
"reason": "Internal feature, safe for removal",
"confidence": 0.85,
"volumeReduction": 15,
"partFile": "part1.prt",
"partPath": "assembly.asm/part1.prt",
"componentType": "FEATURE"
}
],
"suggestedDeletions": [],
"preserveList": [],
"analysisParameters": {
"totalFeatures": 45,
"deletableFeatures": 12,
"preservedFeatures": 33,
"shellSurfaces": 8,
"internalSurfaces": 37
}
}
}
已解决的技术问题:
- 假数据问题 - 移除所有模拟包络盒数据,使用真实OTK API计算
- 几何分析 - 实现基于pfcOutline3D的真实边界识别算法
- 特征名称格式 - 生成"EXTRUDE_1"等标准格式名称
- 文件路径显示 - 正确显示partFile和partPath信息,包含文件扩展名
- 置信度算法 - 实现基于几何位置和特征类型的标准置信度计算
- 编译错误 - 修复中文字符串导致的编译问题
关键技术突破:
- 发现并实现了基于OTK几何API的真实薄壳化算法
- 解决了特征边界判定的核心技术难题
- 实现了无假数据、无猜测的纯几何分析方法
🔄 待实现模块(按优先级排序)
模块7: WebSocket服务 (高优先级)
目标: 实现双向实时通信,支持长时间操作 预计文件: WebSocketServer.h, WebSocketServer.cpp 主要功能:
- WebSocket服务器(端口12346)
- 实时日志推送
- 长操作进度反馈
- 客户端连接管理
模块8: Creo长操作接口 (中优先级)
目标: 实现模型加载、特征删除、多格式导出等操作 预计文件: ModelAnalyzer.h, ModelAnalyzer.cpp 主要功能:
- 模型文件加载操作
- 特征分析和删除
- 多格式导出(STL、IGES等)
- 操作进度监控
模块9: 日志系统 (低优先级)
目标: 统一的日志记录和错误追踪 预计文件: Logger.h, Logger.cpp 主要功能:
- 结构化日志输出
- 多级别日志支持
- 文件和控制台输出
- 调试信息记录
模块10: 用户认证 (最低优先级)
目标: 简单的用户识别和访问控制 预计文件: AuthManager.h, AuthManager.cpp 主要功能:
- 简单token认证
- 会话管理
- 权限控制
技术架构总结
当前架构状态:
Web前端 -> HTTP API (12345端口) -> MFC DLL -> OTK -> Creo
↓ (已实现)
状态查询接口 -> CreoManager -> 实时状态反馈
导出接口 -> ExportModelToSTEP -> STEP文件导出
层级分析接口 -> HierarchyAnalysis -> 装配体结构分析
层级删除接口 -> HierarchyDelete -> 组件安全删除
薄壳化分析接口 -> ShellAnalysis -> 几何边界特征识别
目标架构:
Web前端 -> HTTP API (快速查询) -> CreoManager -> Creo
-> WebSocket (长操作) -> WebSocketServer -> ModelAnalyzer -> Creo
↓
实时日志推送
开发原则
- 模块化开发 - 每个模块独立测试通过后再进行下一个
- 最小化修改 - 保持现有代码稳定,只添加新功能
- 向后兼容 - 新API不影响已有接口
- 错误处理 - 每个模块都有完善的异常处理
- 简化实现 - 优先实现MVP功能,避免过度工程化
已解决的技术问题
- OTK API兼容性 - 使用pfcSession而非ProToolkit
- 跨线程通信 - 保持定时器机制处理主线程OTK调用
- 内存管理 - 使用智能指针和RAII模式,避免内存泄漏
- 编码问题 - UTF-8编码保存文件解决中文注释警告
- 错误处理 - 分层异常处理确保系统稳定性
- STEP导出崩溃 - 修复了废弃API和正则表达式导致的崩溃问题
- JSON解析问题 - 实现了安全的JSON解析机制
- 线程安全问题 - 使用mutex和atomic保证多线程安全
- API参数验证 - 完善了输入参数的验证机制
- DeleteFeatures崩溃问题 - 使用SuppressFeatures替代DeleteFeatures避免装配体结构破坏
- 层级删除安全性 - 实现了任意层级的安全组件删除,包括根层级组件
- 特征引用完整性 - 采用抑制策略保持特征引用关系,避免外部依赖丢失
- 薄壳化分析算法 - 实现了基于真实几何边界的薄壳化特征识别
- 假数据彻底清除 - 移除所有模拟计算,实现纯OTK API的几何分析
- 特征置信度算法 - 实现了标准的特征删除安全性评估机制
下一步计划
建议继续实现模块7(WebSocket服务),为后续长操作和实时通信奠定基础。核心分析功能(层级分析、层级删除、薄壳化分析)已经完成,现在可以专注于实时通信和用户体验优化。
测试记录
测试原则与特点
- 所有的测试由我进行,因为我在IDE,visual studio中开发的
- 不能用任何假数据、模拟数据
- 不能限制层级和数量
构建和编译
使用 Visual Studio 2022 (v143 工具集) 构建:
# 使用 Visual Studio 构建
msbuild MFCCreoDll.sln /p:Configuration=Debug /p:Platform=x64
或在 Visual Studio IDE 中:
- 打开
MFCCreoDll.sln - 选择 Debug|x64 配置
- 构建解决方案 (Ctrl+Shift+B)
依赖环境
项目依赖 Creo 5.0.0.0 安装:
- OTK C++ 库路径:
C:\Program Files\PTC\Creo 5.0.0.0\Common Files\otk\otk_cpp\ - ProToolkit 库路径:
C:\Program Files\PTC\Creo 5.0.0.0\Common Files\protoolkit\
关键文件说明
MFCCreoDll.cpp: 主要逻辑实现,包含服务器和 OTK 交互代码MFCCreoDll.h: MFC 应用程序类声明MFCCreoDll.def: DLL 导出定义文件MFCCreoDll.vcxproj: Visual Studio 项目配置文件
重要架构注意事项
- 项目使用动态 MFC 链接 (
UseOfMfc=Dynamic) - 需要 Unicode 字符集支持
- 使用 Windows 原生线程和定时器机制
- 插件生命周期由
user_initialize()和user_terminate()函数管理 - OTK API 必须在主线程中调用,使用定时器机制处理跨线程通信
调试
编译后的 DLL 位于 x64/Debug/MFCCreoDll.dll,需要注册到 Creo 中作为插件使用。
这个项目是在visual studio 2022中进行编译生成,所以不要用其它的编译环境,调试报错也是从2022中进行。项目开发于win11环境,运行于win7环境,这个要特别关注。otk文档在文件夹otk_cpp_doc下,请自己查找相关api