duheng
2024-06-06 ccc0d2319b71cc41f4d9d2f86dff28da918987da
WinfrmUI/Hydro.MapView/MapViewNetWork.cs
@@ -18,6 +18,7 @@
using System.Runtime.InteropServices;
using Hydro.HydraulicOptimizer;
using Hydro.Core;
using System.Xml.Linq;
namespace Hydro.MapView
{
@@ -26,11 +27,11 @@
    {
        bool use_old = false;
        public string Name;
        private LinkViewModelList _links=new LinkViewModelList();
        public LinkViewModelList Links { get { return _links; } set { base.Links= _links = value; } }
        private LinkViewModelList _links = new LinkViewModelList();
        public LinkViewModelList Links { get { return _links; } set { base.Links = _links = value; } }
        private NodeViewModelList _nodes = new NodeViewModelList();
        public NodeViewModelList Nodes { get { return _nodes; }set { base.Nodes = _nodes = value; } }
        public NodeViewModelList Nodes { get { return _nodes; } set { base.Nodes = _nodes = value; } }
        public NodeViewModel StartPoint { get; set; }
@@ -254,9 +255,9 @@
            {
                return false;
            }
        }
        public string WriteToJson()
        {
@@ -571,7 +572,7 @@
                EndPoint = network.EndPoint;
            }
        }
        public List<IBaseViewModel> Add(MapViewNetWork net0, PointF3D offset = null, bool isCopy = false)
        public List<IBaseViewModel> Add(MapViewNetWork net0, PointF3D offset = null, bool isCopy = false, NodeViewModel ConnectNode = null)
        {
            if (offset == null)
            {
@@ -615,6 +616,10 @@
                Hash_ID.Add(l.ID);
                list.Add(l);
            });
            if (ConnectNode != null)
            {
                list.Add(AddPipe(ConnectNode, net.StartPoint));
            }
            //BuildRelation();
            return list;
        }
@@ -712,7 +717,7 @@
                List<BaseModel> objects = new List<BaseModel>();
                objects.AddRange(Nodes);
                objects.AddRange(Links);
                return objects.Select(o=>(IBaseViewModel)o).ToList();
                return objects.Select(o => (IBaseViewModel)o).ToList();
            }
        }
        public void Rename()
@@ -731,7 +736,7 @@
        public void LoadRepeaters(int MaxLevel, dict<string, dynamic> param, Dictionary<TemplateType, bool> viewModel, bool ViewMode = true)
        {
            repeaters.ForEach(r =>
            {
@@ -746,7 +751,7 @@
                    Add(r);
                    r.Visible = false;
                }
            });
        }
@@ -765,7 +770,7 @@
        // 定义 visited 字典记录已访问过的节点和待访问的节点队列
        Dictionary<NodeViewModel, bool> visited;//= new Dictionary<Node, bool>();
        private bool _isCalculated=false;
        private bool _isCalculated = false;
        public void BFS(MapViewNetWork net, NodeViewModel startNode, Vector3 vector)
        {
@@ -804,7 +809,7 @@
        public List<NodeViewModel> GetNode(string node)
        {
            return Nodes.FindAll(n => n.ID == node).Select(n=> (NodeViewModel)n).ToList();
            return Nodes.FindAll(n => n.ID == node).Select(n => (NodeViewModel)n).ToList();
        }
        public List<TimePoint> Calc(string inpPath, string configPath = null)
@@ -847,7 +852,7 @@
            SetLinkFromWparam(this, list, "Velocity");
            SetLinkFromWparam(this, list, "Headloss");
            Links.ForEach(l=>
            Links.ForEach(l =>
            {
                l.EN_HEADLOSS_MINOR = (float)Math.Round(l.MinorLoss * Math.Pow(l.EN_VELOCITY, 2) / 2 / 9.8, 4);
                l.EN_HEADLOSS_LINE = l.EN_HEADLOSS - l.EN_HEADLOSS_MINOR;
@@ -887,10 +892,10 @@
            calcParam.setVars = new List<SetVar>();
            reservoirs.ForEach(r =>
            {
                calcParam.setVars.Add(new SetVar (r.ID,true,(int)EpanetEnum.NodeValueType.水池水位,(float)val.ObjFunctionValue));
                calcParam.setVars.Add(new SetVar(r.ID, true, (int)EpanetEnum.NodeValueType.水池水位, (float)val.ObjFunctionValue));
            });
            wdnmoParam =wdo.CalcbyResult(calcParam, wdnmoParam);
            wdnmoParam = wdo.CalcbyResult(calcParam, wdnmoParam);
            var list = wdnmoParam.ResultPoints;
            if (list == null) return list;
            list.Sort((a, b) => string.Compare(a.Key, b.Key));
@@ -1013,7 +1018,7 @@
    //构造一个List<LinkViewModel>类,能够实现List的所有功能
    [Serializable]
    public class LinkViewModelList:List<LinkCalcModel>
    public class LinkViewModelList : List<LinkCalcModel>
    {
        //List<LinkCalcModel> base;
        Dictionary<string, LinkViewModel> dict;//
@@ -1049,7 +1054,7 @@
        /// </summary>
        public void UpdateDict()
        {
            this.dict= new Dictionary<string, LinkViewModel>();
            this.dict = new Dictionary<string, LinkViewModel>();
            base.ForEach(link =>
            {
                if (!dict.ContainsKey(link.ID))
@@ -1061,13 +1066,13 @@
        /// </summary>
        /// <param name="oldID"></param>
        /// <param name="newID"></param>
        public void ChangeID(string oldID,string newID)
        public void ChangeID(string oldID, string newID)
        {
            if (dict.ContainsKey(oldID))
            {
                dict[oldID].ID = newID;
                dict.Add(newID, dict[oldID]);
                dict.Remove(oldID);
                dict.Remove(oldID);
            }
        }
        /// <summary>
@@ -1092,7 +1097,7 @@
                    dict.Add(link.ID, link);
            });
        }
        public bool RemoveAt(int index)
        {
            if (index < 0 || index >= base.Count) return false;
@@ -1112,7 +1117,7 @@
            {
                if (dict.ContainsKey(ID))
                    return dict[ID];
                else
                else
                    return (LinkViewModel)base.Find(l => l.ID == ID);
            }
        }
@@ -1188,7 +1193,7 @@
    {
        //List<NodeCalcModel> base;
        Dictionary<string, NodeCalcModel> dict;//=new Dictionary<string, NodeCalcModel>();//
        public NodeViewModelList():base()
        public NodeViewModelList() : base()
        {
            this.dict = new Dictionary<string, NodeCalcModel>();
        }