ÎļþÃû´Ó WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveInteropCtrl.cs ÐÞ¸Ä |
| | |
| | | using Yw.DAL.Basic; |
| | | using Yw.EPAnet; |
| | | using Yw.Hydro; |
| | | using Yw.Model; |
| | | |
| | | namespace Yw.WinFrmUI |
| | | { |
| | | public partial class HydroSingleWorkingLossCurveInteropCtrl : DevExpress.XtraEditors.XtraUserControl |
| | | public partial class HydroLossCurveInteropCtrl : DevExpress.XtraEditors.XtraUserControl |
| | | { |
| | | public HydroSingleWorkingLossCurveInteropCtrl() |
| | | public HydroLossCurveInteropCtrl() |
| | | { |
| | | InitializeComponent(); |
| | | this.layoutControl1.SetupLayoutControl(); |
| | |
| | | /// </summary> |
| | | public event Action HydroCancelSpecialDisplayEvent; |
| | | |
| | | |
| | | private Yw.Model.HydroModelInfo _hydroInfo = null;//æ°´åä¿¡æ¯ |
| | | private HydroWorkingVmo _working = null;//å·¥åµ |
| | | private Yw.Model.HydroNodeInfo _node = null;//èç¹ |
| | | private HydroCalcuResult _calcuResult = null;//计ç®ç»æ |
| | | private Yw.Model.HydroVisualInfo _visual = null;//å¯è§æä»¶ |
| | | |
| | | /// <summary> |
| | | /// ç»å®æ°æ® |
| | |
| | | public void SetBindingData |
| | | ( |
| | | Yw.Model.HydroModelInfo hydroInfo, |
| | | HydroCalcuResult calcuResult, |
| | | Yw.Model.HydroVisualInfo visual |
| | | HydroWorkingVmo working, |
| | | HydroNodeInfo node, |
| | | HydroCalcuResult calcuResult = null, |
| | | bool isHead = false, |
| | | List<Yw.Vmo.HydroEvaluationVmo> allEvaluationList = null |
| | | ) |
| | | { |
| | | if (hydroInfo == null) |
| | | { |
| | | return; |
| | | } |
| | | if (working == null) |
| | | { |
| | | return; |
| | | } |
| | | if (node == null) |
| | | { |
| | | return; |
| | | } |
| | | _hydroInfo = hydroInfo; |
| | | _working = working; |
| | | _node = node; |
| | | if (calcuResult == null) |
| | | { |
| | | hydroInfo.UpdateWorkingInfo(working.WorkingInfo); |
| | | calcuResult = hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss, isHead, allEvaluationList); |
| | | } |
| | | _calcuResult = calcuResult; |
| | | _visual = visual; |
| | | |
| | | Analy(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ç»å®æ°æ® |
| | | /// </summary> |
| | | public void SetBindingData(List<HydroNodeLossViewModel> allNodeLossList) |
| | | private void SetBindingData(HydroLossCurveViewModel vm) |
| | | { |
| | | AutoFitAxises(allNodeLossList); |
| | | var allElevList = allNodeLossList?.Select(x => new HydroLossCurvePointVieModel(x.Code, x.Name, x.Distance, x.Elev)).ToList(); |
| | | this.elevBindingSource.DataSource = allElevList; |
| | | AutoFitAxises(vm?.Items); |
| | | this.elevBindingSource.DataSource = vm?.Elev?.Items; |
| | | this.elevBindingSource.ResetBindings(false); |
| | | var allLossList = new List<HydroLossCurvePointVieModel>(); |
| | | allNodeLossList?.ForEach(x => |
| | | { |
| | | allLossList.Add(new HydroLossCurvePointVieModel(x.Code, x.Name, x.Distance, x.StartHead)); |
| | | allLossList.Add(new HydroLossCurvePointVieModel(x.Code, x.Name, x.Distance, x.EndHead)); |
| | | }); |
| | | this.lossBindingSource.DataSource = allLossList; |
| | | this.lossBindingSource.DataSource = vm?.Lower?.Items; |
| | | this.lossBindingSource.ResetBindings(false); |
| | | |
| | | if (allNodeLossList != null && allNodeLossList.Count > 0) |
| | | if (vm?.Total != null) |
| | | { |
| | | var startHead = allNodeLossList.Max(x => x.StartHead); |
| | | var endHead = allNodeLossList.Min(x => x.EndHead); |
| | | var allHeadLoss = startHead - endHead; |
| | | var allMinorLoss = allNodeLossList.Sum(x => x.MinorLoss); |
| | | var allForLoss = allHeadLoss - allMinorLoss; |
| | | var sb = new StringBuilder(); |
| | | sb.AppendLine($"水头æå¤±:{allHeadLoss:N2}m"); |
| | | sb.AppendLine($"å±é¨æå¤±:{allMinorLoss:N2}m"); |
| | | sb.AppendLine($"æ²¿ç¨æå¤±:{allForLoss:N2}m"); |
| | | sb.AppendLine($"水头æå¤±:{vm?.Total.HeadLoss:N2}m"); |
| | | sb.AppendLine($"å±é¨æå¤±:{vm?.Total.MinorLoss:N2}m"); |
| | | sb.AppendLine($"æ²¿ç¨æå¤±:{vm?.Total.FrictionLoss:N2}m"); |
| | | var anno = this.chartControl1.AnnotationRepository[0] as DevExpress.XtraCharts.TextAnnotation; |
| | | anno.Text = sb.ToString(); |
| | | anno.AutoSize = true; |
| | |
| | | } |
| | | |
| | | //èªå¨éåºå»åº¦ |
| | | private void AutoFitAxises(List<HydroNodeLossViewModel> allNodeLossList) |
| | | private void AutoFitAxises(List<HydroLossCurveItemViewModel> items) |
| | | { |
| | | if (allNodeLossList == null || allNodeLossList.Count < 1) |
| | | if (items == null || items.Count < 1) |
| | | { |
| | | return; |
| | | } |
| | |
| | | |
| | | #region Xè½´ |
| | | |
| | | var allDistances = allNodeLossList.Select(x => x.Distance).Distinct().ToList(); |
| | | var allDistances = items.Select(x => x.Distance).Distinct().ToList(); |
| | | var distanceMax = allDistances.Max(); |
| | | diagram.AxisX.Tickmarks.MinorVisible = false; |
| | | diagram.AxisX.WholeRange.SideMarginsValue = 0; |
| | |
| | | |
| | | #region åå |
| | | |
| | | var allPressMinList = allNodeLossList.Select(x => Math.Min(Math.Min(x.StartHead, x.EndHead), x.Elev)).ToList(); |
| | | var allPressMaxList = allNodeLossList.Select(x => Math.Max(Math.Max(x.StartHead, x.EndHead), x.Elev)).ToList(); |
| | | var allPressMinList = items.Select(x => Math.Min(Math.Min(x.StartHead, x.EndHead), x.Elev)).ToList(); |
| | | var allPressMaxList = items.Select(x => Math.Max(Math.Max(x.StartHead, x.EndHead), x.Elev)).ToList(); |
| | | |
| | | var pressMin = allPressMinList.Min(); |
| | | var pressMax = allPressMaxList.Max(); |
| | |
| | | { |
| | | axisLabelElement.BackColor = Color.Blue; |
| | | axisLabelElement.Text = $"{axisLabelElement.AxisValue:N2}"; |
| | | |
| | | } |
| | | |
| | | foreach (CrosshairElementGroup group in e.CrosshairElementGroups) |
| | |
| | | { |
| | | ele.AxisLabelElement.Text = $"{ele.AxisLabelElement.AxisValue:N1}"; |
| | | ele.AxisLabelElement.DXFont = new DXFont(this.Font.Name, 6); |
| | | //ele.AxisLabelElement.Visible = false; |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | return; |
| | | } |
| | | if (_working == null) |
| | | { |
| | | return; |
| | | } |
| | | if (_node == null) |
| | | { |
| | | return; |
| | | } |
| | | if (_calcuResult == null) |
| | | { |
| | | return; |
| | | } |
| | | var network = _hydroInfo.ToNetwork(); |
| | | if (network == null) |
| | | { |
| | | return; |
| | | } |
| | | var node = network.GetAllNodes()?.Find(x => x.Id == _visual?.Code); |
| | | if (node == null) |
| | | var epaNode = network.GetAllNodes()?.Find(x => x.Id == _node.Code); |
| | | if (epaNode == null) |
| | | { |
| | | return; |
| | | } |
| | | var allStartPathList = new List<Link>(); |
| | | if (this.ckStart.Checked) |
| | | { |
| | | allStartPathList = network.AnalyzeUpstreamPath(node, _calcuResult?.EPAnetCalcuResult); |
| | | allStartPathList = network.AnalyzeUpstreamPath(epaNode, _calcuResult?.EPAnetCalcuResult); |
| | | if (allStartPathList == null) |
| | | { |
| | | allStartPathList = new List<Link>(); |
| | |
| | | var allEndPathList = new List<Link>(); |
| | | if (this.ckEnd.Checked) |
| | | { |
| | | allEndPathList = network.AnalyzeDownstreamPath(node, _calcuResult?.EPAnetCalcuResult); |
| | | allEndPathList = network.AnalyzeDownstreamPath(epaNode, _calcuResult?.EPAnetCalcuResult); |
| | | if (allEndPathList == null) |
| | | { |
| | | allEndPathList = new List<Link>(); |
| | |
| | | var allPathList = allStartPathList.Concat(allEndPathList).ToList(); |
| | | var allEpaLossList = network.GetChartNodeByPathLinks(allPathList, _calcuResult?.EPAnetCalcuResult); |
| | | var allVisualDict = _hydroInfo.GetVisualDict(); |
| | | var allNodeLossList = new List<HydroNodeLossViewModel>(); |
| | | |
| | | var vm = new HydroLossCurveViewModel(); |
| | | vm.Items = new List<HydroLossCurveItemViewModel>(); |
| | | allEpaLossList?.ForEach(x => |
| | | { |
| | | var visualNode = allVisualDict?.GetValue(x.Id); |
| | | if (visualNode != null) |
| | | { |
| | | allNodeLossList.Add(new HydroNodeLossViewModel(x, visualNode)); |
| | | vm.Items.Add(new HydroLossCurveItemViewModel(x, visualNode)); |
| | | } |
| | | }); |
| | | SetBindingData(allNodeLossList); |
| | | vm.Elev = new HydroLossCurveElevViewModel(vm.Items); |
| | | vm.Start = new HydroLossCurveStartViewModel(vm.Items); |
| | | vm.End = new HydroLossCurveEndViewModel(vm.Items); |
| | | vm.Lower = new HydroLossCurveLowerViewModel(vm.Items); |
| | | vm.Total = new HydroLossCurveTotalViewModel(vm.Items); |
| | | |
| | | SetBindingData(vm); |
| | | |
| | | if (this.ckSpecial.Checked) |
| | | { |
| | | var allCodeList = new List<string>(); |
| | | allPathList?.ForEach(x => allCodeList.Add(x.Id)); |
| | | allNodeLossList?.ForEach(x => allCodeList.Add(x.Code)); |
| | | vm.Items?.ForEach(x => allCodeList.Add(x.Code)); |
| | | this.HydroSpecialDisplayEvent?.Invoke(allCodeList); |
| | | } |
| | | else |