300 lines
9.2 KiB
Markdown
300 lines
9.2 KiB
Markdown
# 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<LogisticsElementType> | 否 | 要筛选的类型列表 |
|
||
| IsTraversable | bool? | 否 | 可通行性筛选条件 |
|
||
| MinPriority | int? | 否 | 最小优先级 |
|
||
| MaxPriority | int? | 否 | 最大优先级 |
|
||
|
||
#### 输出字段
|
||
| 字段名 | 类型 | 说明 |
|
||
|-------|------|------|
|
||
| FilteredItems | List<ModelItem> | 筛选结果的元素列表 |
|
||
| 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
|
||
/// <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);
|
||
}
|
||
```
|
||
|
||
### 数据结构接口
|
||
```csharp
|
||
/// <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. 注释设计
|
||
|
||
### 代码注释规范
|
||
```csharp
|
||
/// <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<LogisticsElementType> | 要筛选的元素类型 |
|
||
| IsTraversable | bool? | 可通行性条件(null表示不限制) |
|
||
| MinPriority | int? | 最小优先级 |
|
||
| MaxPriority | int? | 最大优先级 |
|
||
| CombinationMode | FilterCombinationMode | 条件组合模式 |
|
||
|
||
### FilterResult 结构
|
||
| 字段名 | 类型 | 说明 |
|
||
|-------|------|------|
|
||
| Items | List<ModelItem> | 筛选结果的元素 |
|
||
| Count | int | 结果数量 |
|
||
| ElapsedTime | TimeSpan | 筛选耗时 |
|
||
| AppliedCriteria | FilterCriteria | 应用的筛选条件 |
|
||
|
||
### SavedFilter 结构
|
||
| 字段名 | 类型 | 说明 |
|
||
|-------|------|------|
|
||
| Id | string | 保存的筛选ID |
|
||
| Name | string | 筛选名称 |
|
||
| Criteria | FilterCriteria | 筛选条件 |
|
||
| CreateTime | DateTime | 创建时间 |
|