## 主要改进 - 实现 /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>
641 lines
23 KiB
Markdown
641 lines
23 KiB
Markdown
# 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秒超时问题,实现稳定的模型打开和窗口激活功能
|
||
|
||
### 下一步计划
|
||
|
||
建议继续实现模块8(WebSocket服务),为后续长操作和实时通信奠定基础。核心分析功能(层级分析、层级删除、薄壳化分析、模型关闭)已经完成,现在可以专注于实时通信和用户体验优化。
|
||
|
||
## 测试记录
|
||
|
||
### 测试原则与特点
|
||
- **所有的测试由我进行,因为我在IDE,visual 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 |