Shuxia Ning
2024-12-23 a97513ccbb97b2c471e90b032fabdd2e709b7f32
WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/99-common/PumpVariableSpeedChartDlg.cs
@@ -1,4 +1,6 @@
using Yw.Geometry;
using DevExpress.Spreadsheet;
using Yw.Geometry;
using Yw.WinFrmUI.Phart;
namespace HStation.WinFrmUI.PhartRelation
{
@@ -8,34 +10,55 @@
        {
            InitializeComponent();
            this.Text = "曲线视图";
            this.WindowState = FormWindowState.Maximized;
            this.pumpVariableSpeedInfoCtrl1.SetEvent += (id, qh, qe, qp) =>
            this.pumpVariableSpeedChart.SetQeVisible(false);
            this.pumpVariableSpeedInfoCtrl1.SetEvent += (id, hz, ex_ratio, qh, qe, qp) =>
            {
                this.pumpVariableSpeedChart.Set(id, qh, qe, qp);
                var list = this.pumpVariableSpeedInfoCtrl1.GetList();
                SetSerialParallel(list, _design_pt, _is_parallel);
                this.pumpVariableSpeedChart.Set(id, hz, ex_ratio, qh, qe, qp);
                ResetSectPointGrid();
            };
            this.pumpVariableSpeedInfoCtrl1.SetInfoEvent += (id, name, color) =>
            this.pumpVariableSpeedInfoCtrl1.SetInfoEvent += (id, color) =>
            {
                this.pumpVariableSpeedChart.SetInfo(id, name, color);
                this.pumpVariableSpeedChart.SetInfo(id, color);
                ResetSectPointGrid();
            };
            this.pumpVariableSpeedChart.AddBySpeedEvent += () =>
            {
                AddBySpeed();
                ResetSectPointGrid();
            };
            this.pumpVariableSpeedChart.AddByHzEvent += () =>
            {
                AddByHz();
                ResetSectPointGrid();
            };
            this.pumpVariableSpeedChart.AddByPointEvent += () =>
            {
                AddByPoint();
                ResetSectPointGrid();
            };
            this.pumpVariableSpeedInfoCtrl1.SetDesignPointEvent += (q, h) =>
            {
                _design_pt = new Point2d(q, h);
                this.pumpVariableSpeedChart.SetDesignPt(new Point2d(q, h));
                this.pumpVariableSpeedChart.SetEquipPt(_design_pt);
                ResetSectPointGrid();
            };
            this.pumpVariableSpeedChart.OnCalcQueryPoint += (id, pt) =>
            {
                this.pumpVariableSpeedInfoCtrl1.SetQueryInfo(id, pt);
            };
        }
        private Yw.Geometry.Point2d _design_pt;
        private bool _is_parallel;
        }
        private Yw.Geometry.Point2d _design_pt;
        /// <summary>
@@ -46,27 +69,19 @@
        /// <param name="is_parallel"></param>
        /// <returns></returns>
        public string SetBindingData(
            List<Yw.WinFrmUI.Phart.PumpVariableSpeedViewModel> list,
            Yw.Geometry.Point2d design_pt,
            bool is_parallel = true)
            Yw.WinFrmUI.Phart.PumpVariableSpeedViewModel vm,
            Yw.Geometry.Point2d design_pt)
        {
            if (list == null || !list.Any())
            {
                return "数据为空!";
            }
            _is_parallel = is_parallel;
            _design_pt = design_pt;
            var vm_list = new List<Yw.WinFrmUI.Phart.PumpVariableSpeedInfoViewModel>();
            for (int i = 0; i < list.Count; i++)
            {
                var x = list[i];
                var vm = new Yw.WinFrmUI.Phart.PumpVariableSpeedInfoViewModel(x);
                vm.Color = GetRandomColor(i);
                vm.Calc();
                vm_list.Add(vm);
            }
            var vm_info = new Yw.WinFrmUI.Phart.PumpVariableSpeedInfoViewModel(vm);
            vm_info.IsDefault = true;
            vm_info.Name = $"{vm.CurrentSpeed}({vm.CurrentHz}hz)";
            vm_info.Color = GetRandomColor(0);
            vm_info.Calc();
            vm_list.Add(vm_info);
            this.pumpVariableSpeedInfoCtrl1.SetBindingData(vm_list, _design_pt);
            this.pumpVariableSpeedChart.Add(vm_list, _design_pt);
@@ -74,7 +89,117 @@
        }
        private void ResetSectPointGrid()
        {
            var vm_list = this.pumpVariableSpeedChart.GetVmList();
            this.pumpVariableSpeedInfoCtrl1.SetSectPoint(vm_list);
        }
        private void AddBySpeed()
        {
            var list = this.pumpVariableSpeedInfoCtrl1.GetList();
            if (list == null || list.Count < 1)
            {
                return;
            }
            var index = list.Count;
            var vm_def = list.First();
            var dlg = new SetValueDlg();
            dlg.SetBindingData(vm_def.RatedSpeed);
            dlg.VerifyValueChanged += (speed) =>
            {
                var hz = Math.Round(speed / vm_def.RatedSpeed * 50, 1);
                if (hz > 50 || hz < 10)
                {
                    return false;
                }
                var vm = new PumpVariableSpeedInfoViewModel(vm_def);
                vm.Id = Guid.NewGuid().ToString();
                vm.Name = $"{speed}({hz}hz)";
                vm.Color = GetRandomColor(index);
                vm.CurrentHz = hz;
                vm.CurrentSpeed = speed;
                vm.Calc();
                this.pumpVariableSpeedInfoCtrl1.Add(vm);
                this.pumpVariableSpeedChart.Add(vm, _design_pt);
                return true;
            };
            dlg.ShowDialog();
        }
        private void AddByHz()
        {
            var list = this.pumpVariableSpeedInfoCtrl1.GetList();
            if (list == null || list.Count < 1)
            {
                return;
            }
            var index = list.Count;
            var vm_def = list.First();
            var dlg = new SetValueDlg();
            dlg.VerifyValueChanged += (hz) =>
            {
                if (hz > 50 || hz < 10)
                {
                    return false;
                }
                var speed = Math.Round(hz / 50 * vm_def.RatedSpeed);
                var vm = new PumpVariableSpeedInfoViewModel(vm_def);
                vm.Id = Guid.NewGuid().ToString();
                vm.Name = $"{speed}({hz}hz)";
                vm.Color = GetRandomColor(index);
                vm.CurrentHz = hz;
                vm.CurrentSpeed = speed;
                vm.Calc();
                this.pumpVariableSpeedInfoCtrl1.Add(vm);
                this.pumpVariableSpeedChart.Add(vm, _design_pt);
                return true;
            };
            dlg.ShowDialog();
        }
        private void AddByPoint()
        {
            var list = this.pumpVariableSpeedInfoCtrl1.GetList();
            if (list == null || list.Count < 1)
            {
                return;
            }
            var index = list.Count;
            var vm_def = list.First();
            var dlg = new SetPointDlg();
            dlg.SetBindingData();
            dlg.VerifyValueChanged += (x, y) =>
            {
                var pt = new Yw.Geometry.Point2d(x, y);
                var speed = PumpCalcHelper.GetSimuValue(vm_def.Qh, pt, vm_def.RatedSpeed);
                var hz = Math.Round(speed / vm_def.RatedSpeed * 50, 1);
                if (hz > 50 || hz < 20)
                {
                    return false;
                }
                var vm = new PumpVariableSpeedInfoViewModel(vm_def);
                vm.Id = Guid.NewGuid().ToString();
                vm.Name = $"{speed}({hz}hz)";
                vm.Color = GetRandomColor(index);
                vm.CurrentHz = hz;
                vm.CurrentSpeed = speed;
                vm.Calc();
                this.pumpVariableSpeedInfoCtrl1.Add(vm);
                this.pumpVariableSpeedChart.Add(vm, _design_pt);
                return true;
            };
            dlg.ShowDialog();
        }
        #region Color