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