lixiaojun
2025-04-18 86fdd2266700b4f80a2d8b05b6a79d31802a7231
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
namespace Yw.WpfUI.Hydro
{
    /// <summary>
    /// 抽象3D水源
    /// </summary>
    internal class LogicalSource3D : LogicalNode3D
    {
        /// <summary>
        /// 
        /// </summary>
        public LogicalSource3D() { }
 
        /// <summary>
        /// 
        /// </summary>
        public LogicalSource3D
            (
                SourceL3d vmo,
                LogicalStateHelper stateHelper,
                LogicalMaterialHelper materialHelper,
                LogicalOverrideColorHelper overrideColorHelper,
                LogicalOverrideOpacityHelper overrideOpacityHelper,
                LogicalOverrideVisibleHelper overrideVisibleHelper
            ) : base(vmo, stateHelper, materialHelper, overrideColorHelper, overrideOpacityHelper, overrideVisibleHelper)
        {
 
        }
 
        /// <summary>
        /// Vmo
        /// </summary>
        public new SourceL3d Vmo
        {
            get { return _vmo as SourceL3d; }
            set { _vmo = value; }
        }
 
        /// <summary>
        /// 更新材质
        /// </summary>
        public override void UpdateMaterial()
        {
            var htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Normal.HtmlColor;
            var opacity = 1.0d;
            var state = _stateHelper.GetState(this.Vmo);
            if (state.HasFlag(eLogicalState.Color))
            {
                htmlColor = _overrideColorHelper.GetColor(this.Vmo);
            }
            if (state.HasFlag(eLogicalState.Opacity))
            {
                opacity = _overrideOpacityHelper.GetOpacity(this.Vmo);
            }
            if (state.HasFlag(eLogicalState.Selection))
            {
                htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Selection.HtmlColor;
            }
            if (state.HasFlag(eLogicalState.Highlight))
            {
                htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Highlight.HtmlColor;
            }
            if (state.HasFlag(eLogicalState.Adding))
            {
                htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Adding.HtmlColor;
            }
            if (state.HasFlag(eLogicalState.Editing))
            {
                htmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Editing.HtmlColor;
            }
            var material = _materialHelper.GetMaterial(htmlColor, opacity);
            this.Material = material;
        }
 
        /// <summary>
        /// 更新几何图形
        /// </summary>
        public override void UpdateGeometry()
        {
            var radius = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Normal.Radius;
            var state = _stateHelper.GetState(this.Vmo);
            if (state.HasFlag(eLogicalState.Selection))
            {
                radius = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Selection.Radius;
            }
            if (state.HasFlag(eLogicalState.Highlight))
            {
                radius = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.Highlight.Radius;
            }
 
            var pt = this.Vmo.Position.ToPoint3D();
            var x = radius * 4d;
            var y = radius * 4d;
            var z = radius * 2d;
            var builder = new MeshBuilder();
            builder.AddBox(pt, x, y, z);
            var geometry = builder.ToMesh();
            this.MeshGeometry = geometry;
        }
 
        /// <summary>
        /// 更新变换矩阵
        /// </summary>
        public override void UpdateTransform()
        {
 
        }
 
    }
}