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

2.9 KiB
Raw Blame History

VisibilityHelper 使用指南

文件位置

src/Utils/VisibilityHelper.cs

用途

可见性管理器,负责 ModelItem 可见性控制的核心业务逻辑,包括显示全部、隔离显示、设置可见性等。

核心方法

显示所有项目

// 显示所有模型项目(重置所有隐藏状态)
bool success = VisibilityHelper.ShowAllItems();

隔离显示

// 仅显示指定的模型项集合,隐藏其他所有项
bool success = VisibilityHelper.IsolateSpecificItems(itemsToShow);

// 示例:隔离显示路径相关的对象
var pathItems = GetPathRelatedItems();
VisibilityHelper.IsolateSpecificItems(pathItems);

设置可见性

// 设置指定模型项集合的可见性
bool success = VisibilityHelper.SetItemsVisibility(items, isHidden: true);   // 隐藏
bool success = VisibilityHelper.SetItemsVisibility(items, isHidden: false);  // 显示

使用示例

示例1隔离显示碰撞对象

// 收集所有碰撞涉及的对象
var collisionItems = new ModelItemCollection();
foreach (var collision in collisionResults)
{
    if (collision.Item1 != null) collisionItems.Add(collision.Item1);
    if (collision.Item2 != null) collisionItems.Add(collision.Item2);
}

// 只显示碰撞对象
VisibilityHelper.IsolateSpecificItems(collisionItems);

// 高亮碰撞对象
ModelHighlightHelper.HighlightItems("collisions", collisionItems);

示例2分步显示/隐藏

// 隐藏所有障碍物
var obstacles = GetObstacleItems();
VisibilityHelper.SetItemsVisibility(obstacles, isHidden: true);

// 后续操作...

// 重新显示障碍物
VisibilityHelper.SetItemsVisibility(obstacles, isHidden: false);

示例3完整的显示重置流程

// 清除所有高亮
ModelHighlightHelper.ClearAllHighlights();

// 显示所有项目
VisibilityHelper.ShowAllItems();

// 清除剖面盒
SectionClipHelper.ClearClipBox();

LogManager.Info("视图已重置");

示例4通道可视化

// 只显示通道相关的对象
var channelItems = GetChannelItems();
VisibilityHelper.IsolateSpecificItems(channelItems);

// 调整视角到通道
ViewpointHelper.AdjustViewpointToPathCenter(channelPath);

// 生成通道预览图
string screenshot = PathHelper.GenerateSceneScreenshot(
    "channel_view", 1920, 1080, ImageFormat.Png
);

// 恢复显示所有
VisibilityHelper.ShowAllItems();

注意事项

  1. 隔离显示原理IsolateSpecificItems 会先显示所有,然后隐藏不需要的项目
  2. 祖先节点处理:隔离显示会自动包含选中项的所有祖先节点,确保路径完整
  3. 性能考虑:大量项目的可见性操作可能影响性能,建议批量处理
  4. 与剖面盒配合:可以与 SectionClipHelper 配合使用,进一步减少可见对象
  5. 错误处理:所有方法都返回 bool 表示成功/失败,内部已处理异常