# 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 | 处理的元素 |