# 2.2.1 类别设置功能设计说明
## 2.2.1.1. 模块描述
类别设置模块是物流"类别"设置功能的核心模块,负责在模型属性页面新增"物流属性"类别。该模块为后续的物流元素分类和属性管理提供基础支持,通过扩展Navisworks的属性系统,为模型元素添加物流相关的分类信息。
该模块与CategoryAttributeManager和NavisworksComPropertyManager紧密集成,使用COM API在模型元素上创建自定义的"物流属性"类别。
## 2.2.1.2. 功能
### 核心功能
1. **类别创建**:在模型属性页面创建"物流属性"类别
2. **类别管理**:管理物流属性的类别定义和结构
3. **属性扩展**:为类别添加自定义属性字段
4. **持久化存储**:将类别信息持久化存储在模型中
### 子功能
| 功能编号 | 功能名称 | 功能描述 |
|---------|---------|---------|
| 2.2.1.F1 | 类别初始化 | 初始化物流属性类别结构 |
| 2.2.1.F2 | 类别检查 | 检查元素是否已有物流属性 |
| 2.2.1.F3 | 类别添加 | 为元素添加物流属性类别 |
| 2.2.1.F4 | 类别移除 | 从元素移除物流属性类别 |
| 2.2.1.F5 | 类别查询 | 查询具有特定类别的元素 |
## 2.2.1.3. 性能
### 性能指标
| 指标名称 | 目标值 | 说明 |
|---------|-------|------|
| 类别添加时间 | < 100ms | 为单个元素添加类别的时间 |
| 批量添加时间 | < 1秒 | 为100个元素批量添加类别 |
| 类别查询时间 | < 500ms | 查询特定类别元素的时间 |
| 内存占用 | < 50MB | 类别管理的额外内存占用 |
### 性能优化策略
1. 批量COM API调用减少开销
2. 类别缓存避免重复查询
3. 延迟加载策略
## 2.2.1.4. 输入输出项
### 1. 字段输入输出
#### 输入字段
| 字段名 | 类型 | 必填 | 说明 |
|-------|------|-----|------|
| Items | ModelItemCollection | 是 | 要添加类别的模型元素 |
| CategoryName | string | 否 | 类别名称,默认"物流属性" |
#### 输出字段
| 字段名 | 类型 | 说明 |
|-------|------|------|
| SuccessCount | int | 成功添加类别的元素数量 |
| HasCategory | bool | 元素是否已有物流属性 |
### 2. 界面交互输入输出
#### 界面输入
- 类别名称设置
- 元素选择确认
- 类别添加/移除操作
#### 界面输出
- 类别添加结果提示
- 元素属性面板更新
- 类别统计信息
## 2.2.1.5. 算法
### 类别添加算法
```
算法:为元素添加物流属性类别
输入:模型元素集合
输出:添加结果
1. 初始化COM API
2. 对于每个元素:
3. 检查元素是否已有物流属性
4. 如果已有,跳过
5. 创建"物流属性"类别
6. 添加类别到元素的属性集合
7. 提交更改
8. 返回统计结果
```
### 类别查询算法
```
算法:查询具有物流属性的元素
输入:搜索范围
输出:元素列表
1. 创建搜索条件
2. 设置搜索条件:PropertyCategory = "物流属性"
3. 执行搜索
4. 返回匹配的元素集合
```
## 2.2.1.6. 流程逻辑
```
开始
│
▼
┌─────────────────┐
│ 选择模型元素 │
└────────┬────────┘
│
▼
┌─────────────────┐ 是
│ 已有物流属性? │──────────┐
└────────┬────────┘ │
│否 │
▼ │
┌─────────────────┐ │
│ 创建物流属性类别 │ │
└────────┬────────┘ │
│ │
▼ │
┌─────────────────┐ │
│ 添加类别到元素 │ │
└────────┬────────┘ │
│ │
┌────┴───────────────────┘
│
▼
┌─────────────────┐
│ 更新属性面板 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 显示操作结果 │
└────────┬────────┘
│
▼
结束
```
## 2.2.1.7. 接口
### 公共接口
```csharp
///
/// 类别属性管理器
///
public class CategoryAttributeManager
{
///
/// 添加物流属性类别
///
/// 模型元素集合
/// 成功添加的数量
public int AddLogisticsCategory(ModelItemCollection items);
///
/// 检查元素是否有物流属性
///
/// 模型元素
/// 是否有物流属性
public bool HasLogisticsCategory(ModelItem item);
///
/// 移除物流属性类别
///
/// 模型元素集合
/// 成功移除的数量
public int RemoveLogisticsCategory(ModelItemCollection items);
///
/// 获取所有具有物流属性的元素
///
/// 元素列表
public List GetAllLogisticsItems();
}
```
## 2.2.1.8. 注释设计
### 代码注释规范
```csharp
///
/// 物流类别定义
///
public static class LogisticsCategories
{
///
/// 物流属性类别显示名称
///
public const string LOGISTICS = "物流属性";
///
/// 物流属性类别内部名称
/// 用于COM API操作
///
public const string CATEGORY_INTERNAL_NAME = "物流属性_Internal";
}
```
## 2.2.1.9. 数据结构
### LogisticsCategories 常量
| 常量名 | 值 | 说明 |
|-------|---|------|
| LOGISTICS | "物流属性" | 类别显示名称 |
| CATEGORY_INTERNAL_NAME | "物流属性_Internal" | 类别内部名称 |
### CategoryResult 结构
| 字段名 | 类型 | 说明 |
|-------|------|------|
| SuccessCount | int | 成功数量 |
| FailCount | int | 失败数量 |
| ProcessedItems | List | 处理的元素 |