2.2.2 属性设置功能设计说明
2.2.2.1. 模块描述
属性设置模块是物流"类别"设置功能的核心模块,负责支持通过选择树和三维视图选择的方式,选择物流路径相关的元素(如门、电梯、楼梯、通道等),设置为特定的物流分类,并支持类型、可通行性、速度限制、宽度限制、优先级等属性的设置。同时支持在工具箱中进行识别和筛选,支持物流分类属性的添加、编辑和清除。
该模块与CategoryAttributeManager、LogisticsControlPanel和ConfigManager紧密集成,实现完整的物流属性管理功能。
2.2.2.2. 功能
核心功能
- 元素选择:通过选择树或三维视图选择物流元素
- 分类设置:设置元素的物流分类(门、电梯、楼梯、通道等)
- 属性配置:配置类型、可通行性、速度限制、宽度限制、优先级等属性
- 工具箱集成:在工具箱中进行识别和筛选
- 属性编辑:支持物流分类属性的添加、编辑和清除
子功能
| 功能编号 |
功能名称 |
功能描述 |
| 2.2.2.F1 |
选择树选择 |
通过选择树面板选择元素 |
| 2.2.2.F2 |
三维视图选择 |
在三维视图中点选元素 |
| 2.2.2.F3 |
分类设置 |
设置元素的物流分类类型 |
| 2.2.2.F4 |
可通行性设置 |
设置元素是否可通行 |
| 2.2.2.F5 |
优先级设置 |
设置元素的优先级(1-10) |
| 2.2.2.F6 |
速度限制设置 |
设置元素的速度限制 |
| 2.2.2.F7 |
宽度限制设置 |
设置元素的宽度限制 |
| 2.2.2.F8 |
高度限制设置 |
设置元素的高度限制 |
| 2.2.2.F9 |
属性清除 |
清除元素的物流属性 |
| 2.2.2.F10 |
工具箱筛选 |
在工具箱中按分类筛选元素 |
2.2.2.3. 性能
性能指标
| 指标名称 |
目标值 |
说明 |
| 属性设置响应 |
< 200ms |
设置单个元素属性的响应时间 |
| 批量设置时间 |
< 2秒 |
批量设置100个元素属性的时间 |
| 筛选查询时间 |
< 500ms |
按分类筛选元素的查询时间 |
| 内存占用 |
< 100MB |
属性管理的额外内存占用 |
性能优化策略
- 批量COM API调用减少开销
- 属性缓存机制
- 异步处理大批量操作
2.2.2.4. 输入输出项
1. 字段输入输出
输入字段
| 字段名 |
类型 |
必填 |
说明 |
| Items |
ModelItemCollection |
是 |
选中的模型元素 |
| ElementType |
LogisticsElementType |
是 |
物流元素类型 |
| IsTraversable |
bool |
否 |
是否可通行,默认true |
| Priority |
int |
否 |
优先级(1-10),默认5 |
| HeightLimit |
double |
否 |
高度限制(米),默认3.0 |
| SpeedLimit |
double |
否 |
速度限制(米/秒),默认0.8 |
| WidthLimit |
double |
否 |
宽度限制(米),默认3.0 |
输出字段
| 字段名 |
类型 |
说明 |
| AppliedCount |
int |
成功应用属性的元素数量 |
| FailedItems |
List |
应用失败的元素列表 |
| CurrentAttributes |
Dictionary<string, string> |
当前元素的所有属性 |
2. 界面交互输入输出
界面输入
- 元素选择操作
- 分类类型下拉选择
- 属性值输入
- 批量操作确认
界面输出
- 选中元素高亮显示
- 属性设置结果提示
- 当前属性值显示
- 统计信息面板
2.2.2.5. 算法
属性设置算法
算法:设置物流元素属性
输入:模型元素集合,属性参数
输出:设置结果
1. 准备属性字典
- 类型:ElementType.ToString()
- 可通行:IsTraversable ? "是" : "否"
- 优先级:Priority.ToString()
- 高度限制:HeightLimit + " m"
- 速度限制:SpeedLimit + " m/s"
- 宽度限制:WidthLimit + " m"
2. 准备内部名称字典
3. 调用COM API批量设置属性
4. 如果是空轨类型,预计算基准路径
5. 返回应用统计
分类筛选算法
算法:按物流分类筛选元素
输入:分类类型
输出:匹配的元素列表
1. 创建搜索条件
2. 设置搜索条件:
- PropertyName = "类型"
- Condition = Equal
- Value = 分类类型.ToString()
3. 执行搜索
4. 返回匹配的元素集合
2.2.2.6. 流程逻辑
开始
│
▼
┌─────────────────┐
│ 选择模型元素 │
└────────┬────────┘
│
┌────┴────┐
▼ ▼
┌────────┐ ┌────────┐
│选择树 │ │三维视图│
└───┬────┘ └───┬────┘
│ │
└─────┬─────┘
│
▼
┌─────────────────┐
│ 显示选中预览 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 设置分类类型 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 配置属性参数 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 应用属性设置 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 显示设置结果 │
└────────┬────────┘
│
▼
结束
2.2.2.7. 接口
公共接口
/// <summary>
/// 类别属性管理器
/// </summary>
public class CategoryAttributeManager
{
/// <summary>
/// 添加物流属性(使用配置默认值)
/// </summary>
public static int AddLogisticsAttributes(
ModelItemCollection items,
LogisticsElementType elementType);
/// <summary>
/// 添加物流属性(指定所有参数)
/// </summary>
public static int AddLogisticsAttributes(
ModelItemCollection items,
LogisticsElementType elementType,
bool isTraversable,
int priority,
double heightLimit,
double speedLimit,
double widthLimit);
/// <summary>
/// 清除物流属性
/// </summary>
public static int ClearLogisticsAttributes(ModelItemCollection items);
/// <summary>
/// 按类型获取物流元素
/// </summary>
public static List<ModelItem> GetLogisticsItemsByType(string typeName);
/// <summary>
/// 获取所有可通行物流元素
/// </summary>
public static List<ModelItem> GetAllTraversableLogisticsItems();
}
物流元素类型枚举
public enum LogisticsElementType
{
空洞 = 0, // 不可通行
障碍物 = 1, // 不可通行
楼板 = 2, // 基础可通行,权重1.0
门 = 3, // 可通行,权重1.2
电梯 = 4, // 可通行,权重2.0
楼梯 = 5, // 可通行,权重3.0
通道 = 6, // 可通行,优先路径,权重0.5
走廊 = 7, // 可通行,权重0.6
装卸区 = 8, // 可通行,权重0.8
停车位 = 9, // 可通行,权重0.9
空轨 = 10, // 可通行,权重0.7
无关项 = 11 // 不参与网格生成
}
2.2.2.8. 注释设计
代码注释规范
/// <summary>
/// 物流属性定义
/// </summary>
public static class LogisticsProperties
{
/// <summary>
/// 物流元素类型
/// </summary>
public const string TYPE = "类型";
/// <summary>
/// 是否可通行
/// </summary>
public const string TRAVERSABLE = "可通行";
/// <summary>
/// 优先级(1-10)
/// </summary>
public const string PRIORITY = "优先级";
/// <summary>
/// 高度限制(米)
/// </summary>
public const string HEIGHT_LIMIT = "高度限制";
/// <summary>
/// 速度限制(米/秒)
/// </summary>
public const string SPEED_LIMIT = "速度限制";
/// <summary>
/// 宽度限制(米)
/// </summary>
public const string WIDTH_LIMIT = "宽度限制";
}
2.2.2.9. 数据结构
LogisticsElementType 枚举
| 值 |
名称 |
说明 |
权重 |
| 0 |
空洞 |
没有任何几何覆盖,不可通行 |
- |
| 1 |
障碍物 |
墙体、柱子、设备等,不可通行 |
- |
| 2 |
楼板 |
基础可通行区域 |
1.0 |
| 3 |
门 |
可通行 |
1.2 |
| 4 |
电梯 |
可通行 |
2.0 |
| 5 |
楼梯 |
可通行 |
3.0 |
| 6 |
通道 |
可通行,优先路径 |
0.5 |
| 7 |
走廊 |
可通行 |
0.6 |
| 8 |
装卸区 |
可通行 |
0.8 |
| 9 |
停车位 |
可通行 |
0.9 |
| 10 |
空轨 |
空中运输路径 |
0.7 |
| 11 |
无关项 |
不参与网格生成 |
- |
LogisticsAttribute 结构
| 字段名 |
类型 |
说明 |
| ElementType |
LogisticsElementType |
元素类型 |
| IsTraversable |
bool |
是否可通行 |
| Priority |
int |
优先级 |
| HeightLimitMeters |
double |
高度限制(米) |
| SpeedLimitMetersPerSecond |
double |
速度限制(米/秒) |
| WidthLimitMeters |
double |
宽度限制(米) |