# 2.2.2 属性设置功能设计说明 ## 2.2.2.1. 模块描述 属性设置模块是物流"类别"设置功能的核心模块,负责支持通过选择树和三维视图选择的方式,选择物流路径相关的元素(如门、电梯、楼梯、通道等),设置为特定的物流分类,并支持类型、可通行性、速度限制、宽度限制、优先级等属性的设置。同时支持在工具箱中进行识别和筛选,支持物流分类属性的添加、编辑和清除。 该模块与CategoryAttributeManager、LogisticsControlPanel和ConfigManager紧密集成,实现完整的物流属性管理功能。 ## 2.2.2.2. 功能 ### 核心功能 1. **元素选择**:通过选择树或三维视图选择物流元素 2. **分类设置**:设置元素的物流分类(门、电梯、楼梯、通道等) 3. **属性配置**:配置类型、可通行性、速度限制、宽度限制、优先级等属性 4. **工具箱集成**:在工具箱中进行识别和筛选 5. **属性编辑**:支持物流分类属性的添加、编辑和清除 ### 子功能 | 功能编号 | 功能名称 | 功能描述 | |---------|---------|---------| | 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 | 属性管理的额外内存占用 | ### 性能优化策略 1. 批量COM API调用减少开销 2. 属性缓存机制 3. 异步处理大批量操作 ## 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 | 当前元素的所有属性 | ### 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. 接口 ### 公共接口 ```csharp /// /// 类别属性管理器 /// public class CategoryAttributeManager { /// /// 添加物流属性(使用配置默认值) /// public static int AddLogisticsAttributes( ModelItemCollection items, LogisticsElementType elementType); /// /// 添加物流属性(指定所有参数) /// public static int AddLogisticsAttributes( ModelItemCollection items, LogisticsElementType elementType, bool isTraversable, int priority, double heightLimit, double speedLimit, double widthLimit); /// /// 清除物流属性 /// public static int ClearLogisticsAttributes(ModelItemCollection items); /// /// 按类型获取物流元素 /// public static List GetLogisticsItemsByType(string typeName); /// /// 获取所有可通行物流元素 /// public static List GetAllTraversableLogisticsItems(); } ``` ### 物流元素类型枚举 ```csharp 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. 注释设计 ### 代码注释规范 ```csharp /// /// 物流属性定义 /// public static class LogisticsProperties { /// /// 物流元素类型 /// public const string TYPE = "类型"; /// /// 是否可通行 /// public const string TRAVERSABLE = "可通行"; /// /// 优先级(1-10) /// public const string PRIORITY = "优先级"; /// /// 高度限制(米) /// public const string HEIGHT_LIMIT = "高度限制"; /// /// 速度限制(米/秒) /// public const string SPEED_LIMIT = "速度限制"; /// /// 宽度限制(米) /// 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 | 宽度限制(米) |