131 lines
3.7 KiB
Markdown
131 lines
3.7 KiB
Markdown
# 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()`
|