using DevExpress.Utils; using DevExpress.XtraCharts; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace IStation.WinFrmUI.Curve { /// /// 曲线展示控件 nsx 废弃 /// public partial class CurveViewChartCtrl : DevExpress.XtraEditors.XtraUserControl { #region 构造函数和加载函数 public CurveViewChartCtrl() { InitializeComponent(); InitialChart(); InitialChartDisplay(); } /// /// 初始化图表 /// private void InitialChart() { SeriesQHpoint = chartControl1.Series["SeriesQHpoint"]; SeriesQEpoint = chartControl1.Series["SeriesQEpoint"]; SeriesQPpoint = chartControl1.Series["SeriesQPpoint"]; SeriesQHcurve = chartControl1.Series["SeriesQHcurve"]; SeriesQEcurve = chartControl1.Series["SeriesQEcurve"]; SeriesQPcurve = chartControl1.Series["SeriesQPcurve"]; SeriesQHline = chartControl1.Series["SeriesQHline"]; mainChartDiagram = (XYDiagram)chartControl1.Diagram; SeriesQHpoint.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; SeriesQEpoint.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; SeriesQPpoint.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; SeriesQHcurve.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; SeriesQEcurve.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; SeriesQPcurve.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical; SeriesQHpoint.Visible = false; SeriesQEpoint.Visible = false; SeriesQPpoint.Visible = false; SeriesQHline.Visible = false; SeriesQHcurve.CrosshairEnabled = DefaultBoolean.False; SeriesQEcurve.CrosshairEnabled = DefaultBoolean.False; SeriesQPcurve.CrosshairEnabled = DefaultBoolean.False; SeriesQHpoint.CrosshairEnabled = DefaultBoolean.False; SeriesQEpoint.CrosshairEnabled = DefaultBoolean.False; SeriesQPpoint.CrosshairEnabled = DefaultBoolean.False; SeriesQHline.CrosshairHighlightPoints = DefaultBoolean.False; SeriesQHline.CrosshairEnabled = DefaultBoolean.False; AxisQ = mainChartDiagram.AxisX; QHAxisY = mainChartDiagram.AxisY; AxisQ.Visibility = DefaultBoolean.False; QHAxisY.Visibility = DefaultBoolean.False; QEAxisY = mainChartDiagram.SecondaryAxesY.GetAxisByName("QEAxisY"); QPAxisY = mainChartDiagram.SecondaryAxesY.GetAxisByName("QPAxisY"); QEAxisY.Visibility = DefaultBoolean.False; QPAxisY.Visibility = DefaultBoolean.False; WorkRegionStrip = AxisQ.Strips.GetStripByName("WorkRegion"); WorkRegionStrip.Visible = false; RatedParasLine = (DevExpress.XtraCharts.ConstantLine)mainChartDiagram.AxisX.ConstantLines.GetElementByName("RatedParasLine"); RatedParasLine.Visible = false; WorkParasLine = (DevExpress.XtraCharts.ConstantLine)mainChartDiagram.AxisX.ConstantLines.GetElementByName("WorkParasLine"); WorkParasLine.Visible = false; TextAnnotationQH = chartControl1.AnnotationRepository[0] as DevExpress.XtraCharts.TextAnnotation; TextAnnotationQE = chartControl1.AnnotationRepository[1] as DevExpress.XtraCharts.TextAnnotation; TextAnnotationQP = chartControl1.AnnotationRepository[2] as DevExpress.XtraCharts.TextAnnotation; TextAnnoWorkPoint = chartControl1.AnnotationRepository[3] as DevExpress.XtraCharts.TextAnnotation; TextAnnotationEquip = chartControl1.AnnotationRepository[4] as DevExpress.XtraCharts.TextAnnotation; TextAnnotationMaxE = chartControl1.AnnotationRepository[5] as DevExpress.XtraCharts.TextAnnotation; TextAnnotationMaxE.Visible = false; TextAnnoWorkPoint.Visible = false; TextAnnotationEquip.Visible = false; LineSeriesView view1 = (SplineSeriesView)SeriesQHcurve.View; view1.MarkerVisibility = DevExpress.Utils.DefaultBoolean.False; LineSeriesView view2 = (SplineSeriesView)SeriesQEcurve.View; view2.MarkerVisibility = DevExpress.Utils.DefaultBoolean.False; LineSeriesView view3 = (SplineSeriesView)SeriesQPcurve.View; view3.MarkerVisibility = DevExpress.Utils.DefaultBoolean.False; this.chartControl1.SeriesSelectionMode = SeriesSelectionMode.Point;//设置此属性 表示可以选择CHART上物体 // this.chartControl1.RuntimeSeriesSelectionMode = SeriesSelectionMode.Point;//系列选择是选择其中的点而不是整个系列 this.SeriesQHpoint.CrosshairHighlightPoints = DefaultBoolean.True; //this.chartControl1.RuntimeSeriesSelectionMode = SeriesSelectionMode.Series; //添加重绘事件 this.chartControl1.CustomPaint += new DevExpress.XtraCharts.CustomPaintEventHandler(this.chartControl_CustomPaint); this.chartControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseDown); this.chartControl1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseMove); this.chartControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseUp); } #endregion #region 显示 /// /// 是否显示点 /// private bool _isDispCurrentPoint = false; /// /// 是否显示点 /// public bool IsDispCurvePoint { get { return _isDispCurrentPoint; } set { _isDispCurrentPoint = value; } } /// /// 是否显示曲线标签 /// private bool isDispCurveName = false; /// /// 是否显示曲线标签 /// public bool IsDispCurveName { get { return isDispCurveName; } set { isDispCurveName = value; if (TextAnnotationQH != null) TextAnnotationQH.Visible = isDispCurveName; if (TextAnnotationQE != null) TextAnnotationQE.Visible = isDispCurveName; if (TextAnnotationQP != null) TextAnnotationQP.Visible = isDispCurveName; } } /// /// 初始化图标控件 (读取Cookie) /// private void InitialChartDisplay() { IStation.WinFrmUI.Curve.XtraChartHelper.SetDisplay(AxisQ, QHAxisY, QEAxisY, QPAxisY); IStation.WinFrmUI.Curve.XtraChartHelper.SetCurveDisplay(SeriesQHcurve, SeriesQEcurve, SeriesQPcurve); IStation.WinFrmUI.Curve.XtraChartHelper.SetPointDisplay(SeriesQHpoint, SeriesQEpoint, SeriesQPpoint); IStation.WinFrmUI.Curve.XtraChartHelper.SetDisplay(WorkRegionStrip); if (isDispCurveName) IStation.WinFrmUI.Curve.XtraChartHelper.SetDisplay(TextAnnotationQH, TextAnnotationQE, TextAnnotationQP); TextAnnotationQH.Visible = isDispCurveName; TextAnnotationQE.Visible = isDispCurveName; TextAnnotationQP.Visible = isDispCurveName; } #endregion #region 曲线 /// /// 是否只显示流量扬程线 /// private bool _isOnlyCurveQH = false; double _CurveMaxQ = 0, _CurveMinQ = 0; double _CurveMaxH = 0, _CurveMinH = 0; private List CurveInfoQH = null; public Model.CurveExpress CurveExprQH = null; private List CurveInfoQE = null; public Model.CurveExpress CurveExprQE = null; private List CurveInfoQP = null; private Model.CurveExpress CurveExprQP = null; public void SetCurveInfo(Model.FeatCurveExpressGroup curveExpressGroup) { if (curveExpressGroup == null) return; SetCurveInfo(curveExpressGroup.CurveQH, curveExpressGroup.CurveQE, curveExpressGroup.CurveQP); } public void SetCurveInfo(Model.CurveExpress curveQH, Model.CurveExpress curveQE, Model.CurveExpress curveQP) { if (curveQH == null) return; this.CurveExprQH = curveQH; this.CurveExprQE = curveQE; this.CurveExprQP = curveQP; this.CurveInfoQH = Model.FitCurveHelper.GetFitPoints(curveQH, 11); this.CurveInfoQE = Model.FitCurveHelper.GetFitPoints(curveQE, 11); this.CurveInfoQP = Model.FitCurveHelper.GetFitPoints(curveQP, 11); _isOnlyCurveQH = false; if (curveQE == null && curveQP == null) _isOnlyCurveQH = true; IsDispCurveName = true; } #endregion #region CHART变量 //测试的原始点 private Series SeriesQHpoint = null; private Series SeriesQEpoint = null; private Series SeriesQPpoint = null; //拟合后的曲线上的点 private Series SeriesQHcurve = null; private Series SeriesQEcurve = null; private Series SeriesQPcurve = null; private Series SeriesQHline = null; // private DevExpress.XtraCharts.XYDiagram mainChartDiagram; private DevExpress.XtraCharts.Strip WorkRegionStrip = null; private DevExpress.XtraCharts.ConstantLine RatedParasLine = null; private DevExpress.XtraCharts.ConstantLine WorkParasLine = null; // private DevExpress.XtraCharts.TextAnnotation TextAnnotationQH = null; private DevExpress.XtraCharts.TextAnnotation TextAnnotationQE = null; private DevExpress.XtraCharts.TextAnnotation TextAnnotationQP = null; private DevExpress.XtraCharts.TextAnnotation TextAnnotationEquip = null; private DevExpress.XtraCharts.TextAnnotation TextAnnoWorkPoint = null; private DevExpress.XtraCharts.TextAnnotation TextAnnotationMaxE = null; // AxisX AxisQ = null; AxisY QHAxisY = null; SecondaryAxisY QEAxisY = null; SecondaryAxisY QPAxisY = null; #endregion #region 坐标 //坐标 private Model.CurveCoordinateParas _coordinateParas = null; public Model.CurveCoordinateParas CoordinateParas { get { return _coordinateParas; } set { _coordinateParas = value; } } //更新图表坐标 public void UpdateCoordinate() { //先设置为不显示 AxisQ.Visibility = DefaultBoolean.False; QHAxisY.GridLines.Visible = false; QHAxisY.Visibility = DefaultBoolean.False; QPAxisY.GridLines.Visible = false; QPAxisY.Visibility = DefaultBoolean.False; QEAxisY.GridLines.Visible = false; QEAxisY.Visibility = DefaultBoolean.False; WorkRegionStrip.Visible = false; RatedParasLine.Visible = false; if (CoordinateParas == null) return; var coord = CoordinateParas; //流量 if (CurveInfoQH != null) { AxisQ.CustomLabels.Clear(); //坐标刻度 var Q_Label_List = new List(); double disQ = coord.CoordMinQ; for (int i = 0; i < coord.GridNumberX + 1; i++) { Q_Label_List.Add(new CustomAxisLabel(disQ.ToString(), disQ)); disQ = disQ + coord.CoordSpaceQ; } AxisQ.CustomLabels.AddRange(Q_Label_List.ToArray()); AxisQ.Visibility = DefaultBoolean.True; //设置显示 AxisQ.GridLines.Visible = true; Curve.XtraChartHelper.SetAxisRange(AxisQ, coord.CoordMinQ, coord.CoordMinQ + coord.GridNumberX * coord.CoordSpaceQ); } //扬程 if (CurveInfoQH != null) { QHAxisY.CustomLabels.Clear(); //坐标刻度 var H_Label_List = new List(); double disH = coord.CoordMinH + coord.CoordSpaceH * coord.StartLineNoH; for (int i = coord.StartLineNoH; i < coord.EndLineNoH + 1; i++) { H_Label_List.Add(new CustomAxisLabel(disH.ToString(), disH)); disH = disH + coord.CoordSpaceH; } QHAxisY.CustomLabels.AddRange(H_Label_List.ToArray()); //QHAxisY.GridLines.Visible = true; //设置显示 QHAxisY.Visibility = DefaultBoolean.True; if (_isOnlyCurveQH) { Curve.XtraChartHelper.SetAxisRange(QHAxisY, coord.DispMinH(), coord.DispMaxH()); } else { Curve.XtraChartHelper.SetAxisRange(QHAxisY, coord.CoordMinH, coord.CoordMinH + coord.GridNumberY * coord.CoordSpaceH); } } //效率 if (CurveInfoQE != null) { //坐标刻度 QEAxisY.CustomLabels.Clear(); List E_Label_List = new List(); double disE = coord.CoordMinE + coord.CoordSpaceE * coord.StartLineNoE; for (int i = coord.StartLineNoE; i < coord.EndLineNoE + 1; i++) { E_Label_List.Add(new CustomAxisLabel(disE.ToString(), disE)); disE = disE + coord.CoordSpaceE; } QEAxisY.CustomLabels.AddRange(E_Label_List.ToArray()); //QEAxisY.GridLines.Visible = true; //设置显示 QEAxisY.Visibility = DefaultBoolean.True; IStation.WinFrmUI.Curve.XtraChartHelper.SetAxisRange(QEAxisY, coord.CoordMinE, coord.CoordMinE + coord.GridNumberY * coord.CoordSpaceE); } //功率 if (CurveInfoQP != null) { //坐标刻度 QPAxisY.CustomLabels.Clear(); var P_Label_List = new List(); double disP = coord.CoordMinP + coord.CoordSpaceP * coord.StartLineNoP; for (int i = coord.StartLineNoP; i < coord.EndLineNoP + 1; i++) { P_Label_List.Add(new CustomAxisLabel(disP.ToString(), disP)); disP = disP + coord.CoordSpaceP; } QPAxisY.CustomLabels.AddRange(P_Label_List.ToArray()); //设置显示 //QPAxisY.GridLines.Visible = true; QPAxisY.Visibility = DefaultBoolean.True; IStation.WinFrmUI.Curve.XtraChartHelper.SetAxisRange(QPAxisY, coord.CoordMinP, coord.CoordMinP + coord.GridNumberY * coord.CoordSpaceP); } } #endregion #region 工作点 #region 设置工作点 private bool isDispWorkPt = false; private Model.GroupPoint workPt = new Model.GroupPoint(0, 0, 0, 0, 0); public void SetWorkPointQ(double wrkQ) { if (this.CurveInfoQH != null && this.CurveInfoQH.Count > 3) { workPt.Q = wrkQ; isDispWorkPt = true; SeriesQHline.Visible = true; WorkParasLine.Visible = true; WorkParasLine.Title.Visible = true; SeriesQHline.Visible = true; TextAnnoWorkPoint.Visible = true; CalcWorkPtByQ(wrkQ); SetQHLineByWorkPt(); } } public void SetWorkPointQ_Auto() { if (this.CurveInfoQH != null && this.CurveInfoQH.Count > 3) { double wrkQ = (_CurveMinQ + _CurveMaxQ) / 2; SetWorkPointQ(wrkQ); } } public void SetWorkPointH(double wrkH) { if (this.CurveInfoQH != null && this.CurveInfoQH.Count > 3) { workPt.H = wrkH; isDispWorkPt = true; SeriesQHline.Visible = true; WorkParasLine.Visible = true; WorkParasLine.Title.Visible = true; SeriesQHline.Visible = true; TextAnnoWorkPoint.Visible = true; double wrkQ = 0; if (CalcWorkQByH(wrkH, ref wrkQ)) { CalcWorkPtByQ(wrkQ); SetQHLineByWorkPt(); } } } public void IsNotDispWorkPt() { isDispWorkPt = false; WorkParasLine.Visible = false; WorkParasLine.Title.Visible = false; TextAnnoWorkPoint.Visible = false; SeriesQHline.Visible = false; } #endregion #region 计算 private void CalcWorkPtByQ(double refQ) { if (!isDispWorkPt) return; if (CurveInfoQH == null) return; if (refQ < _CurveMinQ * 1.01 || refQ > _CurveMaxQ * 0.999) return; workPt.Q = refQ; WorkParasLine.AxisValue = refQ; //WorkParasLine.Title.Visible = true; //WorkParasLine.Visible = true; //WorkParasLine.Title.Text = string.Format("{0:N1}", refQ); StringBuilder builder = new StringBuilder(); builder.AppendLine("---工作点参数---"); builder.AppendFormat("流量:{0:N1}", workPt.Q); workPt.H = Model.FitCurveHelper.GetFitPointY(CurveExprQH, refQ); builder.AppendLine(""); builder.AppendFormat("扬程:{0:N1}", workPt.H); if (CurveExprQE != null) { workPt.E = Model.FitCurveHelper.GetFitPointY(CurveExprQE, refQ); builder.AppendLine(""); builder.AppendFormat("效率:{0:N1}", workPt.E); } if (CurveExprQP != null) { workPt.P = Model.FitCurveHelper.GetFitPointY(CurveExprQP, refQ); builder.AppendLine(""); builder.AppendFormat("功率:{0:N1}", workPt.P); } TextAnnoWorkPoint.Visible = true; TextAnnoWorkPoint.Text = builder.ToString(); } private bool CalcWorkQByH(double wrkH, ref double wrkQ) { if (this.CurveInfoQH == null) return false; if (wrkH < _CurveMinH * 1.01 || wrkH > _CurveMaxH * 0.999) return false; List intrPts = Model.FitCurveHelper.GetInterPointX(CurveExprQH, wrkH); if (intrPts == null || intrPts.Count == 0) { return false; } else { wrkQ = intrPts.Last().X; return true; } } private void SetQHLineByWorkPt() { SeriesQHline.Visible = true; SeriesQHline.Points.Clear(); SeriesQHline.Points.Add(new SeriesPoint(CoordinateParas.CoordMinQ, workPt.H)); SeriesQHline.Points.Add(new SeriesPoint(workPt.Q, workPt.H)); } #endregion #endregion #region 更新 //更新所有 public void UpdateChart(bool isCalcCoordinate = false) { //要依次更新 if (this.CurveInfoQH == null || this.CurveInfoQH.Count < 3) return; if (isCalcCoordinate || CoordinateParas == null) {//不强迫计算,就用上次更新的坐标系 CalcCoordinate(); } UpdateCoordinate(); UpdatePoints(); UpdateWorkParas(); if (isDispWorkPt && workPt != null && this.CurveInfoQH != null && this.CurveInfoQH.Count > 2) { if (workPt.Q < _CurveMaxQ && workPt.Q > _CurveMinQ) { SetWorkPointQ(workPt.Q); } } } /// /// 计算坐标 /// public void CalcCoordinate() { if (CurveInfoQH != null && CurveInfoQH.Count() > 3) { CoordinateParas = Model.CurveCoordinateParas.CalcCoordinate(CurveInfoQH, CurveInfoQE, CurveInfoQP); _CurveMinQ = (from x in CurveInfoQH select x.X).Min(); _CurveMaxQ = (from x in CurveInfoQH select x.X).Max(); _CurveMinH = (from x in CurveInfoQH select x.Y).Min(); _CurveMaxH = (from x in CurveInfoQH select x.Y).Max(); } else { CoordinateParas = GetBlankCoordinate(); if (_CurveMinQ > _CurveMaxQ - 1) { _CurveMinQ = _CurveMinQ * 0.8; _CurveMaxQ = _CurveMaxQ * 1.2; } if (_CurveMinH > _CurveMaxH - 0.1) { _CurveMinH = _CurveMinH * 0.8; _CurveMaxH = _CurveMaxH * 1.2; } } } //更新所有点 public void UpdatePoints() { if (this.CurveInfoQH == null || this.CurveInfoQH.Count < 3) { SeriesQHpoint.Visible = false; SeriesQEpoint.Visible = false; SeriesQPpoint.Visible = false; SeriesQHcurve.Visible = false; SeriesQEcurve.Visible = false; SeriesQPcurve.Visible = false; return; } if (_isDispCurrentPoint) { SeriesQHpoint.Visible = true; SeriesQEpoint.Visible = true; SeriesQPpoint.Visible = true; } else { SeriesQHpoint.Visible = false; SeriesQEpoint.Visible = false; SeriesQPpoint.Visible = false; } int i = 0; //更新所有曲线 if (CurveInfoQH != null && CurveInfoQH.Count > 3) { SeriesQHcurve.Visible = true; SeriesQHcurve.Points.Clear(); for (i = 0; i < CurveInfoQH.Count(); i++) { SeriesQHcurve.Points.Add(new SeriesPoint(CurveInfoQH[i].X, new double[] { CurveInfoQH[i].Y })); } DevExpress.XtraCharts.PaneAnchorPoint paneAnchorPoint1 = TextAnnotationQH.AnchorPoint as DevExpress.XtraCharts.PaneAnchorPoint; paneAnchorPoint1.AxisXCoordinate.AxisValue = CurveInfoQH[CurveInfoQH.Count() - 2].X.ToString(); paneAnchorPoint1.AxisYCoordinate.AxisValue = CurveInfoQH[CurveInfoQH.Count() - 2].Y.ToString(); TextAnnotationQH.Visible = isDispCurveName; } else { SeriesQHcurve.Visible = false; TextAnnoWorkPoint.Visible = false; TextAnnotationQH.Visible = false; WorkParasLine.Visible = false; SeriesQHline.Visible = false; SeriesQHcurve.Points.Clear(); } if (CurveInfoQE != null && CurveInfoQE.Count > 3) { SeriesQEcurve.Visible = true; SeriesQEcurve.Points.Clear(); for (i = 0; i < CurveInfoQE.Count(); i++) { SeriesQEcurve.Points.Add(new SeriesPoint(CurveInfoQE[i].X, new double[] { CurveInfoQE[i].Y })); } DevExpress.XtraCharts.PaneAnchorPoint paneAnchorPoint2 = TextAnnotationQE.AnchorPoint as DevExpress.XtraCharts.PaneAnchorPoint; paneAnchorPoint2.AxisXCoordinate.AxisValue = CurveInfoQE[CurveInfoQE.Count() - 2].X.ToString(); paneAnchorPoint2.AxisYCoordinate.AxisValue = CurveInfoQE[CurveInfoQE.Count() - 2].Y.ToString(); TextAnnotationQE.Visible = isDispCurveName; } else { SeriesQEcurve.Visible = false; TextAnnotationQE.Visible = false; SeriesQEcurve.Points.Clear(); } if (CurveInfoQP != null && CurveInfoQP.Count > 3) { SeriesQPcurve.Visible = true; SeriesQPcurve.Points.Clear(); for (i = 0; i < CurveInfoQP.Count(); i++) { SeriesQPcurve.Points.Add(new SeriesPoint(CurveInfoQP[i].X, new double[] { CurveInfoQP[i].Y })); } DevExpress.XtraCharts.PaneAnchorPoint paneAnchorPoint3 = TextAnnotationQP.AnchorPoint as DevExpress.XtraCharts.PaneAnchorPoint; paneAnchorPoint3.AxisXCoordinate.AxisValue = CurveInfoQP[CurveInfoQP.Count() - 2].X.ToString(); paneAnchorPoint3.AxisYCoordinate.AxisValue = CurveInfoQP[CurveInfoQP.Count() - 2].Y.ToString(); TextAnnotationQP.Visible = isDispCurveName; } else { SeriesQPcurve.Visible = false; TextAnnotationQP.Visible = false; SeriesQEcurve.Points.Clear(); } } //更新工作参数 public void UpdateWorkParas() { if (WorkParasLine == null) return; if (isDispWorkPt && this.CurveInfoQH != null && this.CurveInfoQH.Count > 3) { if (workPt.Q > 2) { WorkParasLine.AxisValue = workPt.Q; WorkParasLine.Visible = true; } else { WorkParasLine.Visible = false; } } else { WorkParasLine.Visible = false; } } #endregion #region 重绘 Rectangle CalculateDiagramBounds() { Point p1 = mainChartDiagram.DiagramToPoint((double)mainChartDiagram.AxisX.VisualRange.MinValue, (double)mainChartDiagram.AxisY.VisualRange.MinValue).Point; Point p2 = mainChartDiagram.DiagramToPoint((double)mainChartDiagram.AxisX.VisualRange.MaxValue, (double)mainChartDiagram.AxisY.VisualRange.MaxValue).Point; return GeomHelper.CreateRectangle(p1, p2); } void chartControl_CustomPaint(object sender, CustomPaintEventArgs e) { if (_coordinateParas == null) return; if (!(e is DXCustomPaintEventArgs dxArgs)) return; chartControl1.DrawGridLineY(dxArgs, _coordinateParas, IStation.WinFrmUI.Curve.Cookie.ChartDisp.Default.GridLinesColorY, 0.2f, true); } #endregion #region chartControl1 bool isMoveWorkRefLine = false; bool isMoveSeriesQHline = false; private void chartControl1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { ChartHitInfo hitInfo = chartControl1.CalcHitInfo(e.Location); if (hitInfo.InConstantLine) { if (hitInfo.ConstantLine == WorkParasLine) isMoveWorkRefLine = true; } else if (hitInfo.InSeries) { if (hitInfo.Series == SeriesQHline) isMoveSeriesQHline = true; } else { DiagramCoordinates coordPt = mainChartDiagram.PointToDiagram(e.Location); double refQ = coordPt.NumericalArgument; double refH = coordPt.NumericalValue; } } } private void chartControl1_MouseMove(object sender, MouseEventArgs e) { if (isMoveWorkRefLine) { DiagramCoordinates coordPt = mainChartDiagram.PointToDiagram(e.Location); double refQ = coordPt.NumericalArgument; CalcWorkPtByQ(refQ); SetQHLineByWorkPt(); } else if (isMoveSeriesQHline) { DiagramCoordinates coordPt = mainChartDiagram.PointToDiagram(e.Location); double refH = coordPt.NumericalValue; double refQ = 0; if (CalcWorkQByH(refH, ref refQ)) { CalcWorkPtByQ(refQ); SetQHLineByWorkPt(); } } } private void chartControl1_MouseUp(object sender, MouseEventArgs e) { isMoveWorkRefLine = false; isMoveSeriesQHline = false; } #endregion /// /// 获取空白坐标 /// private Model.CurveCoordinateParas GetBlankCoordinate() { var para = new Model.CurveCoordinateParas(); para.GridNumberX = 30; para.GridNumberY = 16; //显示的坐标线号 para.StartLineNoH = 10; para.EndLineNoH = 15; para.StartLineNoE = 0; para.EndLineNoE = 10; para.StartLineNoP = 2; para.EndLineNoP = 9; //坐标最小值和间隔 para.CoordMinQ = 0; para.CoordSpaceQ = 1000; para.CoordMinH = 10; para.CoordSpaceH = 100; para.CoordMinE = 0; para.CoordSpaceE = 100; para.CoordMinP = 10; para.CoordSpaceP = 100; return para; } /// /// 清除数据 /// public void ClearData() { CurveExprQH = null; CurveInfoQH = null; CurveExprQE = null; CurveInfoQE = null; CurveExprQP = null; CurveInfoQP = null; UpdatePoints(); } /// /// 导出Excel /// public void ExportExcel() { IStation.WinFrmUI.Curve.ExportToXLS.Export(this.CurveExprQH, this.CurveExprQE, this.CurveExprQP, 12); } } }