lixiaojun
2024-11-11 00bcee19c5dff21a9848c16b45419efb74bf07e9
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
namespace Yw.EPAnet
{
    /// <summary>
    /// 节点
    /// </summary>
    public class Node : Visual
    {
        /// <summary>
        /// 
        /// </summary>
        public Node() { }
 
        /// <summary>
        /// 
        /// </summary>
        public Node(Node ths) : base(ths)
        {
            Quality = ths.Quality;
            Position = ths.Position;
            Links = ths.Links;
        }
 
 
        /// <summary>
        /// 初始水质
        /// </summary>
        public double Quality { get; set; }
 
        /// <summary>
        /// 位置
        /// </summary>
        public Position2d Position { get; set; }
 
        /// <summary>
        /// 连接的管段集
        /// <summary>
        public List<Link> Links { get; set; }
 
 
        /// <summary>
        /// 获取下游管段列表
        /// </summary>
        public virtual List<Link> GetNextLinks()
        {
            if (this.Links == null)
            {
                return default;
            }
            return this.Links.Where(x => x.StartNode == this).ToList();
        }
 
        /// <summary>
        /// 获取下游管段列表
        /// </summary>
        public virtual List<Link> GetNextLinks(List<CalcuLink> allCalcuLinks)
        {
            if (allCalcuLinks == null || allCalcuLinks.Count < 1)
            {
                return GetNextLinks();
            }
            if (this.Links == null)
            {
                return default;
            }
            var nextLinks = new List<Link>();
            foreach (var link in this.Links)
            {
                var calcLink = allCalcuLinks.Find(x => x.Id == link.Id);
                if (calcLink != null)
                {
                    if (link.StartNode == this)
                    {
                        if (calcLink.Flow > 0)
                        {
                            nextLinks.Add(link);
                        }
                    }
                    else if (link.EndNode == this)
                    {
                        if (calcLink.Flow < 0)
                        {
                            nextLinks.Add(link);
                        }
                    }
                }
            }
            return nextLinks;
        }
 
        /// <summary>
        /// 获取上游管段列表
        /// </summary>
        public virtual List<Link> GetPrevLinks()
        {
            if (this.Links == null)
            {
                return default;
            }
            return this.Links.Where(x => x.EndNode == this).ToList();
        }
 
        /// <summary>
        /// 获取上游管段列表
        /// </summary>
        public virtual List<Link> GetPrevLinks(List<CalcuLink> allCalcuLinks)
        {
            if (allCalcuLinks == null || allCalcuLinks.Count < 1)
            {
                return GetPrevLinks();
            }
            if (this.Links == null)
            {
                return default;
            }
            var prevLinks = new List<Link>();
            foreach (var link in this.Links)
            {
                var calcLink = allCalcuLinks.Find(x => x.Id == link.Id);
                if (calcLink != null)
                {
                    if (link.StartNode == this)
                    {
                        if (calcLink.Flow < 0)
                        {
                            prevLinks.Add(link);
                        }
                    }
                    else if (link.EndNode == this)
                    {
                        if (calcLink.Flow > 0)
                        {
                            prevLinks.Add(link);
                        }
                    }
                }
            }
            return prevLinks;
        }
 
    }
}