2.3.2 物流元素筛选功能设计说明
2.3.2.1. 模块描述
物流元素筛选模块是层级创建功能的重要模块,负责支持通过预设的物流分类属性筛选出物流路径相关元素。该模块使用户能够快速定位和查看具有特定物流属性的模型元素,便于进行路径规划前的元素检查和管理。
该模块与CategoryAttributeManager、NavisworksSelectionHelper和搜索系统紧密集成,实现基于属性的高效元素筛选。
2.3.2.2. 功能
核心功能
- 按类型筛选:按物流元素类型筛选(门、电梯、楼梯、通道等)
- 按属性筛选:按可通行性、优先级等属性筛选
- 组合筛选:支持多条件组合筛选
- 筛选结果高亮:高亮显示筛选结果
- 筛选保存:保存常用的筛选条件
子功能
| 功能编号 |
功能名称 |
功能描述 |
| 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 |
筛选过程的额外内存占用 |
性能优化策略
- 使用Navisworks搜索API进行高效筛选
- 筛选结果缓存
- 增量筛选减少重复计算
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. 接口
公共接口
/// <summary>
/// 物流元素筛选器
/// </summary>
public class LogisticsElementFilter
{
/// <summary>
/// 按类型筛选
/// </summary>
/// <param name="types">类型列表</param>
/// <returns>筛选结果</returns>
public List<ModelItem> FilterByTypes(List<LogisticsElementType> types);
/// <summary>
/// 按可通行性筛选
/// </summary>
/// <param name="isTraversable">是否可通行</param>
/// <returns>筛选结果</returns>
public List<ModelItem> FilterByTraversability(bool isTraversable);
/// <summary>
/// 按优先级范围筛选
/// </summary>
/// <param name="minPriority">最小优先级</param>
/// <param name="maxPriority">最大优先级</param>
/// <returns>筛选结果</returns>
public List<ModelItem> FilterByPriorityRange(int minPriority, int maxPriority);
/// <summary>
/// 执行组合筛选
/// </summary>
/// <param name="criteria">筛选条件</param>
/// <returns>筛选结果</returns>
public FilterResult ApplyFilter(FilterCriteria criteria);
/// <summary>
/// 高亮显示筛选结果
/// </summary>
/// <param name="items">要突出显示的元素</param>
public void HighlightResults(List<ModelItem> items);
}
数据结构接口
/// <summary>
/// 筛选条件
/// </summary>
public class FilterCriteria
{
public List<LogisticsElementType> ElementTypes { get; set; }
public bool? IsTraversable { get; set; }
public int? MinPriority { get; set; }
public int? MaxPriority { get; set; }
public FilterCombinationMode CombinationMode { get; set; }
}
/// <summary>
/// 筛选组合模式
/// </summary>
public enum FilterCombinationMode
{
And, // 与 - 满足所有条件
Or // 或 - 满足任一条件
}
2.3.2.8. 注释设计
代码注释规范
/// <summary>
/// 筛选结果
/// </summary>
public class FilterResult
{
/// <summary>
/// 筛选匹配的元素列表
/// </summary>
public List<ModelItem> Items { get; set; }
/// <summary>
/// 匹配元素数量
/// </summary>
public int Count => Items?.Count ?? 0;
/// <summary>
/// 筛选耗时
/// </summary>
public TimeSpan ElapsedTime { get; set; }
/// <summary>
/// 应用的筛选条件
/// </summary>
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 |
创建时间 |