4.3 KiB
4.3 KiB
自定义分层功能方案
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:核心属性系统
-
创建FloorAttributeManager类
- 实现基于COM API的自定义属性CRUD操作
- 提供楼层继承查询功能
- 支持线程安全的批量操作
-
属性操作封装
- 封装"分层信息"属性的标准操作
- 处理COM API的选择状态管理
- 实现错误处理和异常管理
阶段2:分层策略集成
-
实现CustomFloorLayerStrategy
- 创建新的分层策略类
- 实现基于Floor_Level属性的分组逻辑
- 处理未分层对象的归类
-
集成到现有分层系统
- 在LayerManagementViewModel中注册新策略
- 确保与现有预览框架的兼容性
- 测试分层结果的正确性
阶段3:UI功能完善
-
楼层属性设置界面
- 在ModelSettingsView中添加楼层设置面板
- 实现选中对象的楼层属性显示和编辑
- 提供楼层属性的清除功能
-
批量操作支持
- 实现多选对象的批量楼层设置
- 添加楼层设置的进度显示
- 提供楼层属性的导入/导出功能
5. 技术要点
线程安全
- 所有Navisworks API调用在主UI线程执行
- COM API操作使用Dispatcher.Invoke包装
属性继承策略
- 子节点优先使用自身楼层属性
- 自身无属性时向上查找父节点楼层属性
- 避免重复设置,减少存储开销
与现有功能集成
- 复用现有分层预览框架,无需重新开发UI
- 保持与分层导出功能的兼容性
- 支持与物流分类功能的协同工作
6. 预期效果
- 解决通用性问题:用户可以为任何模型自定义分层
- 操作简便性:利用现有界面,学习成本低
- 扩展性良好:为后续添加更多自定义分组策略奠定基础
- 性能可控:智能设置策略,适应大模型场景