NavisworksTransport/.agents/skills/project-tools/utils/ModelHighlightHelper.md
2026-02-25 02:01:38 +08:00

131 lines
3.7 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.

# ModelHighlightHelper 使用指南
## 文件位置
`src/Utils/ModelHighlightHelper.cs`
## 用途
统一管理 Navisworks 临时高亮,支持按类别高亮与清除。使用不同颜色区分不同类型的对象(碰撞结果、通道预览、动画物体等)。
## 颜色定义
| 类别 | 颜色 | RGB | 用途 |
|------|------|-----|------|
| `PrecomputeCollisionResultsCategory` | Material Purple | (156, 39, 176) | 预计算碰撞结果 |
| `ManualTargetsCategory` | 橙色 | (255, 170, 0) | 手工指定对象 |
| `AnimatedObjectCategory` | Amber/Yellow | (255, 193, 7) | 动画物体 |
| `ClashDetectiveResultsCategory` | 红色 | Color.Red | ClashDetective碰撞结果 |
| `ChannelPreviewCategory` | 绿色 | Color.Green | 通道预览 |
| `excludedObjects` | Material Green | (76, 175, 80) | 排除对象 |
## 核心方法
### 基础高亮操作
```csharp
// 高亮指定对象集合(使用类别默认颜色)
ModelHighlightHelper.HighlightItems("myCategory", modelItems);
// 清除指定类别的高亮
ModelHighlightHelper.ClearCategory("myCategory");
// 清除所有高亮
ModelHighlightHelper.ClearAllHighlights();
// 清除碰撞相关高亮
ModelHighlightHelper.ClearCollisionHighlights();
```
### 碰撞结果高亮
```csharp
// 按类别管理碰撞高亮
ModelHighlightHelper.ManageCollisionHighlightsByCategory(
"collisionResults",
collisionResultsList,
clearOtherCategories: false
);
// 高亮ClashDetective结果
ModelHighlightHelper.HighlightClashDetectiveResults(
testName,
getResultsFunc
);
// 清除ClashDetective高亮
ModelHighlightHelper.ClearClashDetectiveHighlights();
```
### 获取高亮状态
```csharp
// 获取当前高亮快照
var highlights = ModelHighlightHelper.GetActiveHighlightSnapshot();
foreach (var info in highlights)
{
LogManager.Info($"类别: {info.Category}, 颜色: {info.Color}, 数量: {info.Count}");
}
// 获取类别颜色
Color color = ModelHighlightHelper.GetCategoryColor("myCategory");
```
## 使用示例
### 示例1高亮碰撞检测结果
```csharp
// 获取碰撞结果
var collisions = collisionDetector.DetectCollisions();
// 高亮显示碰撞对象(使用预计算碰撞类别)
var collidingItems = collisions.Select(c => c.Item2).ToList();
ModelHighlightHelper.HighlightItems(
ModelHighlightHelper.PrecomputeCollisionResultsCategory,
collidingItems
);
// 操作完成后清除高亮
ModelHighlightHelper.ClearCategory(ModelHighlightHelper.PrecomputeCollisionResultsCategory);
```
### 示例2高亮通道预览
```csharp
// 高亮显示通道对象
var channelItems = GetChannelItems();
ModelHighlightHelper.HighlightItems(
ModelHighlightHelper.ChannelPreviewCategory,
channelItems
);
// 清除时只清除通道预览,不影响其他高亮
ModelHighlightHelper.ClearCategory(ModelHighlightHelper.ChannelPreviewCategory);
```
### 示例3多类别管理
```csharp
// 同时高亮不同类型对象
ModelHighlightHelper.HighlightItems("doors", doorItems);
ModelHighlightHelper.HighlightItems("elevators", elevatorItems);
ModelHighlightHelper.HighlightItems("stairs", stairItems);
// 只清除门的高亮
ModelHighlightHelper.ClearCategory("doors");
// 清除所有高亮
ModelHighlightHelper.ClearAllHighlights();
```
## 注意事项
1. **类别颜色自动管理**:每个类别有预定义颜色,也可以使用自定义类别(默认白色)
2. **自动去重**:同一对象在不同类别中可能被多次高亮,后设置的会覆盖先前的
3. **线程安全**:内部使用锁保护,可从多线程调用
4. **清除策略**
- 清除单个类别:`ClearCategory()`
- 清除所有碰撞相关:`ClearCollisionHighlights()`
- 清除全部:`ClearAllHighlights()`