lixiaojun
2025-04-07 33efd807b5f5aac98ce736ccec002e190e5dd175
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
namespace Yw.WpfUI.Hydro
{
    /// <summary>
    /// 简单状态管理器
    /// </summary>
    internal class VisualStateManager
    {
 
        //缓存
        private readonly Dictionary<VisualL3d, eVisualState> _cache = new();
 
        /// <summary>
        /// 初始化
        /// </summary>
        public void Initial(List<VisualL3d> allVisualList)
        {
            _cache.Clear();
            allVisualList?.ForEach(x => _cache.Add(x, eVisualState.Normal));
        }
 
        /// <summary>
        /// 设置
        /// </summary>
        public void SetState(VisualL3d visual, eVisualState state)
        {
            if (visual == null)
            {
                return;
            }
            _cache[visual] = state;
        }
 
        /// <summary>
        /// 加载状态
        /// </summary>
        public void LoadState(VisualL3d visual, eVisualState state)
        {
            var origin = GetState(visual);
            _cache[visual] = origin | state;
        }
 
        /// <summary>
        /// 卸载状态
        /// </summary>
        public void UnloadState(VisualL3d visual, eVisualState state)
        {
            var origin = GetState(visual);
            _cache[visual] = origin ^ state;
        }
 
        /// <summary>
        /// 获取状态
        /// </summary>
        public eVisualState GetState(VisualL3d visual)
        {
            if (visual == null)
            {
                return eVisualState.Normal;
            }
            if (!_cache.ContainsKey(visual))
            {
                return eVisualState.Normal;
            }
            return _cache[visual];
        }
 
        /// <summary>
        /// 获取有效状态
        /// </summary>
        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.OverrideColor) == eVisualState.OverrideColor)
            {
                return eVisualState.OverrideColor;
            }
            return eVisualState.Normal;
        }
 
 
    }
}