NavisworksTransport/doc/bugfixes/优化选择提示信息_完成报告.md

93 lines
3.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.

# 优化选择提示信息 - 完成报告
## 优化目标
优化选择提示信息,在"已选择X个模型"后面添加节点名称,让用户更清楚当前操作的对象。
## 实现方案
### 1. 创建通用格式化函数
`LayerManagementViewModel.cs``ModelSettingsViewModel.cs` 中新增了 `FormatSelectionText` 方法:
```csharp
/// <summary>
/// 格式化选择状态文本,包含节点名称
/// </summary>
/// <param name="count">选择数量</param>
/// <param name="selectedItems">选择的项目集合</param>
/// <param name="unitName">单位名称(如"个模型"、"个节点"</param>
/// <param name="maxDisplayCount">最大显示名称数量</param>
/// <param name="maxTotalLength">最大总长度</param>
/// <returns>格式化后的选择状态文本</returns>
private string FormatSelectionText(int count, IEnumerable<ModelItem> selectedItems = null,
string unitName = "个模型", int maxDisplayCount = 3, int maxTotalLength = 80)
```
### 2. 优化显示策略
- **单选时**: 显示完整节点名称超过50字符时截断
- **多选时**: 显示前几个名称,超过一定长度或数量时用省略号
- **智能截断**: 避免信息过长影响UI显示
### 3. 更新数据结构
扩展了 `SelectNodesResult` 类,增加了 `SelectedItems` 属性来保存选择的项目信息:
```csharp
public class SelectNodesResult
{
public bool IsSuccess { get; set; }
public int Count { get; set; }
public List<ModelItem> SelectedItems { get; set; } = new List<ModelItem>();
public string ErrorMessage { get; set; }
}
```
### 4. 优化涉及的区域
#### LayerManagementViewModel.cs 优化点:
1. **节点选择区域**第801行选择节点时的状态显示
2. **楼层属性设置区域**第2314行和第2372行楼层属性相关的模型选择状态
3. **选择集保存区域**:选择集保存功能的选择状态显示
#### ModelSettingsViewModel.cs 优化点:
1. **模型选择状态显示**第329行物流属性设置相关的模型选择状态
## 优化效果示例
### 优化前:
- "已选择1个模型"
- "已选择5个模型"
### 优化后:
- "已选择1个模型: 主楼-一层-墙体-W001"
- "已选择2个模型: Wall_001, Door_002"
- "已选择5个模型: Wall_001, Door_002, Window_003..."
### 长名称处理:
- 单选超长: "已选择1个模型: 这是一个非常长的节点名称包含很多详细信息..."
- 多选智能截断: "已选择8个模型: Node1, Node2, Very_Long_Node_Name..."
## 技术细节
### 1. 线程安全处理
- 业务逻辑在后台线程执行避免UI阻塞
- 使用 `UIStateManager.ExecuteUIUpdateAsync()` 确保UI更新在主线程
### 2. 错误处理
- 保持原有的错误处理逻辑
- 当获取节点信息失败时,仍显示基本的数量信息
### 3. 性能优化
- 使用 `Take(maxDisplayCount + 1)` 限制处理的项目数量
- 智能截断避免过长字符串的处理
## 代码兼容性
- 保持向后兼容,不影响现有功能
- 编译测试通过,无破坏性更改
- 遵循现有的错误处理和日志记录模式
## 结论
成功实现了选择提示信息的优化,用户现在可以清楚地看到:
1. 选择了多少个对象
2. 选择的具体对象名称
3. 对于多选情况的智能显示
这大大提升了用户体验,让用户能够更清楚地了解当前的操作对象。