TellmeRevitPluging/CLAUDE.md
2025-12-09 17:43:30 +08:00

116 lines
4.1 KiB
Markdown
Raw Permalink 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.
## 项目概述
这是一个针对Revit 2017的HTTP远程控制插件通过RESTful API提供Revit模型的远程操作能力。项目采用模块化架构支持文件操作、统计分析、薄壳优化和IFC导出等功能。
## 核心架构
### 技术栈
- **.NET Framework 4.6** (x64架构匹配Revit 2017要求)
- **OWIN 自托管HTTP服务器** (端口9000)
- **ASP.NET Web API** (RESTful设计)
- **Revit API 2017** (Autodesk.RevitAPI)
- **线程安全机制**: ExternalEvent + ConcurrentQueue
### 项目结构
```
Controllers/ # 8个API控制器 (Health, File, Stats, Task, Overview, Shell, Export)
Models/ # 8个数据模型 (统一ApiResponse<T>格式)
Services/ # 6个业务服务 (RevitService, TaskManager, DocumentService等)
Common/ # 公共组件 (48个错误码定义, 扩展方法)
App.cs # Revit插件主类 (IExternalApplication)
Startup.cs # OWIN配置
```
### API接口总览
- **基础功能**: 健康检查、文件操作、统计分析
- **任务管理**: 异步任务追踪、状态查询、取消操作
- **高级功能**: 薄壳优化(3种模式)、IFC导出(4种版本)
- **总计**: 16个REST API接口支持同步/异步双模式
## 开发约束
### 架构稳定性 (不可更改)
- **MVC分层结构**: Controllers/Services/Models分离
- **统一响应格式**: 所有API使用`ApiResponse<T>`
- **线程安全机制**: Revit操作必须通过ExternalEvent
- **技术栈**: .NET 4.6 + OWIN + Web API (不可升级)
### 线程安全要求
```csharp
// 正确方式: 通过ExternalEvent调用Revit API
App.Instance.EnqueueCommand(new OpenFileCommand(filePath));
// 错误方式: 直接在HTTP线程调用Revit API
var doc = app.OpenDocumentFile(filePath); // 会导致线程异常
```
### 响应格式标准
```csharp
// 统一使用ApiResponse<T>
return Extensions.CreateSuccessResponse(data, "操作成功");
return Extensions.CreateErrorResponse(ErrorCodes.FILE_NOT_FOUND, "文件不存在");
```
## 开发流程
### 添加新功能
1. **Model**: 在Models/目录创建数据模型
2. **Service**: 在Services/实现业务逻辑
3. **Controller**: 按现有模式创建API控制器
4. **错误处理**: 使用ErrorCodes中定义的标准错误码
5. **测试**: 使用Postman验证API接口
### 常用命令
```bash
# 编译项目 (必须使用x64配置)
msbuild "(.NET Framework).sln" /p:Configuration=Debug /p:Platform=x64
msbuild "(.NET Framework).sln" /p:Configuration=Release /p:Platform=x64
# 测试API (确保Revit已启动)
curl http://localhost:9000/api/health
```
### 部署方式
```bash
# 1. 创建插件目录 (如果不存在)
mkdir "%ProgramData%\Autodesk\Revit\Addins\2017\RevitHttpControl"
# 2. 拷贝项目debug文件夹下所有文件到插件目录
copy "bin\x64\Debug\*" "%ProgramData%\Autodesk\Revit\Addins\2017\RevitHttpControl\"
# 3. 拷贝插件清单文件到Revit插件根目录
copy "RevitHttpControl.addin" "%ProgramData%\Autodesk\Revit\Addins\2017\"
```
**部署说明:**
- 将项目编译输出目录下的所有文件复制到Revit插件专用目录
- 插件清单文件(.addin)必须放在Revit插件根目录
- 确保所有依赖的DLL文件都已复制到插件目录
### 错误排除
- **端口占用**: 检查9000端口是否被占用
- **权限问题**: 以管理员身份运行Revit
- **插件未加载**: 检查.addin文件路径配置
- **API调用失败**: 确保有文档打开且未被锁定
## 扩展指南
### 添加新的统计类型
1. 在`StatsType`枚举中添加新类型
2. 在`RevitService.GetBuiltInCategory()`中添加映射
3. 更新`GetStatsTypeDisplayName()`添加中文名称
### 添加新的优化模式
1. 在`ShellOptimizeMode`枚举中定义
2. 在`ShellAnalyzer.cs`中实现分析逻辑
3. 在`ShellOptimizer.cs`中实现优化算法
### 重要约束
- **中文优先**: 所有用户界面消息使用中文
- **向后兼容**: 不得破坏现有API接口
- **单文档模式**: 同时只能操作一个Revit文档
- **内网使用**: 不建议暴露到公网环境