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

151 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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