NavisworksTransport/doc/introduction/2.3.2_物流元素筛选功能设计说明.md

9.2 KiB
Raw Permalink Blame History

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. 接口

公共接口

/// <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 创建时间