From 4c32366350018806978182f05352ef75698f995f Mon Sep 17 00:00:00 2001 From: duheng <2784771470@qq.com> Date: 星期五, 17 一月 2025 11:33:19 +0800 Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/HStation/XHS.V1.0 --- WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs | 319 +++++++++++++++++++--------------------------------- 1 files changed, 119 insertions(+), 200 deletions(-) diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs index feb1a9d..a304805 100644 --- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs +++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/01-pump/01-view/PumpViewChart.cs @@ -86,6 +86,20 @@ #endregion + #region Public Evnet + + /// <summary> + /// 鍧愭爣鍙樻崲浜嬩欢 + /// </summary> + public event Action<PumpCoordinate> CoordinateChangedEvent = null; + + /// <summary> + /// 鏌ヨ鐐瑰彉鎹簨浠� + /// </summary> + public event Action<(long DbId,string Tag,double X,double Y)> AnnotationChangedEvent = null; + + #endregion + #region Private Initial /// <summary> @@ -95,9 +109,7 @@ { this.chartControl1.SetChartDisplay(); this.chartControl1.RuntimeHitTesting = true; - //this.chartControl1.AnimationStartMode = ChartAnimationMode.OnLoad; - //this.chartControl1.SeriesSelectionMode = SeriesSelectionMode.Series; - //this.chartControl1.SelectionMode = ElementSelectionMode.Single; + //this.chartControl1.AnimationStartMode = ChartAnimationMode.OnLoad; this.chartControl1.ObjectHotTracked += new DevExpress.XtraCharts.HotTrackEventHandler(this.chartControl1_ObjectHotTracked); this.chartControl1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseMove); @@ -105,7 +117,8 @@ this.chartControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseDown); this.chartControl1.Resize += new System.EventHandler(this.chartControl1_Resize); this.chartControl1.CustomPaint += ChartControl1_CustomPaint; - + + _diagram = (XYDiagram)this.chartControl1.Diagram; _default_pane = _diagram.DefaultPane; @@ -144,8 +157,9 @@ _anno_txt_query_info.SetTextAnnoWorkPointDisplay(); _anno_txt_query_info.Visible = false; } - - + + + /// <summary> /// 鍒濆鍖栧潗鏍囪酱 @@ -191,7 +205,9 @@ } private bool _on_move_x_line = false; - private bool _on_move_y_line = false; + private bool _on_move_y_line = false; + private bool _on_move_annotation = false; + private TextAnnotation _on_move_annotation_obj = null; private void chartControl1_MouseDown(object sender, MouseEventArgs e) { if (!_initial_data) @@ -211,6 +227,16 @@ _on_move_y_line = true; } } + else if (hitInfo.InAnnotation) + { + if (hitInfo.Annotation.Tag is not string id) + return; + if (!long.TryParse(id, out long db_id)) + return; + _on_move_annotation = true; + _on_move_annotation_obj = (TextAnnotation)hitInfo.Annotation; + } + } } @@ -228,7 +254,6 @@ return; double chartQ = axis_value.NumericalValue; SetAxisXValue(chartQ); - } else if (_on_move_y_line) { @@ -256,23 +281,58 @@ this.chartControl1.Cursor = Cursors.Default; } } + } private void chartControl1_MouseUp(object sender, MouseEventArgs e) { if (!_initial_data) return; + if (_on_move_annotation && _on_move_annotation_obj != null) + { + if (this.AnnotationChangedEvent != null) + { + var db_id = Convert.ToInt64(_on_move_annotation_obj.Tag); + + var pane_anchor_pt = _on_move_annotation_obj.AnchorPoint as PaneAnchorPoint; + if (pane_anchor_pt != null) + { + var diagram_coordinates = _diagram.PointToDiagram(e.Location); + AxisValue axis_x_value= diagram_coordinates.GetAxisValue(_axis_x_flow); + AxisValue axis_y_value = diagram_coordinates.GetAxisValue(pane_anchor_pt.AxisYCoordinate.Axis); + + if (axis_x_value==null|| axis_y_value==null) + { + return; + } + + var tag = pane_anchor_pt.Tag?.ToString() ?? null; + var x = axis_x_value.NumericalValue; + var y = axis_y_value.NumericalValue; + + pane_anchor_pt.AxisXCoordinate.AxisValue = x; + pane_anchor_pt.AxisYCoordinate.AxisValue = y; + this.AnnotationChangedEvent?.Invoke((db_id, tag, x, y)); + } + + + } + + } + _on_move_x_line = false; _on_move_y_line = false; + _on_move_annotation = false; + _on_move_annotation_obj = null; } private void chartControl1_Resize(object sender, EventArgs e) { - var x = this.chartControl1.Location.X + this.chartControl1.Width; - var y = this.chartControl1.Location.Y + 100; + var x = this.chartControl1.Location.X + this.chartControl1.Width*0.90; + var y = this.chartControl1.Location.Y+this.chartControl1.Height *0.1; - (_anno_txt_query_info.AnchorPoint as ChartAnchorPoint).X = x; - (_anno_txt_query_info.AnchorPoint as ChartAnchorPoint).Y = y; + (_anno_txt_query_info.AnchorPoint as ChartAnchorPoint).X = (int)x; + (_anno_txt_query_info.AnchorPoint as ChartAnchorPoint).Y = (int)y; } @@ -417,7 +477,12 @@ _initial_data = false; this.chartControl1.BeginInit(); this.chartControl1.Series.Clear(); - this.chartControl1.AnnotationRepository.Clear(); + for (int i = this.chartControl1.AnnotationRepository.Count - 1; i > 0; i--) + { + if (i == 0) + break; + this.chartControl1.AnnotationRepository.RemoveAt(i); + } this.chartControl1.Legend.CustomItems.Clear(); this.chartControl1.EndInit(); } @@ -438,7 +503,12 @@ this.chartControl1.BeginInit(); this.chartControl1.Series.Clear(); - this.chartControl1.AnnotationRepository.Clear(); + for (int i = this.chartControl1.AnnotationRepository.Count - 1; i > 0; i--) + { + if (i == 0) + break; + this.chartControl1.AnnotationRepository.RemoveAt(i); + } this.chartControl1.Legend.CustomItems.Clear(); if (IsInvalidData()) { @@ -485,14 +555,14 @@ axis_x = _axis_x_flow; axis_y = _axis_y_power; pane = _split_panel? _bottom_pane: _default_pane; - } + } if (vm.AnnotationList != null && vm.AnnotationList.Any()) { foreach (var name in vm.AnnotationList) { - AddAnnotation(vm.Id, name.Text, vm.Color, axis_y, pane, new Geometry.Point2d(name.X, name.Y), -40); - } + AddAnnotation(vm.Id, name.Tag, name.Text, vm.Color, axis_y, pane, new Geometry.Point2d(name.X, name.Y), 0,0); + } } @@ -616,7 +686,7 @@ this.chartControl1.Series.Add(series); } - private void AddAnnotation(string id, string caption, Color color, AxisYBase axis_y, XYDiagramPaneBase pane, Yw.Geometry.Point2d pt, double angle = -10) + private void AddAnnotation(string id, string tag, string caption, Color color, AxisYBase axis_y, XYDiagramPaneBase pane, Yw.Geometry.Point2d pt, double angle = -10, double connector_length = 20) { if (pt == null) return; @@ -626,11 +696,14 @@ pane_anchor_pt.AxisYCoordinate.Axis = axis_y; pane_anchor_pt.AxisXCoordinate.AxisValue = anchor_pt.X; pane_anchor_pt.AxisYCoordinate.AxisValue = anchor_pt.Y; + pane_anchor_pt.Tag = tag; + + var relative_position = new DevExpress.XtraCharts.RelativePosition(); relative_position.Angle = angle; - relative_position.ConnectorLength = 20; - + relative_position.ConnectorLength = connector_length; + var text_annotation = new TextAnnotation(); text_annotation.AnchorPoint = pane_anchor_pt; text_annotation.AutoHeight = true; @@ -644,14 +717,17 @@ text_annotation.Padding.Left = 1; text_annotation.Padding.Right = 1; text_annotation.Padding.Top = 1; - text_annotation.RuntimeMoving = true; - text_annotation.RuntimeAnchoring = false; + text_annotation.RuntimeMoving = false; + text_annotation.RuntimeAnchoring = true; text_annotation.RuntimeResizing = false; text_annotation.RuntimeRotation = false; + text_annotation.RuntimeEditing = false; text_annotation.Text = caption; text_annotation.TextColor = color; text_annotation.ShapePosition = relative_position; text_annotation.Visible = true; + text_annotation.EnableAntialiasing = DefaultBoolean.True; + text_annotation.DXFont = new DevExpress.Drawing.DXFont(this.Font.Name, 10F); this.chartControl1.AnnotationRepository.Add(text_annotation); @@ -930,12 +1006,12 @@ } if (this.IsInvalidData()) return; - var vm_sel = _vm_list.Find(x => x.IsSelect); - if (vm_sel == null) + var qh = _vm_list.Find(x => x.IsSelect&&x.CurveType== eCurveType.QH); + if (qh == null) return; - var min_x = vm_sel.FitPointList.Min(x => x.X); - var max_x = vm_sel.FitPointList.Max(x => x.X); + var min_x = qh.FitPointList.Min(x => x.X); + var max_x = qh.FitPointList.Max(x => x.X); if (x == null) { @@ -948,7 +1024,7 @@ } var x_value = x.Value; - var y_value = vm_sel.FitPointList.GetInterPointsY(x_value)?.FirstOrDefault(); + var y_value = qh.FitPointList.GetInterPointsY(x_value)?.FirstOrDefault(); _const_line_x.AxisValue = x_value; _const_line_x.Title.Text = $"{x_value:N1}"; @@ -959,6 +1035,21 @@ var query_info_builder = new StringBuilder(); query_info_builder.AppendLine($"{x_value:N2} m鲁/h "); query_info_builder.AppendLine($"{y_value:N2} m"); + + var qe = _vm_list.Find(x => x.IsSelect && x.CurveType == eCurveType.QE); + if (qe != null) + { + var eff = qe.FitPointList.GetInterPointsY(x_value).FirstOrDefault(); + query_info_builder.AppendLine($"{eff:N2} % "); + } + + var qp = _vm_list.Find(x => x.IsSelect && x.CurveType == eCurveType.QP); + if (qp != null) + { + var power = qp.FitPointList.GetInterPointsY(x_value).FirstOrDefault(); + query_info_builder.Append($"{power:N2} kW/h "); + } + _anno_txt_query_info.Text = query_info_builder.ToString(); _anno_txt_query_info.AutoSize = true; @@ -990,176 +1081,4 @@ #endregion } -} - -///// <summary> -///// 璁剧疆鍥捐〃杞� -///// </summary> -//private void SetChartAxis() -//{ -// _axis_x_flow.Visibility = DefaultBoolean.False; -// _axis_x_flow.GridLines.Visible = false; -// _axis_y_head.Visibility = DefaultBoolean.False; -// _axis_y_head.GridLines.Visible = false; -// _axis_y_eff.Visibility = DefaultBoolean.False; -// _axis_y_eff.GridLines.Visible = false; -// _axis_y_power.Visibility = DefaultBoolean.False; -// _axis_y_power.GridLines.Visible = false; -// if (_coordinate == null) -// { -// _const_line_x.Visible = false; -// _const_line_y.Visible = false; -// _bottom_pane.Visibility = ChartElementVisibility.Hidden; -// return; -// } - - -// //璁$畻鍒诲害 Q -// var axisQLabels = new List<CustomAxisLabel>(); -// var disQ = _coordinate.CoordMinQ; -// for (int i = 0; i < _coordinate.GridNumberX + 1; i++) -// { -// axisQLabels.Add(new CustomAxisLabel(disQ.ToString("N0"), disQ)); -// disQ = disQ + _coordinate.CoordSpaceQ; -// } - -// _axis_x_flow.CustomLabels.Clear(); -// _axis_x_flow.CustomLabels.AddRange(axisQLabels.ToArray()); -// _axis_x_flow.Visibility = DefaultBoolean.True; -// _axis_x_flow.GridLines.Visible = true; - - -// //璁$畻鍒诲害 -// var axis_head_labels = new List<CustomAxisLabel>(); -// var display_head = _coordinate.CoordMinH + _coordinate.CoordSpaceH * _coordinate.StartLineNoH; -// for (int i = _coordinate.StartLineNoH; i < _coordinate.EndLineNoH + 1; i++) -// { -// axis_head_labels.Add(new CustomAxisLabel(display_head.ToString(), display_head)); -// display_head = display_head + _coordinate.CoordSpaceH; -// } - -// _axis_y_head.CustomLabels.Clear(); -// _axis_y_head.CustomLabels.AddRange(axis_head_labels.ToArray()); -// _axis_y_head.Visibility = DefaultBoolean.True; -// _axis_y_head.GridLines.Visible = true; - -// //鏁堢巼 -// if (_maxE > _minE && _eff_visible) -// { -// //璁$畻鍒诲害 -// var label_list = new List<CustomAxisLabel>(); -// var display_eff = _coordinate.CoordMinE + _coordinate.CoordSpaceE * _coordinate.StartLineNoE; -// for (int i = _coordinate.StartLineNoE; i < _coordinate.EndLineNoE + 1; i++) -// { -// label_list.Add(new CustomAxisLabel(display_eff.ToString(), display_eff)); -// display_eff = display_eff + _coordinate.CoordSpaceE; -// } - -// _axis_y_eff.CustomLabels.Clear(); -// _axis_y_eff.CustomLabels.AddRange(label_list.ToArray()); -// _axis_y_eff.Visibility = DefaultBoolean.True; -// _axis_y_eff.GridLines.Visible = true; -// } - -// //鍔熺巼 -// if (_maxP > _minP && _power_visible) -// { -// //璁$畻鍒诲害 -// var label_list = new List<CustomAxisLabel>(); -// double display_power = _coordinate.CoordMinP + _coordinate.CoordSpaceP * _coordinate.StartLineNoP; -// for (int i = _coordinate.StartLineNoP; i < _coordinate.EndLineNoP + 1; i++) -// { -// label_list.Add(new CustomAxisLabel(display_power.ToString(), display_power)); -// display_power = display_power + _coordinate.CoordSpaceP; -// } - -// _axis_y_power.CustomLabels.Clear(); -// _axis_y_power.CustomLabels.AddRange(label_list.ToArray()); -// _axis_y_power.Visibility = DefaultBoolean.True; -// _axis_y_power.GridLines.Visible = true; -// } - - -// _axis_x_flow.SetAxisRange(_coordinate.CoordMinQ, _coordinate.CoordMinQ + _coordinate.GridNumberX * _coordinate.CoordSpaceQ); -// if (_split_panel) -// { -// if (_power_visible) -// { -// var grid_count_head = _coordinate.EndLineNoH - _coordinate.StartLineNoH; -// var grid_count_eff = _coordinate.EndLineNoE - _coordinate.StartLineNoE; -// int grid_count_add = Math.Max(grid_count_head, grid_count_eff); -// if (_eff_visible) -// grid_count_add += +5;//澶氫袱鏉� - -// var max_axis_head = _coordinate.CoordMinH + _coordinate.EndLineNoH * _coordinate.CoordSpaceH; -// var min_axis_head = max_axis_head - grid_count_add * _coordinate.CoordSpaceH; -// _axis_y_head.SetAxisRange(min_axis_head, max_axis_head); - -// var min_axis_eff = _coordinate.CoordMinE + _coordinate.StartLineNoE * _coordinate.CoordSpaceE; -// var max_axis_eff = min_axis_eff + grid_count_add * _coordinate.CoordSpaceE; - -// _axis_y_eff.SetAxisRange(min_axis_eff, max_axis_eff); -// _bottom_pane.Visibility = ChartElementVisibility.Visible; -// } -// else -// { -// var grid_count_power = _coordinate.EndLineNoP - _coordinate.StartLineNoP; -// var grid_delete_head = grid_count_power * _coordinate.CoordSpaceH; -// grid_delete_head = _coordinate.CoordMinH < 0 ? -grid_delete_head : grid_delete_head; - -// var grid_delete_eff = grid_count_power * _coordinate.CoordSpaceE; -// grid_delete_eff = _coordinate.CoordMinE < 0 ? -grid_delete_eff : grid_delete_eff; - -// _axis_y_head.SetAxisRange(_coordinate.CoordMinH - grid_delete_head, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH); -// _axis_y_eff.SetAxisRange(_coordinate.CoordMinE - grid_delete_eff, _coordinate.CoordMinE + _coordinate.GridNumberY * _coordinate.CoordSpaceE); - -// _bottom_pane.Visibility = ChartElementVisibility.Hidden; -// } - -// if ((!_eff_visible) && (!_power_visible)) -// { -// _axis_y_head.SetAxisRange(_coordinate.DispMinH(), _coordinate.DispMaxH()); -// } -// _axis_y_power.SetAxisRange(_coordinate.DispMinP(), _coordinate.DispMaxP()); -// } -// else -// { -// if ((!_eff_visible) && (!_power_visible)) -// { -// _axis_y_head.SetAxisRange(_coordinate.DispMinH(), _coordinate.DispMaxH()); -// } -// else if ((!_eff_visible) && _power_visible) -// { -// var grid_count_eff = _coordinate.EndLineNoE - _coordinate.StartLineNoE; -// if (_coordinate.EndLineNoH - _coordinate.StartLineNoH < 6) -// grid_count_eff++; -// var grid_delete_head = grid_count_eff * _coordinate.CoordSpaceH; -// grid_delete_head = _coordinate.CoordMinH < 0 ? -grid_delete_head : grid_delete_head; -// var grid_delete_power = grid_count_eff * _coordinate.CoordSpaceP; - -// _axis_y_head.SetAxisRange(_coordinate.CoordMinH - grid_delete_head, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH); -// _axis_y_power.SetAxisRange(_coordinate.CoordMinP, _coordinate.CoordMinP + _coordinate.GridNumberY * _coordinate.CoordSpaceP - grid_delete_power); -// } -// else if (_eff_visible && (!_power_visible)) -// { -// var grid_count_power = _coordinate.EndLineNoP - _coordinate.StartLineNoP; -// var grid_delete_head = grid_count_power * _coordinate.CoordSpaceH; -// grid_delete_head = _coordinate.CoordMinH < 0 ? -grid_delete_head : grid_delete_head; - -// var grid_delete_eff = grid_count_power * _coordinate.CoordSpaceE; -// grid_delete_eff = _coordinate.CoordMinE < 0 ? -grid_delete_eff : grid_delete_eff; - -// _axis_y_head.SetAxisRange(_coordinate.CoordMinH - grid_delete_head, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH); -// _axis_y_eff.SetAxisRange(_coordinate.CoordMinE - grid_delete_eff, _coordinate.CoordMinE + _coordinate.GridNumberY * _coordinate.CoordSpaceE); -// } -// else -// { -// _axis_y_head.SetAxisRange(_coordinate.CoordMinH, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH); -// _axis_y_eff.SetAxisRange(_coordinate.CoordMinE, _coordinate.CoordMinE + _coordinate.GridNumberY * _coordinate.CoordSpaceE); -// _axis_y_power.SetAxisRange(_coordinate.CoordMinP, _coordinate.CoordMinP + _coordinate.GridNumberY * _coordinate.CoordSpaceP); -// } - -// _bottom_pane.Visibility = ChartElementVisibility.Hidden; -// } - -//} \ No newline at end of file +} \ No newline at end of file -- Gitblit v1.9.3