3.7 KiB
3.7 KiB
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) | 排除对象 |
核心方法
基础高亮操作
// 高亮指定对象集合(使用类别默认颜色)
ModelHighlightHelper.HighlightItems("myCategory", modelItems);
// 清除指定类别的高亮
ModelHighlightHelper.ClearCategory("myCategory");
// 清除所有高亮
ModelHighlightHelper.ClearAllHighlights();
// 清除碰撞相关高亮
ModelHighlightHelper.ClearCollisionHighlights();
碰撞结果高亮
// 按类别管理碰撞高亮
ModelHighlightHelper.ManageCollisionHighlightsByCategory(
"collisionResults",
collisionResultsList,
clearOtherCategories: false
);
// 高亮ClashDetective结果
ModelHighlightHelper.HighlightClashDetectiveResults(
testName,
getResultsFunc
);
// 清除ClashDetective高亮
ModelHighlightHelper.ClearClashDetectiveHighlights();
获取高亮状态
// 获取当前高亮快照
var highlights = ModelHighlightHelper.GetActiveHighlightSnapshot();
foreach (var info in highlights)
{
LogManager.Info($"类别: {info.Category}, 颜色: {info.Color}, 数量: {info.Count}");
}
// 获取类别颜色
Color color = ModelHighlightHelper.GetCategoryColor("myCategory");
使用示例
示例1:高亮碰撞检测结果
// 获取碰撞结果
var collisions = collisionDetector.DetectCollisions();
// 高亮显示碰撞对象(使用预计算碰撞类别)
var collidingItems = collisions.Select(c => c.Item2).ToList();
ModelHighlightHelper.HighlightItems(
ModelHighlightHelper.PrecomputeCollisionResultsCategory,
collidingItems
);
// 操作完成后清除高亮
ModelHighlightHelper.ClearCategory(ModelHighlightHelper.PrecomputeCollisionResultsCategory);
示例2:高亮通道预览
// 高亮显示通道对象
var channelItems = GetChannelItems();
ModelHighlightHelper.HighlightItems(
ModelHighlightHelper.ChannelPreviewCategory,
channelItems
);
// 清除时只清除通道预览,不影响其他高亮
ModelHighlightHelper.ClearCategory(ModelHighlightHelper.ChannelPreviewCategory);
示例3:多类别管理
// 同时高亮不同类型对象
ModelHighlightHelper.HighlightItems("doors", doorItems);
ModelHighlightHelper.HighlightItems("elevators", elevatorItems);
ModelHighlightHelper.HighlightItems("stairs", stairItems);
// 只清除门的高亮
ModelHighlightHelper.ClearCategory("doors");
// 清除所有高亮
ModelHighlightHelper.ClearAllHighlights();
注意事项
- 类别颜色自动管理:每个类别有预定义颜色,也可以使用自定义类别(默认白色)
- 自动去重:同一对象在不同类别中可能被多次高亮,后设置的会覆盖先前的
- 线程安全:内部使用锁保护,可从多线程调用
- 清除策略:
- 清除单个类别:
ClearCategory() - 清除所有碰撞相关:
ClearCollisionHighlights() - 清除全部:
ClearAllHighlights()
- 清除单个类别: