CreoOtkPluging/CLAUDE.md
root cd59030b73 实现完整的Creo Web API集成系统
- 添加模块化HTTP服务器架构,支持路由注册和请求处理
- 实现Creo状态检测API,提供连接状态和模型状态实时监控
- 完成STEP格式模型导出功能,支持装配体和零件导出
- 实现装配体层级结构分析,支持无限深度遍历和组件信息提取
- 添加层级组件安全删除功能,使用抑制策略保持装配体完整性
- 集成WebSocket服务器框架,为实时通信和长操作做准备
- 完善JSON处理、日志记录和认证管理基础设施
- 修复OTK API兼容性问题和内存管理优化
- 解决DeleteFeatures崩溃问题,采用SuppressFeatures替代方案

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 15:46:25 +08:00

13 KiB
Raw Blame History

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
}

已解决的技术问题:

  1. 重复API调用优化 - 修复了LoadComponentModel和ListFeaturesByType的重复调用
  2. 递归调用优化 - 优化了组件加载流程,避免不必要的重复操作
  3. 内存管理改进 - 使用预加载模型参数传递,减少内存分配

模块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
}

已解决的技术问题:

  1. Creo崩溃问题 - 使用SuppressFeatures替代DeleteFeatures避免引用丢失导致的崩溃
  2. 层级安全性 - 支持删除任意层级的组件,包括根层级的关键组件
  3. 引用完整性 - 抑制特征保持引用关系,避免外部依赖丢失
  4. 模型重生成 - 使用重生成指令确保删除后模型状态正确
  5. 异常处理 - 完善的错误处理机制,操作失败时提供详细信息

关键技术突破:

  • 发现并解决了OTK DeleteFeatures在删除装配体核心组件时的崩溃问题
  • 采用Suppression策略实现视觉删除效果同时保持模型结构完整性
  • 实现了从根层级到任意深度的安全组件删除

🔄 待实现模块(按优先级排序)

模块6: WebSocket服务 (高优先级)

目标: 实现双向实时通信,支持长时间操作 预计文件: WebSocketServer.h, WebSocketServer.cpp 主要功能:

  • WebSocket服务器端口12346
  • 实时日志推送
  • 长操作进度反馈
  • 客户端连接管理

模块7: Creo长操作接口 (中优先级)

目标: 实现模型加载、特征删除、多格式导出等操作 预计文件: ModelAnalyzer.h, ModelAnalyzer.cpp 主要功能:

  • 模型文件加载操作
  • 特征分析和删除
  • 多格式导出STL、IGES等
  • 操作进度监控

模块8: 日志系统 (低优先级)

目标: 统一的日志记录和错误追踪 预计文件: Logger.h, Logger.cpp 主要功能:

  • 结构化日志输出
  • 多级别日志支持
  • 文件和控制台输出
  • 调试信息记录

模块9: 用户认证 (最低优先级)

目标: 简单的用户识别和访问控制 预计文件: AuthManager.h, AuthManager.cpp 主要功能:

  • 简单token认证
  • 会话管理
  • 权限控制

技术架构总结

当前架构状态:

Web前端 -> HTTP API (12345端口) -> MFC DLL -> OTK -> Creo
         ↓ (已实现)
         状态查询接口 -> CreoManager -> 实时状态反馈
         导出接口 -> ExportModelToSTEP -> STEP文件导出

目标架构:

Web前端 -> HTTP API (快速查询) -> CreoManager -> Creo
         -> WebSocket (长操作) -> WebSocketServer -> ModelAnalyzer -> Creo
                                                   ↓
                                               实时日志推送

开发原则

  1. 模块化开发 - 每个模块独立测试通过后再进行下一个
  2. 最小化修改 - 保持现有代码稳定,只添加新功能
  3. 向后兼容 - 新API不影响已有接口
  4. 错误处理 - 每个模块都有完善的异常处理
  5. 简化实现 - 优先实现MVP功能避免过度工程化

已解决的技术问题

  1. OTK API兼容性 - 使用pfcSession而非ProToolkit
  2. 跨线程通信 - 保持定时器机制处理主线程OTK调用
  3. 内存管理 - 使用智能指针和RAII模式避免内存泄漏
  4. 编码问题 - UTF-8编码保存文件解决中文注释警告
  5. 错误处理 - 分层异常处理确保系统稳定性
  6. STEP导出崩溃 - 修复了废弃API和正则表达式导致的崩溃问题
  7. JSON解析问题 - 实现了安全的JSON解析机制
  8. 线程安全问题 - 使用mutex和atomic保证多线程安全
  9. API参数验证 - 完善了输入参数的验证机制
  10. DeleteFeatures崩溃问题 - 使用SuppressFeatures替代DeleteFeatures避免装配体结构破坏
  11. 层级删除安全性 - 实现了任意层级的安全组件删除,包括根层级组件
  12. 特征引用完整性 - 采用抑制策略保持特征引用关系,避免外部依赖丢失

下一步计划

建议继续实现模块6WebSocket服务为后续长操作和实时通信奠定基础。核心删除功能已经完成现在可以专注于实时通信和用户体验优化。

测试记录

测试原则与特点

  • 所有的测试由我进行因为我在IDEvisual 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