2.2.1 类别设置功能设计说明
2.2.1.1. 模块描述
类别设置模块是物流"类别"设置功能的核心模块,负责在模型属性页面新增"物流属性"类别。该模块为后续的物流元素分类和属性管理提供基础支持,通过扩展Navisworks的属性系统,为模型元素添加物流相关的分类信息。
该模块与CategoryAttributeManager和NavisworksComPropertyManager紧密集成,使用COM API在模型元素上创建自定义的"物流属性"类别。
2.2.1.2. 功能
核心功能
- 类别创建:在模型属性页面创建"物流属性"类别
- 类别管理:管理物流属性的类别定义和结构
- 属性扩展:为类别添加自定义属性字段
- 持久化存储:将类别信息持久化存储在模型中
子功能
| 功能编号 |
功能名称 |
功能描述 |
| 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 |
类别管理的额外内存占用 |
性能优化策略
- 批量COM API调用减少开销
- 类别缓存避免重复查询
- 延迟加载策略
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. 接口
公共接口
/// <summary>
/// 类别属性管理器
/// </summary>
public class CategoryAttributeManager
{
/// <summary>
/// 添加物流属性类别
/// </summary>
/// <param name="items">模型元素集合</param>
/// <returns>成功添加的数量</returns>
public int AddLogisticsCategory(ModelItemCollection items);
/// <summary>
/// 检查元素是否有物流属性
/// </summary>
/// <param name="item">模型元素</param>
/// <returns>是否有物流属性</returns>
public bool HasLogisticsCategory(ModelItem item);
/// <summary>
/// 移除物流属性类别
/// </summary>
/// <param name="items">模型元素集合</param>
/// <returns>成功移除的数量</returns>
public int RemoveLogisticsCategory(ModelItemCollection items);
/// <summary>
/// 获取所有具有物流属性的元素
/// </summary>
/// <returns>元素列表</returns>
public List<ModelItem> GetAllLogisticsItems();
}
2.2.1.8. 注释设计
代码注释规范
/// <summary>
/// 物流类别定义
/// </summary>
public static class LogisticsCategories
{
/// <summary>
/// 物流属性类别显示名称
/// </summary>
public const string LOGISTICS = "物流属性";
/// <summary>
/// 物流属性类别内部名称
/// 用于COM API操作
/// </summary>
public const string CATEGORY_INTERNAL_NAME = "物流属性_Internal";
}
2.2.1.9. 数据结构
LogisticsCategories 常量
| 常量名 |
值 |
说明 |
| LOGISTICS |
"物流属性" |
类别显示名称 |
| CATEGORY_INTERNAL_NAME |
"物流属性_Internal" |
类别内部名称 |
CategoryResult 结构
| 字段名 |
类型 |
说明 |
| SuccessCount |
int |
成功数量 |
| FailCount |
int |
失败数量 |
| ProcessedItems |
List |
处理的元素 |