# 自定义分层功能方案 ## 1. 背景 当前分层预览功能依赖模型的原生层属性,当模型缺少这些属性时无法有效分层。需要支持用户自定义的楼层分组逻辑,解决通用性问题。 ## 2. 设计思路 - **保持现有功能**:不修改现有分层检测代码,保证向后兼容 - **新增分层策略**:在现有分层策略基础上添加"自定义分层"选项 - **属性分类独立**:创建专门的"分层信息"自定义属性类,与物流属性分离 - **利用现有框架**:复用LayerManagementView的预览和操作框架 ## 3. 技术实现 ### 3.1 FloorAttributeManager 核心类 ```csharp public class FloorAttributeManager { // 设置楼层属性 public void SetFloorAttribute(ModelItem item, string floorLevel); // 查询楼层属性(支持继承查询) public string GetFloorLevel(ModelItem item, bool searchParents = true); // 批量设置楼层属性 public void SetFloorAttributeBatch(Dictionary floorMappings); // 获取所有楼层分组 public Dictionary> GetFloorGroups(); } ``` **核心功能:** - 基于COM API管理"分层信息"自定义属性 - 支持楼层继承查询(子节点向上查找父节点楼层信息) - 智能设置策略:优先设置容器节点,减少属性冗余 ### 3.2 自定义属性结构 **属性分类:** "分层信息" ``` - Floor_Level: "F1", "F2", "B1" 等楼层标识 - Zone: "North Wing", "South Wing" 等区域标识(可选) - Building: "Main Building", "Annex" 等建筑标识(可选) ``` ### 3.3 分层策略集成 **新增策略类:** ```csharp public class CustomFloorLayerStrategy : ILayerStrategy { public string Name => "自定义分层"; public Dictionary> 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:分层策略集成 3. **实现CustomFloorLayerStrategy** - 创建新的分层策略类 - 实现基于Floor_Level属性的分组逻辑 - 处理未分层对象的归类 4. **集成到现有分层系统** - 在LayerManagementViewModel中注册新策略 - 确保与现有预览框架的兼容性 - 测试分层结果的正确性 ### 阶段3:UI功能完善 5. **楼层属性设置界面** - 在ModelSettingsView中添加楼层设置面板 - 实现选中对象的楼层属性显示和编辑 - 提供楼层属性的清除功能 6. **批量操作支持** - 实现多选对象的批量楼层设置 - 添加楼层设置的进度显示 - 提供楼层属性的导入/导出功能 ## 5. 技术要点 ### 线程安全 - 所有Navisworks API调用在主UI线程执行 - COM API操作使用Dispatcher.Invoke包装 ### 属性继承策略 - 子节点优先使用自身楼层属性 - 自身无属性时向上查找父节点楼层属性 - 避免重复设置,减少存储开销 ### 与现有功能集成 - 复用现有分层预览框架,无需重新开发UI - 保持与分层导出功能的兼容性 - 支持与物流分类功能的协同工作 ## 6. 预期效果 - **解决通用性问题**:用户可以为任何模型自定义分层 - **操作简便性**:利用现有界面,学习成本低 - **扩展性良好**:为后续添加更多自定义分组策略奠定基础 - **性能可控**:智能设置策略,适应大模型场景