# 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()`
