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

113 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VisibilityHelper 使用指南
## 文件位置
`src/Utils/VisibilityHelper.cs`
## 用途
可见性管理器,负责 ModelItem 可见性控制的核心业务逻辑,包括显示全部、隔离显示、设置可见性等。
## 核心方法
### 显示所有项目
```csharp
// 显示所有模型项目(重置所有隐藏状态)
bool success = VisibilityHelper.ShowAllItems();
```
### 隔离显示
```csharp
// 仅显示指定的模型项集合,隐藏其他所有项
bool success = VisibilityHelper.IsolateSpecificItems(itemsToShow);
// 示例:隔离显示路径相关的对象
var pathItems = GetPathRelatedItems();
VisibilityHelper.IsolateSpecificItems(pathItems);
```
### 设置可见性
```csharp
// 设置指定模型项集合的可见性
bool success = VisibilityHelper.SetItemsVisibility(items, isHidden: true); // 隐藏
bool success = VisibilityHelper.SetItemsVisibility(items, isHidden: false); // 显示
```
## 使用示例
### 示例1隔离显示碰撞对象
```csharp
// 收集所有碰撞涉及的对象
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分步显示/隐藏
```csharp
// 隐藏所有障碍物
var obstacles = GetObstacleItems();
VisibilityHelper.SetItemsVisibility(obstacles, isHidden: true);
// 后续操作...
// 重新显示障碍物
VisibilityHelper.SetItemsVisibility(obstacles, isHidden: false);
```
### 示例3完整的显示重置流程
```csharp
// 清除所有高亮
ModelHighlightHelper.ClearAllHighlights();
// 显示所有项目
VisibilityHelper.ShowAllItems();
// 清除剖面盒
SectionClipHelper.ClearClipBox();
LogManager.Info("视图已重置");
```
### 示例4通道可视化
```csharp
// 只显示通道相关的对象
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` 表示成功/失败,内部已处理异常