TellmePdmsPluging/Documentation/creo操控参考文档.md
root 3082148d7e 实现PDMS模型状态API并移除硬编码数据
## 主要改进
- 实现 /api/status/model 接口,返回真实PDMS模型状态信息
- 使用MDB.CurrentMDB、Project.CurrentProject等AVEVA API获取真实数据
- 移除硬编码的CurrentSession、PositionInfo、PdmsSpecific等复杂结构
- 简化数据模型,只保留核心的真实数据字段

## 技术实现
- 通过DbSession获取真实的用户名、会话开始时间和持续时间
- 通过WorldMembers()获取真实的模型元素统计
- 修复DateTime类型的null合并运算符编译错误
- 清理不使用的方法和类定义

## API返回数据
现在返回的数据主要包含真实的PDMS信息:
- ModelLoaded: MDB连接状态检查
- ProjectName: 真实的设计数据库名称
- MdsName: 真实的MDB名称
- UserName: 真实的数据库会话用户
- StartTime: 真实的会话创建时间
- TotalElements: 真实的模型元素数量统计

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-01 10:36:02 +08:00

641 lines
23 KiB
Markdown
Raw 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.

# 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请求格式**
```json
{
"software_type": "creo",
"format_type": "step",
"export_path": "D:\\model.stp",
"options": {
"geom_flags": "solids",
"advanced": false
}
}
```
**API响应格式**
```json
{
"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请求格式**
```json
{
"software_type": "creo",
"project_name": "Assembly Analysis",
"max_depth": 0,
"include_geometry": false
}
```
**API响应格式**
```json
{
"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请求格式**
```json
{
"software_type": "creo",
"project_name": "Assembly Delete",
"target_level": 2
}
```
**API响应格式**
```json
{
"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: 薄壳化分析功能 (完成)
**功能:** CAD模型薄壳化分析基于几何边界识别内部可删除特征
**文件:** CreoManager.h, CreoManager.cpp, MFCCreoDll.cpp
**测试状态:** ✅ 编译成功功能测试通过API格式已优化
**API端点**
- `POST /api/creo/analysis/shell` - 薄壳化分析接口
#### 模块7: 关闭模型功能 (完成)
**功能:** 安全关闭当前Creo模型支持修改状态检查和强制关闭
**文件:** CreoManager.h, CreoManager.cpp, MFCCreoDll.cpp
**测试状态:** ✅ 开发完成,待编译测试
**API端点**
- `POST /api/model/close` - 关闭模型接口
**技术细节:**
- 使用OTK `pfcModel::Erase()` API执行模型关闭操作
- 使用 `pfcModel::GetIsModified()` 检查模型修改状态
- 支持安全关闭(检查修改)和强制关闭(忽略修改)两种模式
- 完善的异常处理和错误反馈机制
- 返回详细的关闭结果信息(模型名称、修改状态、关闭时间)
**API请求格式**
```json
{
"software_type": "creo",
"force_close": false
}
```
**API响应格式**
```json
{
"success": true,
"data": {
"model_name": "assembly.asm",
"was_modified": false,
"close_time": "2024-01-15T10:30:00Z"
},
"error": null
}
```
**已解决的技术问题:**
1. **OTK API正确性** - 使用正确的 `GetIsModified()` 方法检查模型修改状态
2. **安全关闭逻辑** - 实现修改状态检查,防止意外的数据丢失
3. **强制关闭选项** - 提供 `force_close` 参数允许忽略未保存修改
4. **详细错误信息** - 当模型有未保存修改时提供清晰的错误提示
5. **状态反馈完整性** - 返回关闭操作的完整状态信息
**关键技术突破:**
- 实现了安全的模型关闭机制,平衡了用户便利性和数据安全性
- 提供了灵活的关闭选项,适应不同的使用场景
- 建立了标准的模型生命周期管理API模式
#### 模块8: 打开模型功能 (完成)
**功能:** 根据文件路径打开Creo模型支持装配体、零件和工程图
**文件:** CreoManager.h, CreoManager.cpp, MFCCreoDll.cpp
**测试状态:** ✅ 开发完成,待编译测试
**API端点**
- `POST /api/model/open` - 模型打开接口
**技术细节:**
- 使用OTK `pfcSession::RetrieveModel()` API打开模型文件
- 优先从内存检索已加载模型,避免重复加载
- 支持主动激活(active)和静默打开(silent)两种模式
- 自动识别模型类型(装配体、零件、工程图)
- 对装配体自动统计组件数量
- 完善的文件路径验证和错误处理
**API请求格式**
```json
{
"software_type": "creo",
"file_path": "D:\\models\\assembly.asm",
"open_mode": "active"
}
```
**API响应格式**
```json
{
"success": true,
"data": {
"model_name": "assembly.asm",
"model_type": "assembly",
"file_path": "D:\\models\\assembly.asm",
"file_size": "15.2MB",
"open_time": "2024-01-15T10:30:00Z",
"is_assembly": true,
"total_parts": 25
},
"error": null
}
```
**已解决的技术问题:**
1. **智能模型检索** - 优先从内存检索,避免重复加载导致的性能问题
2. **文件路径转换** - 正确处理Windows文件路径到xstring的转换
3. **模型类型识别** - 基于OTK API准确识别装配体、零件、工程图类型
4. **装配体统计** - 使用ListFeaturesByType安全统计装配体组件数量
5. **异常分类处理** - 区分文件不存在、权限问题、OTK错误等不同异常类型
**关键技术突破:**
- 实现了完整的模型打开流程支持所有Creo模型格式
- 建立了内存优先的智能加载策略
- 完善了模型生命周期管理的开放环节
**API请求格式**
```json
{
"software_type": "creo",
"project_name": "Shell Analysis",
"preserve_external_surfaces": true,
"analysis_mode": "aggressive"
}
```
**API响应格式**
```json
{
"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
}
}
}
```
**已解决的技术问题:**
1. **假数据问题** - 移除所有模拟包络盒数据使用真实OTK API计算
2. **几何分析** - 实现基于pfcOutline3D的真实边界识别算法
3. **特征名称格式** - 生成"EXTRUDE_1"等标准格式名称
4. **文件路径显示** - 正确显示partFile和partPath信息包含文件扩展名
5. **置信度算法** - 实现基于几何位置和特征类型的标准置信度计算
6. **编译错误** - 修复中文字符串导致的编译问题
**关键技术突破:**
- 发现并实现了基于OTK几何API的真实薄壳化算法
- 解决了特征边界判定的核心技术难题
- 实现了无假数据、无猜测的纯几何分析方法
#### 模块9: 无锁线程安全方案 (完成)
**功能:** 解决HTTP线程与主线程的跨线程通信安全问题
**文件:** MFCCreoDll.cpp, CreoManager.cpp
**测试状态:** ✅ 完全解决,系统稳定运行
**关键问题:** 模型打开接口超时、线程崩溃、窗口激活失败
**技术细节:**
- **根本问题发现**HTTP服务器运行在独立Windows线程中无法使用C++标准库mutex
- **核心解决方案**:实现完全无锁的跨线程通信机制
- **消息队列设计**:使用`MessageItem`结构统一处理所有HTTP请求类型
- **原子操作**:基于`std::atomic<bool>`和`volatile`指针实现线程同步
- **窗口激活集成**将窗口激活直接集成到主线程OpenModel流程中
**无锁架构设计:**
```cpp
// 消息结构
struct MessageItem {
std::string type; // "SHOW_MESSAGE" 或 "OPEN_MODEL_REQUEST"
std::string data; // 消息内容或文件路径
std::string extra; // 额外参数如open_mode
volatile bool completed; // 完成标志
void* result_ptr; // 结果指针
};
// 全局状态(无锁)
static volatile MessageItem* pending_message_item = nullptr;
static std::atomic<bool> has_pending_item{false};
```
**线程通信流程:**
```
HTTP线程 -> 设置MessageItem -> 原子标志 -> 等待完成
主线程(TimerProc) -> 检测标志 -> 执行OTK操作 -> 设置完成标志
窗口激活(如果需要) -> 返回结果
```
**已解决的技术问题:**
1. **HTTP线程mutex崩溃** - 完全移除C++标准库同步原语
2. **跨线程OTK调用** - 所有OTK操作都在主线程执行
3. **嵌套消息冲突** - 窗口激活直接集成到OpenModel流程
4. **内存管理** - 动态分配结果对象HTTP线程负责清理
5. **超时处理** - 保持10秒超时机制但现在能正常完成
**性能优化:**
- **零锁开销**:完全避免锁竞争和上下文切换
- **高效轮询**50ms间隔轮询平衡响应速度和CPU占用
- **内存最小化**:栈上分配消息项,堆上仅分配结果对象
**API兼容性**
-**所有现有API保持100%兼容**
-**窗口激活功能正常工作**
-**错误处理机制完整保留**
-**调试信息完整记录执行过程**
**关键技术突破:**
- 发现并解决了MFC DLL环境下HTTP线程无法使用C++标准库mutex的根本问题
- 实现了完全无锁的跨线程通信方案,保持高性能和线程安全
- 成功集成窗口激活功能,实现了完整的模型打开体验
- 建立了可扩展的消息机制,为未来功能提供稳定基础
### 🔄 待实现模块(按优先级排序)
#### 模块8: WebSocket服务 (高优先级)
**目标:** 实现双向实时通信,支持长时间操作
**预计文件:** WebSocketServer.h, WebSocketServer.cpp
**主要功能:**
- WebSocket服务器端口12346
- 实时日志推送
- 长操作进度反馈
- 客户端连接管理
#### 模块9: Creo长操作接口 (中优先级)
**目标:** 实现模型加载、特征删除、多格式导出等操作
**预计文件:** ModelAnalyzer.h, ModelAnalyzer.cpp
**主要功能:**
- 模型文件加载操作
- 特征分析和删除
- 多格式导出STL、IGES等
- 操作进度监控
#### 模块10: 日志系统 (低优先级)
**目标:** 统一的日志记录和错误追踪
**预计文件:** Logger.h, Logger.cpp
**主要功能:**
- 结构化日志输出
- 多级别日志支持
- 文件和控制台输出
- 调试信息记录
#### 模块11: 用户认证 (最低优先级)
**目标:** 简单的用户识别和访问控制
**预计文件:** AuthManager.h, AuthManager.cpp
**主要功能:**
- 简单token认证
- 会话管理
- 权限控制
### 技术架构总结
**当前架构状态:**
```
Web前端 -> HTTP API (12345端口) -> 无锁MessageItem -> TimerProc主线程 -> OTK -> Creo
↓ (已实现完整功能) ↓
状态查询接口 -> CreoManager -> 实时状态反馈
导出接口 -> ExportModelToSTEP -> STEP文件导出
层级分析接口 -> HierarchyAnalysis -> 装配体结构分析
层级删除接口 -> HierarchyDelete -> 组件安全删除
薄壳化分析接口 -> ShellAnalysis -> 几何边界特征识别
关闭模型接口 -> CloseModel -> 安全模型关闭
打开模型接口 -> OpenModel + 窗口激活 -> 完整模型加载体验
```
**目标架构:**
```
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. **特征引用完整性** - 采用抑制策略保持特征引用关系,避免外部依赖丢失
13. **薄壳化分析算法** - 实现了基于真实几何边界的薄壳化特征识别
14. **假数据彻底清除** - 移除所有模拟计算实现纯OTK API的几何分析
15. **特征置信度算法** - 实现了标准的特征删除安全性评估机制
16. **模型关闭API设计** - 实现了安全的模型关闭机制,平衡用户便利性和数据安全性
17. **OTK模型状态检查** - 使用正确的`GetIsModified()`API检查模型修改状态
18. **强制关闭选项** - 提供灵活的关闭选项,适应不同使用场景
19. **模型生命周期管理** - 建立了标准的模型生命周期管理API模式
20. **HTTP线程mutex崩溃** - 发现并解决MFC DLL环境下HTTP线程无法使用C++标准库mutex的根本问题
21. **无锁跨线程通信** - 实现完全无锁的MessageItem机制彻底解决线程安全问题
22. **嵌套消息冲突** - 将窗口激活直接集成到OpenModel流程避免嵌套消息导致的死锁
23. **模型打开超时** - 解决10秒超时问题实现稳定的模型打开和窗口激活功能
### 下一步计划
建议继续实现模块8WebSocket服务为后续长操作和实时通信奠定基础。核心分析功能层级分析、层级删除、薄壳化分析、模型关闭已经完成现在可以专注于实时通信和用户体验优化。
## 测试记录
### 测试原则与特点
- **所有的测试由我进行因为我在IDEvisual studio中开发的**
- **不能用任何假数据、模拟数据**
- **不能限制层级和数量**
## 构建和编译
使用 Visual Studio 2022 (v143 工具集) 构建:
```bash
# 使用 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