| | |
| | | } |
| | | |
| | | #region Private Variable |
| | | |
| | | |
| | | private readonly string _tag_qh = "QH", _tag_qe = "QE", _tag_qp = "QP"; |
| | | |
| | | private XYDiagram _diagram; |
| | | private XYDiagramDefaultPane _default_pane; |
| | | private XYDiagramDefaultPane _default_pane; |
| | | private XYDiagramPane _bottom_pane; |
| | | private AxisX _axis_x_flow; |
| | | private AxisY _axis_y_head; |
| | | private SecondaryAxisY _axis_y_eff, _axis_y_power; |
| | | |
| | | private SecondaryAxisY _axis_y_eff, _axis_y_power; |
| | | |
| | | private PumpCoordinate _coordinate; |
| | | |
| | | private bool _qe_visible = true; |
| | |
| | | |
| | | private bool _equip_visible = true; |
| | | private Yw.Geometry.CubicSpline2d _equip_line = null; |
| | | private Yw.Geometry.Point2d _equip_pt = null; |
| | | private List<Tuple<string, Yw.Geometry.Point2d, Yw.Geometry.Point2d, Yw.Geometry.Point2d>> _equip_sect_pt_list; |
| | | private Yw.Geometry.Point2d _equip_pt = null; |
| | | private List<Tuple<string, Color, double, double, double?, double?>> _equip_sect_pt_list; |
| | | |
| | | private bool _initial_data = false; |
| | | |
| | | private PumpVariableSpeedViewViewModel _vm = null; |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region Public Evnet |
| | | |
| | | /// <summary> |
| | | /// åæ åæ¢äºä»¶ |
| | | /// </summary> |
| | | public event Action<PumpCoordinate> CoordinateChangedEvent = null; |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region Initial |
| | |
| | | this.chartControl1.Legend.Direction = DevExpress.XtraCharts.LegendDirection.TopToBottom; |
| | | |
| | | _diagram = (XYDiagram)this.chartControl1.Diagram; |
| | | _default_pane = _diagram.DefaultPane; |
| | | _default_pane = _diagram.DefaultPane; |
| | | _bottom_pane = (XYDiagramPane)_diagram.FindPaneByName("BottomPanel"); |
| | | |
| | | _axis_x_flow = _diagram.AxisX; |
| | | _axis_x_flow.SetAxisXQDisplay(); |
| | | _axis_x_flow.SetAxisXQDisplay(); |
| | | _axis_y_head = _diagram.AxisY; |
| | | _axis_y_head.SetAxisYQHDisplay(); |
| | | _axis_y_eff = _diagram.SecondaryAxesY.GetAxisByName("AxisYQE"); |
| | |
| | | _axis_y_power = _diagram.SecondaryAxesY.GetAxisByName("AxisYQP"); |
| | | _axis_y_power.SetSecondaryAxisYQPDisplay(); |
| | | |
| | | |
| | | this.chartControl1.SetChartMonoColorDisplay(); |
| | | |
| | | _axis_x_flow.Visibility = DefaultBoolean.False; |
| | | _axis_x_flow.GridLines.Visible = false; |
| | |
| | | _axis_y_eff.GridLines.Visible = false; |
| | | _axis_y_power.Visibility = DefaultBoolean.False; |
| | | _axis_y_power.GridLines.Visible = false; |
| | | |
| | | |
| | | |
| | | this.chartControl1.CustomPaint += ChartControl1_CustomPaint; |
| | | } |
| | |
| | | pen.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDotDot; |
| | | foreach (var tuple in _equip_sect_pt_list) |
| | | { |
| | | DrawEquipPoint(dxArgs.Cache, pen, tuple.Item2, tuple.Item3, tuple.Item4); |
| | | var color = tuple.Item2; |
| | | var flow = tuple.Item3; |
| | | var head = tuple.Item4; |
| | | var eff = tuple.Item5; |
| | | var power = tuple.Item6; |
| | | DrawWorkPoint(dxArgs.Cache, color, _axis_y_head, flow, head); |
| | | if (eff.HasValue && _qe_visible) |
| | | DrawWorkPoint(dxArgs.Cache, color, _axis_y_eff, flow, eff.Value); |
| | | if (power.HasValue && _qp_visible) |
| | | DrawWorkPoint(dxArgs.Cache, color, _axis_y_power, flow, power.Value); |
| | | } |
| | | |
| | | DrawEquipLine(dxArgs.Cache, pen, _equip_line); |
| | |
| | | cache.DrawPath(pen, path); |
| | | } |
| | | |
| | | private void DrawEquipPoint(GraphicsCache cache, Pen pen, Yw.Geometry.Point2d qh_sect_pt, Yw.Geometry.Point2d qe_sect_pt, Yw.Geometry.Point2d qp_sect_pt) |
| | | private void DrawWorkPoint(GraphicsCache cache, Color color, AxisYBase axis_y, double x, double y) |
| | | { |
| | | if (qh_sect_pt == null) |
| | | return; |
| | | |
| | | var offset_size = 10; |
| | | var qh_x = qh_sect_pt.X; |
| | | var qh_pt = _diagram.DiagramToPoint(qh_sect_pt.X, qh_sect_pt.Y, _axis_x_flow, _axis_y_head); |
| | | |
| | | var qh_pt_x = qh_pt.Point.X; |
| | | var qh_pt_y = qh_pt.Point.Y; |
| | | cache.DrawLine(pen, new Point(qh_pt_x, qh_pt_y - offset_size), new Point(qh_pt_x, qh_pt_y + offset_size)); |
| | | |
| | | if (qe_sect_pt != null && _qe_visible) |
| | | { |
| | | var qe_pt = _diagram.DiagramToPoint(qe_sect_pt.X, qe_sect_pt.Y, _axis_x_flow, _axis_y_eff); |
| | | var qe_pt_x = qe_pt.Point.X; |
| | | var qe_pt_y = qe_pt.Point.Y; |
| | | cache.DrawLine(pen, new Point(qe_pt_x, qe_pt_y - offset_size), new Point(qe_pt_x, qe_pt_y + offset_size)); |
| | | } |
| | | if (qp_sect_pt != null && _qp_visible) |
| | | { |
| | | var qp_pt = _diagram.DiagramToPoint(qp_sect_pt.X, qp_sect_pt.Y, _axis_x_flow, _axis_y_power); |
| | | var qp_pt_x = qp_pt.Point.X; |
| | | var qp_pt_y = qp_pt.Point.Y; |
| | | cache.DrawLine(pen, new Point(qp_pt_x, qp_pt_y - offset_size), new Point(qp_pt_x, qp_pt_y + offset_size)); |
| | | } |
| | | |
| | | var dg_pt = _diagram.DiagramToPoint(x, y, _axis_x_flow, axis_y); |
| | | cache.FillEllipse((int)(dg_pt.Point.X - 5), (int)(dg_pt.Point.Y - 5), 10, 10, color); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// åå§åå¾è¡¨æ°æ® |
| | | /// </summary> |
| | |
| | | _equip_line = null; |
| | | _equip_sect_pt_list = null; |
| | | if (_vm == null) |
| | | { |
| | | { |
| | | return; |
| | | } |
| | | |
| | | start_head ??= _coordinate.DispMinH(); |
| | | |
| | | |
| | | var equip_line = Yw.Geometry.EquipCurveHelper.CalcEquipCurve(_vm.CurveQH, _equip_pt, start_head.Value, out Yw.Geometry.Point2d sect_pt); |
| | | if (equip_line == null || sect_pt == null) |
| | | return; |
| | | _equip_line = equip_line; |
| | | _equip_sect_pt_list = new List<Tuple<string, Geometry.Point2d, Geometry.Point2d, Geometry.Point2d>>(); |
| | | _equip_sect_pt_list = new List<Tuple<string, Color, double, double, double?, double?>>(); |
| | | |
| | | Yw.Geometry.Point2d sect_pt_eff=null, sect_pt_power = null; |
| | | if (_vm.CurveQE != null) |
| | | { |
| | | var eff = _vm.CurveQE.GetPointY(sect_pt.X); |
| | | sect_pt_eff = new Geometry.Point2d(sect_pt.X, eff); |
| | | } |
| | | double sect_flow = sect_pt.X; |
| | | double sect_head = _vm.CurveQH.GetPointYUnlimited(sect_flow); |
| | | double? sect_eff = null, sect_power = null; |
| | | if (_vm.CurveQP != null) |
| | | { |
| | | var power = _vm.CurveQP.GetPointY(sect_pt.X); |
| | | sect_pt_power = new Geometry.Point2d(sect_pt.X, power); |
| | | sect_power = _vm.CurveQP.GetPointYUnlimited(sect_flow); |
| | | //sect_eff = PumpCalcHelper.CalculateE(sect_flow, sect_head, sect_power.Value); |
| | | } |
| | | |
| | | _equip_sect_pt_list.Add(new(_vm.Id, sect_pt,sect_pt_eff, sect_pt_power)); |
| | | foreach (var vm in _vm.Items) |
| | | if (_vm.CurveQE != null) |
| | | { |
| | | double flow = 0, head = 0; |
| | | double? eff = null, power = null; |
| | | |
| | | var pump_equip_line = Yw.Geometry.EquipCurveHelper.CalcEquipCurve(vm.CurveQH, _equip_pt, start_head.Value, out Yw.Geometry.Point2d pump_sect_pt); |
| | | if (pump_equip_line == null || pump_sect_pt == null) |
| | | return; |
| | | Yw.Geometry.Point2d pump_sect_pt_eff = null, pump_sect_pt_power = null; |
| | | |
| | | flow = pump_sect_pt.X; |
| | | head = vm.CurveQH.GetPointYUnlimited(flow); |
| | | if (vm.CurveQP != null) |
| | | { |
| | | power = vm.CurveQP.GetPointYUnlimited(flow); |
| | | eff = PumpCalcHelper.CalculateE(flow, head, power.Value); |
| | | |
| | | pump_sect_pt_eff = new Geometry.Point2d(flow, eff.Value); |
| | | pump_sect_pt_power = new Geometry.Point2d(flow, power.Value); |
| | | } |
| | | else if (vm.CurveQE != null) |
| | | { |
| | | eff = vm.CurveQE.GetPointYUnlimited(flow); |
| | | power = PumpCalcHelper.CalculateP(flow, head, eff.Value); |
| | | |
| | | pump_sect_pt_eff = new Geometry.Point2d(flow, eff.Value); |
| | | pump_sect_pt_power = new Geometry.Point2d(flow, power.Value); |
| | | } |
| | | |
| | | _equip_sect_pt_list.Add(new(vm.Id, new Geometry.Point2d(flow, head), pump_sect_pt_eff, pump_sect_pt_power)); |
| | | sect_eff = _vm.CurveQE.GetPointYUnlimited(sect_flow); |
| | | // sect_power = PumpCalcHelper.CalculateP(sect_flow, sect_head, sect_eff.Value); |
| | | } |
| | | |
| | | UpdateChart(true); |
| | | |
| | | _equip_sect_pt_list.Add(new(_vm.Id, _vm.Color, sect_flow, sect_head, sect_eff, sect_power)); |
| | | if (_vm.Items != null && _vm.Items.Any()) |
| | | { |
| | | foreach (var vm in _vm.Items) |
| | | { |
| | | double flow = 0, head = 0; |
| | | double? eff = null, power = null; |
| | | |
| | | var pump_equip_line = Yw.Geometry.EquipCurveHelper.CalcEquipCurve(vm.CurveQH, _equip_pt, start_head.Value, out Yw.Geometry.Point2d pump_sect_pt); |
| | | if (pump_equip_line == null || pump_sect_pt == null) |
| | | return; |
| | | |
| | | flow = pump_sect_pt.X; |
| | | head = vm.CurveQH.GetPointYUnlimited(flow); |
| | | if (vm.CurveQP != null) |
| | | { |
| | | power = vm.CurveQP.GetPointYUnlimited(flow); |
| | | //eff = PumpCalcHelper.CalculateE(flow, head, power.Value); |
| | | } |
| | | if (vm.CurveQE != null) |
| | | { |
| | | eff = vm.CurveQE.GetPointYUnlimited(flow); |
| | | //power = PumpCalcHelper.CalculateP(flow, head, eff.Value); |
| | | } |
| | | |
| | | _equip_sect_pt_list.Add(new(vm.Id, vm.Color, flow, head, eff, power)); |
| | | } |
| | | } |
| | | UpdateChart(true); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | CalcSeries(); |
| | | |
| | | CalcChartAxis(); |
| | | CalcChartAxis(); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | _axis_y_eff.GridLines.Visible = false; |
| | | _axis_y_power.Visibility = DefaultBoolean.False; |
| | | _axis_y_power.GridLines.Visible = false; |
| | | |
| | | |
| | | |
| | | _bottom_pane.Visibility = ChartElementVisibility.Hidden; |
| | | |
| | | |
| | | _bottom_pane.Visibility = _qp_visible ? ChartElementVisibility.Visible : ChartElementVisibility.Hidden; |
| | | |
| | | //计ç®å»åº¦ Q |
| | |
| | | } |
| | | |
| | | //åç |
| | | if (_max_power > _min_power) |
| | | if (_max_power > _min_power && _qp_visible) |
| | | { |
| | | //计ç®å»åº¦ |
| | | var labels = new List<CustomAxisLabel>(); |
| | |
| | | var grid_count_power = _coordinate.EndLineNoP - _coordinate.StartLineNoP; |
| | | var min_axis_power = _coordinate.CoordMinP + _coordinate.StartLineNoP * _coordinate.CoordSpaceP; |
| | | var max_axis_power = min_axis_power + grid_count_power * _coordinate.CoordSpaceP; |
| | | _axis_y_power.SetAxisRange(min_axis_power, max_axis_power); |
| | | _axis_y_power.SetAxisRange(min_axis_power, max_axis_power); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | this.chartControl1.BeginInit(); |
| | | this.chartControl1.Series.Clear(); |
| | | |
| | | var annotation_count = this.chartControl1.AnnotationRepository.Count; |
| | | for (int i = annotation_count - 1; i > 0; i--) |
| | | { |
| | | if (i == 0) |
| | | break; |
| | | this.chartControl1.AnnotationRepository.RemoveAt(i); |
| | | } |
| | | |
| | | this.chartControl1.AnnotationRepository.Clear(); |
| | | this.chartControl1.Legend.CustomItems.Clear(); |
| | | |
| | | if (_vm != null) |
| | | { |
| | | CreateLineSeries(_vm.Id, _vm.Name, _vm.CurveQH, _vm.CurveQE, _vm.CurveQP); |
| | | _vm.Color = RandomColorHelper.Get(0); |
| | | CreateLineSeries(_vm.Id, _vm.Color, _vm.Name, _vm.CurveQH, _vm.CurveQE, _vm.CurveQP); |
| | | if (_vm.Items != null && _vm.Items.Any()) |
| | | { |
| | | foreach (var vm in _vm.Items) |
| | | for (int i = 0; i < _vm.Items.Count; i++) |
| | | { |
| | | CreateLineSeries(vm.Id, vm.Name, vm.CurveQH, vm.CurveQE, vm.CurveQP); |
| | | var vm = _vm.Items[i]; |
| | | vm.Color = RandomColorHelper.Get(i + 1); |
| | | CreateLineSeries(vm.Id, vm.Color, vm.CurveName, vm.CurveQH, vm.CurveQE, vm.CurveQP); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | this.chartControl1.EndInit(); |
| | | this.chartControl1.EndInit(); |
| | | } |
| | | ã |
| | | |
| | | |
| | | /// <summary> |
| | | /// å建线系å |
| | | /// </summary> |
| | | private void CreateLineSeries(string id, string curve_name, Yw.Geometry.CubicSpline2d qh, Yw.Geometry.CubicSpline2d qe, Yw.Geometry.CubicSpline2d qp) |
| | | private void CreateLineSeries(string id, Color color, string curve_name, Yw.Geometry.CubicSpline2d qh, Yw.Geometry.CubicSpline2d qe, Yw.Geometry.CubicSpline2d qp) |
| | | { |
| | | var series_qh = new DevExpress.XtraCharts.Series(); |
| | | series_qh.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; |
| | |
| | | |
| | | var series_qh_view = new DevExpress.XtraCharts.SplineSeriesView(); |
| | | series_qh_view.LineStyle.Thickness = 2; |
| | | //series_qh_view.Color = vm.Color; |
| | | series_qh_view.Color = color; |
| | | series_qh_view.EnableAntialiasing = DefaultBoolean.True; |
| | | series_qh_view.LineTensionPercent = 50; |
| | | |
| | |
| | | txt_qh.AutoHeight = true; |
| | | txt_qh.AutoWidth = true; |
| | | txt_qh.BackColor = System.Drawing.Color.Transparent; |
| | | //txt_qh.Border.Color = vm.Color; |
| | | txt_qh.Border.Color = color; |
| | | txt_qh.ConnectorStyle = DevExpress.XtraCharts.AnnotationConnectorStyle.Line; |
| | | txt_qh.DXFont = PumpChartDisplay.AnnoFontQH; |
| | | txt_qh.Name = _tag_qh + id; |
| | |
| | | txt_qh.RuntimeResizing = false; |
| | | txt_qh.RuntimeRotation = false; |
| | | txt_qh.Text = curve_name; |
| | | //txt_qh.TextColor = vm.Color; |
| | | txt_qh.TextColor = color; |
| | | txt_qh.ShapePosition = position_qh; |
| | | txt_qh.Visible = true; |
| | | this.chartControl1.AnnotationRepository.Add(txt_qh); |
| | |
| | | |
| | | var series_qe_view = new DevExpress.XtraCharts.SplineSeriesView(); |
| | | series_qe_view.LineStyle.Thickness = 2; |
| | | //series_qe_view.Color = vm.Color; |
| | | series_qe_view.Color = color; |
| | | series_qe_view.AxisY = _axis_y_eff; |
| | | series_qe_view.Pane = _default_pane; |
| | | series_qe_view.EnableAntialiasing = DefaultBoolean.True; |
| | |
| | | |
| | | var series_qp_view = new DevExpress.XtraCharts.SplineSeriesView(); |
| | | series_qp_view.LineStyle.Thickness = 2; |
| | | //series_qp_view.Color = vm.Color; |
| | | series_qp_view.Color = color; |
| | | series_qp_view.AxisY = _axis_y_power; |
| | | series_qp_view.Pane = _bottom_pane; |
| | | series_qp_view.EnableAntialiasing = DefaultBoolean.True; |
| | |
| | | } |
| | | |
| | | this.chartControl1.Series.Add(series_qp); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | |
| | | #region Right Click Menu |
| | | |
| | | #region Event |
| | | |
| | | |
| | | private void barBtnSetChartAxis_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) |
| | | { |
| | | SetChartAxis(); |
| | | } |
| | | |
| | | } |
| | | |
| | | private void barCekCurveQEVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) |
| | | { |
| | | _qe_visible = this.barCekCurveQEVisible.Checked; |
| | | _qe_visible = this.barCekCurveQEVisible.Checked; |
| | | UpdateChart(); |
| | | } |
| | | |
| | |
| | | { |
| | | _bottom_pane.Visibility = _bottom_pane.Visibility == ChartElementVisibility.Visible ? ChartElementVisibility.Hidden : ChartElementVisibility.Visible; |
| | | _qp_visible = _bottom_pane.Visibility == ChartElementVisibility.Visible ? true : false; |
| | | |
| | | UpdateChart(); |
| | | } |
| | | |
| | | private void barCekCurveEQVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) |
| | | { |
| | | _equip_visible = this.barCekCurveEQVisible.Checked; |
| | | _equip_visible = this.barCekCurveEQVisible.Checked; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// è®¾ç½®åæ è½´ |
| | | /// </summary> |
| | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |