# 2.1.2 通道选择功能设计说明 ## 2.1.2.1. 模块描述 通道选择模块是物流路径规划系统的核心功能模块,负责支持用户通过选择树或三维视图点选的方式选择通道模型,并将其指定为通道类型。该模块是后续自动路径规划的基础,为A*算法提供可通行的通道区域数据。 通道选择模块与CategoryAttributeManager紧密集成,将选中的模型元素标记为物流属性中的"通道"类型,并设置相应的通行属性。 ## 2.1.2.2. 功能 ### 核心功能 1. **选择树选择**:通过Navisworks选择树面板选择模型元素 2. **三维点选**:在三维视图中直接点击选择模型元素 3. **通道类型指定**:将选中的模型指定为通道类型 4. **批量选择**:支持框选和批量选择多个元素 ### 子功能 | 功能编号 | 功能名称 | 功能描述 | |---------|---------|---------| | 2.1.2.F1 | 选择树集成 | 与Navisworks选择树面板集成,支持树形结构选择 | | 2.1.2.F2 | 三维点选 | 支持在三维视图中点击选择模型 | | 2.1.2.F3 | 框选支持 | 支持矩形框选多个模型元素 | | 2.1.2.F4 | 类型指定 | 将选中的模型指定为通道类型 | | 2.1.2.F5 | 选择预览 | 高亮显示当前选中的模型元素 | | 2.1.2.F6 | 选择确认 | 确认选择并应用通道属性 | ## 2.1.2.3. 性能 ### 性能指标 | 指标名称 | 目标值 | 说明 | |---------|-------|------| | 点选响应时间 | < 100ms | 三维视图中点击选择的响应时间 | | 批量选择支持 | > 1000个 | 单次批量选择的最大元素数量 | | 属性应用时间 | < 500ms | 通道属性应用到选中元素的时间 | | 内存占用 | < 100MB | 选择过程中的额外内存占用 | ### 性能优化策略 1. 使用空间索引加速三维点选 2. 批量属性设置,减少COM API调用次数 3. 选择结果缓存,避免重复查询 ## 2.1.2.4. 输入输出项 ### 1. 字段输入输出 #### 输入字段 | 字段名 | 类型 | 必填 | 说明 | |-------|------|-----|------| | SelectedItems | ModelItemCollection | 是 | 选中的模型元素集合 | | ChannelType | LogisticsElementType | 否 | 通道类型,默认Channel | | Priority | int | 否 | 优先级,默认5 | | IsTraversable | bool | 否 | 是否可通行,默认true | #### 输出字段 | 字段名 | 类型 | 说明 | |-------|------|------| | AppliedCount | int | 成功应用属性的元素数量 | | FailedItems | List | 应用失败的元素列表 | | ChannelItems | List | 当前所有通道元素列表 | ### 2. 界面交互输入输出 #### 界面输入 - 鼠标点击/框选操作 - 选择树节点勾选 - 通道属性参数设置 #### 界面输出 - 选中元素高亮显示 - 选择数量统计 - 通道类型应用结果提示 ## 2.1.2.5. 算法 ### 三维点选算法 ``` 算法:基于射线检测的三维点选 输入:鼠标屏幕坐标,相机参数 输出:选中的模型元素 1. 将屏幕坐标转换为射线(Ray) 2. 遍历所有可见模型元素: 3. 计算射线与元素包围盒的交点 4. 如果有交点,计算精确交点距离 5. 返回距离最近的元素 ``` ### 通道属性应用算法 ``` 算法:批量应用通道属性 输入:选中的模型元素集合 输出:应用结果 1. 初始化COM API 2. 对于每个选中的元素: 3. 检查元素是否已有物流属性 4. 如果存在且冲突,记录冲突 5. 应用通道类型属性 6. 应用优先级、可通行性等属性 7. 批量提交属性更改 8. 返回应用统计 ``` ## 2.1.2.6. 流程逻辑 ``` 开始 │ ▼ ┌─────────────────┐ │ 进入选择模式 │ └────────┬────────┘ │ ┌────┴────┐ ▼ ▼ ┌────────┐ ┌────────┐ │选择树 │ │三维点选│ └───┬────┘ └───┬────┘ │ │ └─────┬─────┘ │ ▼ ┌─────────────────┐ │ 显示选中预览 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 确认通道类型 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 应用通道属性 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 显示应用结果 │ └────────┬────────┘ │ ▼ 结束 ``` ## 2.1.2.7. 接口 ### 公共接口 ```csharp /// /// 通道选择管理器 /// public class ChannelSelectionManager { /// /// 设置选中元素为通道 /// /// 选中的模型元素 /// 应用结果 public ChannelSelectionResult SetAsChannel(ModelItemCollection items); /// /// 获取所有通道元素 /// /// 通道元素列表 public List GetAllChannels(); /// /// 清除元素的通道属性 /// /// 要清除的元素 /// 清除的元素数量 public int ClearChannelAttribute(ModelItemCollection items); } ``` ### 事件接口 ```csharp /// /// 选择变更事件 /// public event EventHandler SelectionChanged; /// /// 通道属性应用完成事件 /// public event EventHandler ChannelApplied; ``` ## 2.1.2.8. 注释设计 ### 代码注释规范 ```csharp /// /// 通道选择结果 /// public class ChannelSelectionResult { /// /// 成功应用的元素数量 /// public int AppliedCount { get; set; } /// /// 应用失败的元素列表 /// 失败原因可能是元素已被锁定或API调用失败 /// public List FailedItems { get; set; } } ``` ### 配置文件注释 ```toml # 通道选择配置 [channel_selection] # 默认通道类型 default_channel_type = "通道" # 默认优先级(1-10) default_priority = 5 # 点选容差(像素) click_tolerance_pixels = 5 ``` ## 2.1.2.9. 数据结构 ### ChannelSelectionResult 结构 | 字段名 | 类型 | 说明 | |-------|------|------| | AppliedCount | int | 成功应用的元素数量 | | FailedCount | int | 失败的元素数量 | | FailedItems | List | 失败的元素列表 | | ConflictCount | int | 冲突的元素数量 | ### SelectionChangedEventArgs 结构 | 字段名 | 类型 | 说明 | |-------|------|------| | SelectedItems | ModelItemCollection | 当前选中的元素 | | SelectionCount | int | 选中元素数量 | | SelectionBounds | BoundingBox3D | 选中元素的包围盒 | ### ChannelAppliedEventArgs 结构 | 字段名 | 类型 | 说明 | |-------|------|------| | AppliedCount | int | 成功应用的元素数量 | | ChannelType | LogisticsElementType | 应用的通道类型 | | ApplyTime | DateTime | 应用时间 |