NavisworksTransport/doc/introduction/2.2.2_属性设置功能设计说明.md

9.2 KiB
Raw Permalink Blame History

2.2.2 属性设置功能设计说明

2.2.2.1. 模块描述

属性设置模块是物流"类别"设置功能的核心模块,负责支持通过选择树和三维视图选择的方式,选择物流路径相关的元素(如门、电梯、楼梯、通道等),设置为特定的物流分类,并支持类型、可通行性、速度限制、宽度限制、优先级等属性的设置。同时支持在工具箱中进行识别和筛选,支持物流分类属性的添加、编辑和清除。

该模块与CategoryAttributeManager、LogisticsControlPanel和ConfigManager紧密集成实现完整的物流属性管理功能。

2.2.2.2. 功能

核心功能

  1. 元素选择:通过选择树或三维视图选择物流元素
  2. 分类设置:设置元素的物流分类(门、电梯、楼梯、通道等)
  3. 属性配置:配置类型、可通行性、速度限制、宽度限制、优先级等属性
  4. 工具箱集成:在工具箱中进行识别和筛选
  5. 属性编辑:支持物流分类属性的添加、编辑和清除

子功能

功能编号 功能名称 功能描述
2.2.2.F1 选择树选择 通过选择树面板选择元素
2.2.2.F2 三维视图选择 在三维视图中点选元素
2.2.2.F3 分类设置 设置元素的物流分类类型
2.2.2.F4 可通行性设置 设置元素是否可通行
2.2.2.F5 优先级设置 设置元素的优先级1-10
2.2.2.F6 速度限制设置 设置元素的速度限制
2.2.2.F7 宽度限制设置 设置元素的宽度限制
2.2.2.F8 高度限制设置 设置元素的高度限制
2.2.2.F9 属性清除 清除元素的物流属性
2.2.2.F10 工具箱筛选 在工具箱中按分类筛选元素

2.2.2.3. 性能

性能指标

指标名称 目标值 说明
属性设置响应 < 200ms 设置单个元素属性的响应时间
批量设置时间 < 2秒 批量设置100个元素属性的时间
筛选查询时间 < 500ms 按分类筛选元素的查询时间
内存占用 < 100MB 属性管理的额外内存占用

性能优化策略

  1. 批量COM API调用减少开销
  2. 属性缓存机制
  3. 异步处理大批量操作

2.2.2.4. 输入输出项

1. 字段输入输出

输入字段

字段名 类型 必填 说明
Items ModelItemCollection 选中的模型元素
ElementType LogisticsElementType 物流元素类型
IsTraversable bool 是否可通行默认true
Priority int 优先级1-10默认5
HeightLimit double 高度限制默认3.0
SpeedLimit double 速度限制(米/秒默认0.8
WidthLimit double 宽度限制默认3.0

输出字段

字段名 类型 说明
AppliedCount int 成功应用属性的元素数量
FailedItems List 应用失败的元素列表
CurrentAttributes Dictionary<string, string> 当前元素的所有属性

2. 界面交互输入输出

界面输入

  • 元素选择操作
  • 分类类型下拉选择
  • 属性值输入
  • 批量操作确认

界面输出

  • 选中元素高亮显示
  • 属性设置结果提示
  • 当前属性值显示
  • 统计信息面板

2.2.2.5. 算法

属性设置算法

算法:设置物流元素属性
输入:模型元素集合,属性参数
输出:设置结果

1. 准备属性字典
   - 类型ElementType.ToString()
   - 可通行IsTraversable ? "是" : "否"
   - 优先级Priority.ToString()
   - 高度限制HeightLimit + " m"
   - 速度限制SpeedLimit + " m/s"
   - 宽度限制WidthLimit + " m"

2. 准备内部名称字典

3. 调用COM API批量设置属性

4. 如果是空轨类型,预计算基准路径

5. 返回应用统计

分类筛选算法

算法:按物流分类筛选元素
输入:分类类型
输出:匹配的元素列表

1. 创建搜索条件
2. 设置搜索条件:
   - PropertyName = "类型"
   - Condition = Equal
   - Value = 分类类型.ToString()
3. 执行搜索
4. 返回匹配的元素集合

2.2.2.6. 流程逻辑

开始
  │
  ▼
┌─────────────────┐
│  选择模型元素    │
└────────┬────────┘
         │
    ┌────┴────┐
    ▼         ▼
┌────────┐  ┌────────┐
│选择树  │  │三维视图│
└───┬────┘  └───┬────┘
    │           │
    └─────┬─────┘
          │
          ▼
┌─────────────────┐
│  显示选中预览    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  设置分类类型    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  配置属性参数    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  应用属性设置    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  显示设置结果    │
└────────┬────────┘
         │
         ▼
        结束

2.2.2.7. 接口

公共接口

/// <summary>
/// 类别属性管理器
/// </summary>
public class CategoryAttributeManager
{
    /// <summary>
    /// 添加物流属性(使用配置默认值)
    /// </summary>
    public static int AddLogisticsAttributes(
        ModelItemCollection items,
        LogisticsElementType elementType);
    
    /// <summary>
    /// 添加物流属性(指定所有参数)
    /// </summary>
    public static int AddLogisticsAttributes(
        ModelItemCollection items,
        LogisticsElementType elementType,
        bool isTraversable,
        int priority,
        double heightLimit,
        double speedLimit,
        double widthLimit);
    
    /// <summary>
    /// 清除物流属性
    /// </summary>
    public static int ClearLogisticsAttributes(ModelItemCollection items);
    
    /// <summary>
    /// 按类型获取物流元素
    /// </summary>
    public static List<ModelItem> GetLogisticsItemsByType(string typeName);
    
    /// <summary>
    /// 获取所有可通行物流元素
    /// </summary>
    public static List<ModelItem> GetAllTraversableLogisticsItems();
}

物流元素类型枚举

public enum LogisticsElementType
{
    空洞 = 0,      // 不可通行
    障碍物 = 1,    // 不可通行
    楼板 = 2,      // 基础可通行权重1.0
     = 3,        // 可通行权重1.2
    电梯 = 4,      // 可通行权重2.0
    楼梯 = 5,      // 可通行权重3.0
    通道 = 6,      // 可通行优先路径权重0.5
    走廊 = 7,      // 可通行权重0.6
    装卸区 = 8,    // 可通行权重0.8
    停车位 = 9,    // 可通行权重0.9
    空轨 = 10,     // 可通行权重0.7
    无关项 = 11    // 不参与网格生成
}

2.2.2.8. 注释设计

代码注释规范

/// <summary>
/// 物流属性定义
/// </summary>
public static class LogisticsProperties
{
    /// <summary>
    /// 物流元素类型
    /// </summary>
    public const string TYPE = "类型";
    
    /// <summary>
    /// 是否可通行
    /// </summary>
    public const string TRAVERSABLE = "可通行";
    
    /// <summary>
    /// 优先级1-10
    /// </summary>
    public const string PRIORITY = "优先级";
    
    /// <summary>
    /// 高度限制(米)
    /// </summary>
    public const string HEIGHT_LIMIT = "高度限制";
    
    /// <summary>
    /// 速度限制(米/秒)
    /// </summary>
    public const string SPEED_LIMIT = "速度限制";
    
    /// <summary>
    /// 宽度限制(米)
    /// </summary>
    public const string WIDTH_LIMIT = "宽度限制";
}

2.2.2.9. 数据结构

LogisticsElementType 枚举

名称 说明 权重
0 空洞 没有任何几何覆盖,不可通行 -
1 障碍物 墙体、柱子、设备等,不可通行 -
2 楼板 基础可通行区域 1.0
3 可通行 1.2
4 电梯 可通行 2.0
5 楼梯 可通行 3.0
6 通道 可通行,优先路径 0.5
7 走廊 可通行 0.6
8 装卸区 可通行 0.8
9 停车位 可通行 0.9
10 空轨 空中运输路径 0.7
11 无关项 不参与网格生成 -

LogisticsAttribute 结构

字段名 类型 说明
ElementType LogisticsElementType 元素类型
IsTraversable bool 是否可通行
Priority int 优先级
HeightLimitMeters double 高度限制(米)
SpeedLimitMetersPerSecond double 速度限制(米/秒)
WidthLimitMeters double 宽度限制(米)