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) { } } } 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(); WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleWorkingLossCurveCtrl.cs
@@ -1,21 +1,8 @@ using DevExpress.Charts.Native; using DevExpress.Utils.About; using 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]; 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> 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); WinFrmUI/Yw.WinFrmUI.Phart.Core/02-pump/03-import/03-point/PumpChartPointImportCtrl.cs
@@ -321,7 +321,7 @@ return true; } private void Create() { if (IsInvalidData())