From 77c032ffe145bbe2c489afbd1a0aa71d62b94203 Mon Sep 17 00:00:00 2001 From: Shuxia Ning <NingShuxia0927@outlook.com> Date: 星期二, 24 十二月 2024 17:50:31 +0800 Subject: [PATCH] 图表轴 --- WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.resx | 6 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.cs | 41 +++++----- WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/01-view/PumpViewChart.cs | 73 +++++++++-------- WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs | 59 ++++++++++---- WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.Designer.cs | 21 ++++- WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/03-import/03-point/PumpChartPointImportCtrl.cs | 2 6 files changed, 122 insertions(+), 80 deletions(-) diff --git a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs index 176e976..fa4a6f1 100644 --- a/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs +++ b/WinFrmUI/HStation.WinFrmUI.PhartRelation.Core/01-pump/01-view/PumpChartViewCtrl.cs @@ -10,6 +10,11 @@ private Yw.Vmo.PhartDiagramExGraphListVmo _vmo = null; private Yw.WinFrmUI.Phart.PumpCurveViewModel _vm = null; + private bool _default_visible = true; + private bool _power_visible = false; + private bool _eff_visible = false; + private bool _split_panel = false; + /// <summary> /// 鏁版嵁鍙樻洿浜嬩欢 /// </summary> @@ -79,6 +84,7 @@ } } + //vm.VariableSpeedList = new List<Yw.WinFrmUI.Phart.PumpChartVariableSpeedViewModel>(); //vm.EqualPowerList = new List<Yw.WinFrmUI.Phart.PumpChartEqualPowerViewModel>(); //for (int eff = 30; eff < 90; eff += 1) @@ -123,15 +129,49 @@ // vm.VariableSpeedList.Add(vs); //} - this.pumpChart1.SetBindingData(vm); + SetBindingData(vm, _default_visible, _split_panel, _eff_visible, _power_visible); } - + + + /// <summary> + /// 缁戝畾鏁版嵁 + /// </summary> + public void SetBindingData(Yw.WinFrmUI.Phart.PumpCurveViewModel vm, bool default_visible = true, bool split_panel = false, bool eff_visible = false, bool power_visible = true) + { + _vm = vm; + if (vm == null) + { + ClearBindingData(); + return; + } + this.pumpChart1.SetBindingData(vm, default_visible, split_panel, eff_visible, power_visible); + } + + /// <summary> /// 娓呯┖缁戝畾鏁版嵁 /// </summary> public void ClearBindingData() { this.pumpChart1.ClearBindingData(); + } + + private void barCekEffVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + _eff_visible = this.barCekEffVisible.Checked; + SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible); + } + + private void barCekPowerVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + _power_visible = this.barCekPowerVisible.Checked; + SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible); + } + + private void barCekSplitPanel_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + { + _split_panel = this.barCekSplitPanel.Checked; + SetBindingData(_vm, _default_visible, _split_panel, _eff_visible, _power_visible); } /// <summary> @@ -142,19 +182,6 @@ return new Yw.Vmo.PhartDiagramExGraphListVmo(); } - private void barCekEffVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - - } - - private void barCekPowerVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - - } - - private void barCekSplitPanel_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) - { - - } + } } diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.Designer.cs index 97933df..09d5cc7 100644 --- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.Designer.cs +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.Designer.cs @@ -72,6 +72,7 @@ freePosition1.InnerIndents.Top = 35; textAnnotation1.ShapePosition = freePosition1; chartControl1.AnnotationRepository.AddRange(new DevExpress.XtraCharts.Annotation[] { textAnnotation1 }); + chartControl1.CrosshairOptions.ContentShowMode = DevExpress.XtraCharts.CrosshairContentShowMode.Label; chartControl1.CrosshairOptions.ShowArgumentLabels = true; chartControl1.CrosshairOptions.ShowValueLabels = true; chartControl1.CrosshairOptions.ShowValueLine = true; @@ -88,6 +89,7 @@ xyDiagram1.AxisX.WholeRange.StartSideMargin = 0D; xyDiagram1.AxisY.GridLines.Visible = false; xyDiagram1.AxisY.MinorCount = 1; + xyDiagram1.AxisY.NumericScaleOptions.AutoGrid = false; xyDiagram1.AxisY.Tickmarks.MinorVisible = false; xyDiagram1.AxisY.VisibleInPanesSerializable = "-1"; xyDiagram1.EnableAxisXScrolling = true; @@ -99,13 +101,20 @@ chartControl1.Legend.LegendID = -1; chartControl1.Legend.MarkerMode = DevExpress.XtraCharts.LegendMarkerMode.CheckBox; chartControl1.Location = new Point(0, 0); + chartControl1.Margin = new Padding(4, 5, 4, 5); chartControl1.Name = "chartControl1"; + chartControl1.Padding.Bottom = 10; + chartControl1.Padding.Left = 20; + chartControl1.Padding.Right = 10; + chartControl1.Padding.Top = 10; series1.ArgumentDataMember = "X"; series1.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.True; series1.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.True; - series1.CrosshairLabelPattern = "鎬绘按澶�:{V}m"; + series1.CrosshairLabelPattern = "鎬绘按澶�:{V:N1}m"; series1.CrosshairLabelVisibility = DevExpress.Utils.DefaultBoolean.True; + series1.CrosshairTextOptions.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True; series1.DataSource = lossBindingSource; + series1.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; series1.LegendTextPattern = "鎬绘按澶�"; series1.Name = "SeriesLoss"; series1.SeriesID = 0; @@ -118,8 +127,9 @@ series2.ArgumentDataMember = "X"; series2.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.True; series2.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.True; - series2.CrosshairLabelPattern = "楂樼▼:{V}m"; + series2.CrosshairLabelPattern = "楂樼▼:{V:N1}m"; series2.CrosshairLabelVisibility = DevExpress.Utils.DefaultBoolean.True; + series2.CrosshairTextOptions.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True; series2.DataSource = elevBindingSource; series2.LegendTextPattern = "楂樼▼"; series2.Name = "SeriesElev"; @@ -139,7 +149,7 @@ chartControl1.SeriesTemplate.ArgumentDataMember = "X"; chartControl1.SeriesTemplate.ToolTipHintDataMember = "Name"; chartControl1.SeriesTemplate.ValueDataMembersSerializable = "Y"; - chartControl1.Size = new Size(848, 569); + chartControl1.Size = new Size(1211, 894); chartControl1.TabIndex = 0; chartControl1.ToolTipEnabled = DevExpress.Utils.DefaultBoolean.True; chartControl1.ToolTipOptions.ShowForSeries = true; @@ -148,11 +158,12 @@ // // HydroSingleWorkingLossCurveCtrl // - AutoScaleDimensions = new SizeF(7F, 14F); + AutoScaleDimensions = new SizeF(10F, 22F); AutoScaleMode = AutoScaleMode.Font; Controls.Add(chartControl1); + Margin = new Padding(4, 5, 4, 5); Name = "HydroSingleWorkingLossCurveCtrl"; - Size = new Size(848, 569); + Size = new Size(1211, 894); ((ISupportInitialize)lossBindingSource).EndInit(); ((ISupportInitialize)elevBindingSource).EndInit(); ((ISupportInitialize)textAnnotation1).EndInit(); diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.cs index c772bb7..e9eeda7 100644 --- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.cs +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.cs @@ -1,21 +1,8 @@ -锘縰sing DevExpress.Charts.Native; -using DevExpress.Utils.About; +锘縰sing DevExpress.Drawing; using DevExpress.XtraCharts; -using DevExpress.XtraEditors; -using System; -using System.Collections.Generic; -using System.ComponentModel; using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using Yw.Hydro; using Yw.EPAnet; -using DevExpress.Mvvm.POCO; -using DevExpress.Utils; -using DevExpress.Drawing; +using Yw.Hydro; namespace Yw.WinFrmUI { @@ -23,7 +10,7 @@ { public HydroSingleWorkingLossCurveCtrl() { - InitializeComponent(); + InitializeComponent(); } /// <summary> @@ -184,6 +171,7 @@ diagram.AxisY.Tickmarks.MinorVisible = false; diagram.AxisY.WholeRange.SideMarginsValue = 0; + diagram.AxisY.CrosshairAxisLabelOptions.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True; if (pressMax <= 10) { diagram.AxisY.WholeRange.MinValue = Math.Floor(pressMin); @@ -231,17 +219,19 @@ e.CrosshairLineElement.Color = Color.Green; e.CrosshairLineElement.LineStyle.DashStyle = DashStyle.DashDot; e.CrosshairLineElement.LineStyle.Thickness = 3; + // Specify the back color for the crosshair argument axis label. foreach (CrosshairAxisLabelElement axisLabelElement in e.CrosshairAxisLabelElements) { axisLabelElement.BackColor = Color.Blue; + axisLabelElement.Text = $"{axisLabelElement.AxisValue:N2}"; + } - + foreach (CrosshairElementGroup group in e.CrosshairElementGroups) - { - CrosshairGroupHeaderElement groupHeaderElement = group.HeaderElement; - + { + CrosshairGroupHeaderElement groupHeaderElement = group.HeaderElement; var pt = group.HeaderElement.SeriesPoints.FirstOrDefault(); if (pt != null) { @@ -250,11 +240,20 @@ { groupHeaderElement.Text = model.Name; } - } + } // Specify the text, text color and font for the crosshair group header element. groupHeaderElement.TextColor = Color.Green; groupHeaderElement.DXFont = new DXFont("SegoeUI", 12, DXFontStyle.Bold); + groupHeaderElement.Text = group.CrosshairElements[0].AxisLabelElement.Text; + + foreach (var ele in group.CrosshairElements) + { + ele.AxisLabelElement.Text = $"{ele.AxisLabelElement.AxisValue:N1}"; + ele.AxisLabelElement.DXFont = new DXFont(this.Font.Name, 6); + //ele.AxisLabelElement.Visible = false; + } + //// Obtain the first series. //CrosshairElement element = group.CrosshairElements[0]; diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.resx index 94687b5..e760b41 100644 --- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.resx +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.resx @@ -1,7 +1,7 @@ 锘�<?xml version="1.0" encoding="utf-8"?> <root> <!-- - Microsoft ResX Schema + Microsoft ResX Schema Version 2.0 @@ -48,7 +48,7 @@ value : The object must be serialized with : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. - + mimetype: application/x-microsoft.net.object.soap.base64 value : The object must be serialized with : System.Runtime.Serialization.Formatters.Soap.SoapFormatter @@ -121,6 +121,6 @@ <value>17, 17</value> </metadata> <metadata name="elevBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> - <value>179, 17</value> + <value>239, 17</value> </metadata> </root> \ No newline at end of file diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/01-view/PumpViewChart.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/01-view/PumpViewChart.cs index 6e8d69b..a39a32c 100644 --- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/01-view/PumpViewChart.cs +++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/01-view/PumpViewChart.cs @@ -230,33 +230,40 @@ { } + private void ChartControl1_CustomPaint(object sender, CustomPaintEventArgs e) { if (!_initial_data) return; if (_vm == null) return; + if (_axis_x_flow.Visibility== DefaultBoolean.False) + return; if (e is not DXCustomPaintEventArgs dx_args) return; var cache = dx_args.Cache; - cache.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; - + cache.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; if (_vm.EqualEffList != null && _vm.EqualEffList.Any()) { using Pen pen = new(Color.Green, 2); foreach (var eq_eff in _vm.EqualEffList) { - var eq_eff_pt_list = eq_eff.CurveEqualEff; if (!eq_eff.IsValid()) continue; - var pic_eq_eff_pt_list = eq_eff_pt_list.Select(x => + var eq_eff_pt_list = eq_eff.CurveEqualEff; + var pic_eq_eff_pt_list = new List<Point>(); + foreach (var eq_eff_pt in eq_eff_pt_list) { - var pt = _diagram.DiagramToPoint(x.X, x.Y, _axis_x_flow, _axis_y_head).Point; - return pt; - }).ToList(); + var x = eq_eff_pt.X; + var y = eq_eff_pt.Y; + var coordinates = _diagram.DiagramToPoint(x, y, _diagram.AxisX, _diagram.AxisY); + if (coordinates == null) + continue; + var pt = new Point(coordinates.Point.X, coordinates.Point.Y); + pic_eq_eff_pt_list.Add(pt); + } + var pt_count = pic_eq_eff_pt_list.Count; - - // 缁樺埗 if (pt_count > 2) { if (eq_eff.IsClosed) @@ -281,7 +288,8 @@ Rectangle rc = new Rectangle(pic_eq_eff_pt_list[0].X - 2, pic_eq_eff_pt_list[0].Y - 2, 4, 4); using (Brush b = new SolidBrush(pen.Color)) cache.FillEllipse(b, rc); - } + } + } } @@ -315,13 +323,11 @@ /// </summary> public void SetBindingData(PumpCurveViewModel vm, bool default_visible = true, bool split_panel = false, bool eff_visible = false, bool power_visible = true) { - _vm = vm; + _vm = vm; _default_visible = default_visible; _split_panel = split_panel; _eff_visible = eff_visible; - _eff_visible = true; _power_visible = power_visible; - _power_visible = true; this.chartControl1.BeginInit(); this.chartControl1.Series.Clear(); this.chartControl1.AnnotationRepository.Clear(); @@ -339,7 +345,7 @@ AddEquip(vm.Equip); AddVariableSpeedList(vm.VariableSpeedList); - AddEqualEffList(vm.EqualEffList); + AddEqualEffList(vm.EqualEffList); AddEqualPowerList(vm.EqualPowerList); if (vm.Coordinate == null) @@ -661,7 +667,7 @@ { p_list_list.Add(_vm.CurveQP.Select(x => x.Y).ToList()); } - } + } if (_vm.Equip != null) { @@ -676,11 +682,11 @@ { q_list_list.Add(item.CurveQH.Select(x => x.X).ToList()); h_list_list.Add(item.CurveQH.Select(x => x.Y).ToList()); - if (item.CurveQE != null ) + if (item.CurveQE != null) { e_list_list.Add(item.CurveQE.Select(x => x.Y).ToList()); } - if (item.CurveQP != null ) + if (item.CurveQP != null) { p_list_list.Add(item.CurveQP.Select(x => x.Y).ToList()); } @@ -718,11 +724,13 @@ _maxH = Math.Max(_maxH, list.Max()); } + foreach (var list in e_list_list) { _minE = Math.Max(_minE, list.Min()); _maxE = Math.Max(_maxE, list.Max()); } + foreach (var list in p_list_list) { @@ -730,14 +738,13 @@ _maxP = Math.Max(_maxP, list.Max()); } - _coordinate = PumpCoordinate.CalcCoordinate(_minQ, _maxQ, _minH, _maxH, _minE, _maxE, _minP, _maxP); if (_coordinate == null) return; if (_coordinate.CoordMinQ + _coordinate.CoordSpaceQ * this._coordinate.GridNumberX < _maxQ * 1.05) { _coordinate.GridNumberX++; - } + } } @@ -746,17 +753,16 @@ /// </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) - { - _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; - + { _const_line_x.Visible = false; _const_line_y.Visible = false; _bottom_pane.Visibility = ChartElementVisibility.Hidden; @@ -857,8 +863,7 @@ _axis_y_power.SetAxisRange(_coordinate.DispMinP(), _coordinate.DispMaxP()); - - _bottom_pane.Visibility = ChartElementVisibility.Visible; + _bottom_pane.Visibility = _power_visible ? ChartElementVisibility.Visible : ChartElementVisibility.Hidden; } else { @@ -869,10 +874,10 @@ 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); @@ -885,7 +890,7 @@ 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; + 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); diff --git a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/03-import/03-point/PumpChartPointImportCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/03-import/03-point/PumpChartPointImportCtrl.cs index b86a077..8c3a69b 100644 --- a/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/03-import/03-point/PumpChartPointImportCtrl.cs +++ b/WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/03-import/03-point/PumpChartPointImportCtrl.cs @@ -321,7 +321,7 @@ return true; } - + private void Create() { if (IsInvalidData()) -- Gitblit v1.9.3