namespace Yw.WpfUI.Hydro { /// /// 简单状态管理器 /// internal class VisualStateManager { //缓存 private readonly Dictionary _cache = new(); /// /// 初始化 /// public void Initial(List allVisualList) { _cache.Clear(); allVisualList?.ForEach(x => _cache.Add(x, eVisualState.Normal)); } /// /// 设置 /// public void SetState(VisualL3d visual, eVisualState state) { if (visual == null) { return; } _cache[visual] = state; } /// /// 加载状态 /// public void LoadState(VisualL3d visual, eVisualState state) { var origin = GetState(visual); _cache[visual] = origin | state; } /// /// 卸载状态 /// public void UnloadState(VisualL3d visual, eVisualState state) { var origin = GetState(visual); _cache[visual] = origin ^ state; } /// /// 获取状态 /// public eVisualState GetState(VisualL3d visual) { if (visual == null) { return eVisualState.Normal; } if (!_cache.ContainsKey(visual)) { return eVisualState.Normal; } return _cache[visual]; } /// /// 获取有效状态 /// public eVisualState GetEffectState(VisualL3d visual) { var state = GetState(visual); if (state == eVisualState.None) { return eVisualState.Normal; } if ((state & eVisualState.Highlight) == eVisualState.Highlight) { return eVisualState.Highlight; } if ((state & eVisualState.Selection) == eVisualState.Selection) { return eVisualState.Selection; } if ((state & eVisualState.Override) == eVisualState.Override) { return eVisualState.Override; } return eVisualState.Normal; } } }