NavisworksTransport/doc/working/自定义分层功能方案20250826.md

4.3 KiB
Raw Blame History

自定义分层功能方案

1. 背景

当前分层预览功能依赖模型的原生层属性,当模型缺少这些属性时无法有效分层。需要支持用户自定义的楼层分组逻辑,解决通用性问题。

2. 设计思路

  • 保持现有功能:不修改现有分层检测代码,保证向后兼容
  • 新增分层策略:在现有分层策略基础上添加"自定义分层"选项
  • 属性分类独立:创建专门的"分层信息"自定义属性类,与物流属性分离
  • 利用现有框架复用LayerManagementView的预览和操作框架

3. 技术实现

3.1 FloorAttributeManager 核心类

public class FloorAttributeManager
{
    // 设置楼层属性
    public void SetFloorAttribute(ModelItem item, string floorLevel);
    
    // 查询楼层属性(支持继承查询)
    public string GetFloorLevel(ModelItem item, bool searchParents = true);
    
    // 批量设置楼层属性
    public void SetFloorAttributeBatch(Dictionary<ModelItem, string> floorMappings);
    
    // 获取所有楼层分组
    public Dictionary<string, List<ModelItem>> GetFloorGroups();
}

核心功能:

  • 基于COM API管理"分层信息"自定义属性
  • 支持楼层继承查询(子节点向上查找父节点楼层信息)
  • 智能设置策略:优先设置容器节点,减少属性冗余

3.2 自定义属性结构

属性分类: "分层信息"

- Floor_Level: "F1", "F2", "B1" 等楼层标识
- Zone: "North Wing", "South Wing" 等区域标识(可选)
- Building: "Main Building", "Annex" 等建筑标识(可选)

3.3 分层策略集成

新增策略类:

public class CustomFloorLayerStrategy : ILayerStrategy
{
    public string Name => "自定义分层";
    
    public Dictionary<string, List<ModelItem>> GetLayers()
    {
        var floorManager = new FloorAttributeManager();
        return floorManager.GetFloorGroups();
    }
}

集成到现有系统:

  • 在LayerManagementViewModel的策略列表中添加CustomFloorLayerStrategy
  • 利用现有的预览列表显示分层结果
  • 复用现有的分层保存和导出功能

3.4 UI集成点

ModelSettingsView扩展

  • 添加楼层属性设置面板
  • 支持选中对象的楼层属性编辑
  • 提供批量楼层设置功能

LayerManagementView利用

  • 在分层策略下拉框中显示"自定义分层"选项
  • 当选择该策略时,预览列表显示基于楼层属性的分组
  • 保持现有的可见性控制和导出功能

4. 实现方案

阶段1核心属性系统

  1. 创建FloorAttributeManager类

    • 实现基于COM API的自定义属性CRUD操作
    • 提供楼层继承查询功能
    • 支持线程安全的批量操作
  2. 属性操作封装

    • 封装"分层信息"属性的标准操作
    • 处理COM API的选择状态管理
    • 实现错误处理和异常管理

阶段2分层策略集成

  1. 实现CustomFloorLayerStrategy

    • 创建新的分层策略类
    • 实现基于Floor_Level属性的分组逻辑
    • 处理未分层对象的归类
  2. 集成到现有分层系统

    • 在LayerManagementViewModel中注册新策略
    • 确保与现有预览框架的兼容性
    • 测试分层结果的正确性

阶段3UI功能完善

  1. 楼层属性设置界面

    • 在ModelSettingsView中添加楼层设置面板
    • 实现选中对象的楼层属性显示和编辑
    • 提供楼层属性的清除功能
  2. 批量操作支持

    • 实现多选对象的批量楼层设置
    • 添加楼层设置的进度显示
    • 提供楼层属性的导入/导出功能

5. 技术要点

线程安全

  • 所有Navisworks API调用在主UI线程执行
  • COM API操作使用Dispatcher.Invoke包装

属性继承策略

  • 子节点优先使用自身楼层属性
  • 自身无属性时向上查找父节点楼层属性
  • 避免重复设置,减少存储开销

与现有功能集成

  • 复用现有分层预览框架无需重新开发UI
  • 保持与分层导出功能的兼容性
  • 支持与物流分类功能的协同工作

6. 预期效果

  • 解决通用性问题:用户可以为任何模型自定义分层
  • 操作简便性:利用现有界面,学习成本低
  • 扩展性良好:为后续添加更多自定义分组策略奠定基础
  • 性能可控:智能设置策略,适应大模型场景