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

3.7 KiB
Raw Blame History

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();

注意事项

  1. 类别颜色自动管理:每个类别有预定义颜色,也可以使用自定义类别(默认白色)
  2. 自动去重:同一对象在不同类别中可能被多次高亮,后设置的会覆盖先前的
  3. 线程安全:内部使用锁保护,可从多线程调用
  4. 清除策略
    • 清除单个类别:ClearCategory()
    • 清除所有碰撞相关:ClearCollisionHighlights()
    • 清除全部:ClearAllHighlights()