# 2.3.2 物流元素筛选功能设计说明 ## 2.3.2.1. 模块描述 物流元素筛选模块是层级创建功能的重要模块,负责支持通过预设的物流分类属性筛选出物流路径相关元素。该模块使用户能够快速定位和查看具有特定物流属性的模型元素,便于进行路径规划前的元素检查和管理。 该模块与CategoryAttributeManager、NavisworksSelectionHelper和搜索系统紧密集成,实现基于属性的高效元素筛选。 ## 2.3.2.2. 功能 ### 核心功能 1. **按类型筛选**:按物流元素类型筛选(门、电梯、楼梯、通道等) 2. **按属性筛选**:按可通行性、优先级等属性筛选 3. **组合筛选**:支持多条件组合筛选 4. **筛选结果高亮**:高亮显示筛选结果 5. **筛选保存**:保存常用的筛选条件 ### 子功能 | 功能编号 | 功能名称 | 功能描述 | |---------|---------|---------| | 2.3.2.F1 | 类型筛选 | 按物流元素类型筛选 | | 2.3.2.F2 | 可通行筛选 | 按是否可通行筛选 | | 2.3.2.F3 | 优先级筛选 | 按优先级范围筛选 | | 2.3.2.F4 | 组合筛选 | 多条件组合筛选 | | 2.3.2.F5 | 结果高亮 | 高亮显示筛选结果 | | 2.3.2.F6 | 结果选择 | 将筛选结果添加到选择集 | | 2.3.2.F7 | 筛选保存 | 保存筛选条件 | | 2.3.2.F8 | 筛选加载 | 加载已保存的筛选条件 | ## 2.3.2.3. 性能 ### 性能指标 | 指标名称 | 目标值 | 说明 | |---------|-------|------| | 筛选响应时间 | < 1秒 | 执行筛选操作的响应时间 | | 支持元素数量 | > 10000 | 支持筛选的最大元素数量 | | 结果高亮时间 | < 500ms | 高亮显示结果的时间 | | 内存占用 | < 100MB | 筛选过程的额外内存占用 | ### 性能优化策略 1. 使用Navisworks搜索API进行高效筛选 2. 筛选结果缓存 3. 增量筛选减少重复计算 ## 2.3.2.4. 输入输出项 ### 1. 字段输入输出 #### 输入字段 | 字段名 | 类型 | 必填 | 说明 | |-------|------|-----|------| | ElementTypes | List | 否 | 要筛选的类型列表 | | IsTraversable | bool? | 否 | 可通行性筛选条件 | | MinPriority | int? | 否 | 最小优先级 | | MaxPriority | int? | 否 | 最大优先级 | #### 输出字段 | 字段名 | 类型 | 说明 | |-------|------|------| | FilteredItems | List | 筛选结果的元素列表 | | FilterCount | int | 筛选结果数量 | | FilterTime | TimeSpan | 筛选耗时 | ### 2. 界面交互输入输出 #### 界面输入 - 类型多选框选择 - 可通行性单选/复选 - 优先级范围滑块 - 筛选条件保存名称输入 #### 界面输出 - 筛选结果列表 - 统计信息显示 - 结果高亮显示 - 操作提示信息 ## 2.3.2.5. 算法 ### 属性筛选算法 ``` 算法:基于属性的元素筛选 输入:筛选条件 输出:筛选结果 1. 创建搜索对象 2. 构建搜索条件: a. 如果指定了类型: - 添加类型条件 b. 如果指定了可通行性: - 添加可通行性条件 c. 如果指定了优先级范围: - 添加优先级条件 3. 执行搜索 4. 返回匹配的元素集合 ``` ### 组合筛选算法 ``` 算法:多条件组合筛选 输入:多个筛选条件 输出:筛选结果 1. 对于每个筛选条件: 2. 执行单条件筛选 3. 获取中间结果 4. 根据组合逻辑(与/或)合并结果 5. 返回最终筛选结果 ``` ## 2.3.2.6. 流程逻辑 ``` 开始 │ ▼ ┌─────────────────┐ │ 设置筛选条件 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ 是 │ 多条件组合? │──────────┐ └────────┬────────┘ │ │否 │ ▼ │ ┌─────────────────┐ │ │ 单条件筛选 │ │ └────────┬────────┘ │ │ │ │ ▼ │ ┌─────────────────┐ │ │ 多条件分别筛选 │ │ └────────┬────────┘ │ │ │ ▼ │ ┌─────────────────┐ │ │ 合并筛选结果 │ │ └────────┬────────┘ │ │ └────────┬─────────┘ │ ▼ ┌─────────────────┐ │ 显示筛选结果 │ └────────┬────────┘ │ ┌────┴────┐ ▼ ▼ ┌────────┐ ┌────────┐ │高亮显示│ │添加到 │ └───┬────┘ │选择集 │ │ └───┬────┘ │ │ └─────┬─────┘ │ ▼ ┌─────────────────┐ │ 保存筛选条件? │────否────┐ └────────┬────────┘ │ │是 │ ▼ │ ┌─────────────────┐ │ │ 保存筛选条件 │ │ └────────┬────────┘ │ │ │ └─────────┬─────────┘ │ ▼ 结束 ``` ## 2.3.2.7. 接口 ### 公共接口 ```csharp /// /// 物流元素筛选器 /// public class LogisticsElementFilter { /// /// 按类型筛选 /// /// 类型列表 /// 筛选结果 public List FilterByTypes(List types); /// /// 按可通行性筛选 /// /// 是否可通行 /// 筛选结果 public List FilterByTraversability(bool isTraversable); /// /// 按优先级范围筛选 /// /// 最小优先级 /// 最大优先级 /// 筛选结果 public List FilterByPriorityRange(int minPriority, int maxPriority); /// /// 执行组合筛选 /// /// 筛选条件 /// 筛选结果 public FilterResult ApplyFilter(FilterCriteria criteria); /// /// 高亮显示筛选结果 /// /// 要突出显示的元素 public void HighlightResults(List items); } ``` ### 数据结构接口 ```csharp /// /// 筛选条件 /// public class FilterCriteria { public List ElementTypes { get; set; } public bool? IsTraversable { get; set; } public int? MinPriority { get; set; } public int? MaxPriority { get; set; } public FilterCombinationMode CombinationMode { get; set; } } /// /// 筛选组合模式 /// public enum FilterCombinationMode { And, // 与 - 满足所有条件 Or // 或 - 满足任一条件 } ``` ## 2.3.2.8. 注释设计 ### 代码注释规范 ```csharp /// /// 筛选结果 /// public class FilterResult { /// /// 筛选匹配的元素列表 /// public List Items { get; set; } /// /// 匹配元素数量 /// public int Count => Items?.Count ?? 0; /// /// 筛选耗时 /// public TimeSpan ElapsedTime { get; set; } /// /// 应用的筛选条件 /// public FilterCriteria AppliedCriteria { get; set; } } ``` ## 2.3.2.9. 数据结构 ### FilterCriteria 结构 | 字段名 | 类型 | 说明 | |-------|------|------| | ElementTypes | List | 要筛选的元素类型 | | IsTraversable | bool? | 可通行性条件(null表示不限制) | | MinPriority | int? | 最小优先级 | | MaxPriority | int? | 最大优先级 | | CombinationMode | FilterCombinationMode | 条件组合模式 | ### FilterResult 结构 | 字段名 | 类型 | 说明 | |-------|------|------| | Items | List | 筛选结果的元素 | | Count | int | 结果数量 | | ElapsedTime | TimeSpan | 筛选耗时 | | AppliedCriteria | FilterCriteria | 应用的筛选条件 | ### SavedFilter 结构 | 字段名 | 类型 | 说明 | |-------|------|------| | Id | string | 保存的筛选ID | | Name | string | 筛选名称 | | Criteria | FilterCriteria | 筛选条件 | | CreateTime | DateTime | 创建时间 |