private void chartControl_CustomPaint(object sender, CustomPaintEventArgs e) { Graphics g = e.Graphics; //g.SetClip(CalculateDiagramBounds()); g.SmoothingMode = SmoothingMode.AntiAlias; #region 添加水印 if (_isDispWaterText) { chartControl1.DrawCorpLogo(g); } #endregion 添加水印 #region 绘制网格线 if (_chartPanelStyle == SPump.Model.eChartDiagramPanelStyle.Whole) { chartControl1.DrawFullGridLineY(g, _coordinateParas, _isMonoColor ? Color.Silver : SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.GridLinesColorY); } #endregion 绘制网格线 #region 设计点 if (_defaultDesignPointStdUnit != null && _defaultDesignPointStdUnit.X >= 0 && _defaultDesignPointStdUnit.Y >= 0) { var dp_color = _isMonoColor ? Color.Gray : Color.Red; if (_designPointDispType == Eventech.Model.eDesignPointDispType.LeftDownTriangle) { chartControl1.DrawDesignPoint4Triangle(g, _defaultDesignPointStdUnit, this._coordinateParas, dp_color, 2f); } else if (_designPointDispType == Eventech.Model.eDesignPointDispType.PointCircle) { chartControl1.DrawDesignPoint4Circle(g, _defaultDesignPointStdUnit, this._coordinateParas, dp_color); } else if (_designPointDispType == Eventech.Model.eDesignPointDispType.BlodTriangle) { chartControl1.DrawDesignPoint4TriangleBlod(g, _defaultDesignPointStdUnit, this._coordinateParas, dp_color); } else if (_designPointDispType == Eventech.Model.eDesignPointDispType.EquilateralTriangle) { chartControl1.DrawDesignPoint4EquilateralTriangle(g, _defaultDesignPointStdUnit, this._coordinateParas, dp_color); } else { chartControl1.DrawDesignPoint4Cross(g, _defaultDesignPointStdUnit, dp_color, 2f, _defaultDpTolerance); } } #endregion 设计点 #region 辅助设计点 if (this._auxDesignPoints != null && _auxDesignPoints.Count > 0) {//满足QH要求(0 表示不用符合 1需要选型 2可以变频符合) var dp_color = _isMonoColor ? Color.Gray : Color.Red; if (_designPointDispType == Eventech.Model.eDesignPointDispType.LeftDownTriangle) { foreach (var pt in _auxDesignPoints) { if (pt.AccordQH == 0) { chartControl1.DrawDesignPoint4Triangle(g, pt.StdUnitPt, this._coordinateParas, Color.OrangeRed, 2f); } else if (pt.AccordQH == 1) { chartControl1.DrawDesignPoint4Triangle(g, pt.StdUnitPt, this._coordinateParas, dp_color, 2f); } } } else if (_designPointDispType == Eventech.Model.eDesignPointDispType.PointCircle) { foreach (var pt in _auxDesignPoints) { if (pt.AccordQH == 0) { chartControl1.DrawDesignPoint4Circle(g, pt.StdUnitPt, this._coordinateParas, Color.OrangeRed, 2f); } else if (pt.AccordQH == 1) { chartControl1.DrawDesignPoint4Circle(g, pt.StdUnitPt, this._coordinateParas, dp_color); } } } else if (_designPointDispType == Eventech.Model.eDesignPointDispType.BlodTriangle) { foreach (var pt in _auxDesignPoints) { if (pt.AccordQH == 0) { chartControl1.DrawDesignPoint4TriangleBlod(g, pt.StdUnitPt, this._coordinateParas, Color.OrangeRed); } else if (pt.AccordQH == 1) { chartControl1.DrawDesignPoint4TriangleBlod(g, pt.StdUnitPt, this._coordinateParas, dp_color); } } } else if (_designPointDispType == Eventech.Model.eDesignPointDispType.EquilateralTriangle) { foreach (var pt in _auxDesignPoints) { if (pt.AccordQH == 0) { chartControl1.DrawDesignPoint4EquilateralTriangle(g, pt.StdUnitPt, this._coordinateParas, Color.OrangeRed); } else if (pt.AccordQH == 1) { chartControl1.DrawDesignPoint4EquilateralTriangle(g, pt.StdUnitPt, this._coordinateParas, dp_color); } } } else { foreach (var pt in _auxDesignPoints) { if (pt.AccordQH == 0) { chartControl1.DrawDesignPoint4Cross(g, pt.StdUnitPt, Color.OrangeRed, 2f, _defaultDpTolerance); } else if (pt.AccordQH == 1) { chartControl1.DrawDesignPoint4Cross(g, pt.StdUnitPt, dp_color, 2f, _defaultDpTolerance); } } } } #endregion #region 绘制型谱 if (_spectrumShape != null && _isDispSpectrum && !this.IsOnlyShowWrkCurve) { chartControl1.DrawLxpSpectrum(g, _spectrumShape, _isMonoColor ? Color.Silver : _spectrumBackColor, _isMonoColor ? Color.FromArgb(50, Color.Silver) : _spectrumBackColor, 2f, Eventech.Model.eSpectrumDispStyle.Solid, null); } #endregion 绘制型谱 #region 区域 //(最优区域) if (this._performParas != null && this._isDispPreferRegion) { if (this._perferRegionDispStyle == Model.eRegionDispStyle.Strip) { SetRegionStrip(g, this._performParas.PreferredRegionMin, this._performParas.PreferredRegionMax, this._preferredRegionStripColor, SPump.WinFrmUI.Localization.TranslateHelper.GetString("最优区域")); } else if (this._perferRegionDispStyle == Model.eRegionDispStyle.Blod) { SetRegionBlodCurve(g, this._performParas.PreferredRegionMin, this._performParas.PreferredRegionMax); } else if (this._perferRegionDispStyle == Model.eRegionDispStyle.Spectrum) {//区域以型谱的方式显示 if (_spectrumShape_PreferRegion != null) { chartControl1.DrawLxpSpectrum(g, _spectrumShape_PreferRegion, _isMonoColor ? Color.Silver : _preferredRegionStripColor, _isMonoColor ? Color.FromArgb(50, Color.Silver) : _preferredRegionStripColor, 2f, Eventech.Model.eSpectrumDispStyle.Solid, null); } } } //(允许区域) if (this._performParas != null && this._isDispAllowableRegion) { if (this._allowRegionDispStyle == Model.eRegionDispStyle.Strip) { SetRegionStrip(g, this._performParas.AllowableRegionMin, this._performParas.AllowableRegionMax, this._allowableRegionColor, SPump.WinFrmUI.Localization.TranslateHelper.GetString("允许区域")); } else if (this._allowRegionDispStyle == Model.eRegionDispStyle.Blod) { SetRegionBlodCurve(g, this._performParas.AllowableRegionMin, this._performParas.AllowableRegionMax); } //else if (this._allowRegionDispStyle == Model.eRegionDispStyle.Spectrum) //{//区域以型谱的方式显示 // if (_spectrumShape_PreferRegion != null) // { // chartControl1.DrawLxpSpectrum(g, _spectrumShape_PreferRegion, isMonoColor ? Color.Silver : _allowableRegionColor, // isMonoColor ? Color.FromArgb(50, Color.Silver) : _allowableRegionColor, 2f, Eventech.Model.eSpectrumDispStyle.Solid, null); // } //} } #endregion 区域 #region 等效线 if (_allEqualParaCurveE != null && _isDispEqualParaCurveE && !this.IsOnlyShowWrkCurve) { Color curve_color = Color.Empty; if (_isMonoColor) { curve_color = Color.Gray; } chartControl1.DrawEqualParaCurveE(g, _allEqualParaCurveE, curve_color, _coordinateParas); } #endregion 等效线 #region 绘制装置曲线 if (_equipCurve != null && _equipCurve.CurveInfo != null && _isDispEquipmentCurve) { g.SetClip(CalculateDiagramBounds());//保证曲线不会绘制图表外面 chartControl1.DrawEquipmentCurve(g, _equipCurve.CurveInfo, _isMonoColor); g.ResetClip(); } #endregion #region 切割线 if (_allDefineSimuCurveInfo != null && _curveBundleDispStyle == Model.eLxpCurveBundleDispStyle.所有曲线) { #region 绘制切割线 foreach (var cutCurve in _allDefineSimuCurveInfo) { if (cutCurve.CurveExpressQH == null) continue; var qhListPoints = cutCurve.GetPointInfoQH(); //判断切割线是否包含最小曲线 if (this._simuCurves != null && this._simuCurves.FeatCurveQH != null && this._simuCurves.FeatCurveQH.CurveExpress.CurveFitType != Eventech.Model.eCurveFitType.ThroughPoint) { if (Math.Abs(_simuCurves.FeatCurveQH.CurveExpress.Index0 - cutCurve.CurveExpressQH.Index0) < 0.000005 && Math.Abs(_simuCurves.FeatCurveQH.CurveExpress.Index1 - cutCurve.CurveExpressQH.Index1) < 0.000005) continue; } if (this._minCurves != null && this._minCurves.FeatCurveQH != null && this._minCurves.FeatCurveQH.CurveExpress.CurveFitType != Eventech.Model.eCurveFitType.ThroughPoint) { if (Math.Abs(_minCurves.FeatCurveQH.CurveExpress.Index0 - cutCurve.CurveExpressQH.Index0) < 0.000005 && Math.Abs(_minCurves.FeatCurveQH.CurveExpress.Index1 - cutCurve.CurveExpressQH.Index1) < 0.000005) continue; } #region 流量扬程线 if (qhListPoints != null) { Color colorQH = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorQH; var screenPoints = new List();//得到屏幕上点坐标 for (int i = 0; i < qhListPoints.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(qhListPoints[i].X, qhListPoints[i].Y, AxisQ, QHAxisY); screenPoints.Add(coor.Point); } //去掉重曲线复点 Point[] pointArray = screenPoints.Distinct().ToArray(); //绘制曲线 if (pointArray.Length > 2) { using (Pen penCurve = new Pen(colorQH, 1f)) { g.DrawCurve(penCurve, pointArray); } } } #endregion 流量扬程线 #region 流量功率线 var qpListPoints = cutCurve.GetPointInfoQP(); if (qpListPoints != null) { Color colorQP = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorQP; var screenPoints = new List();//得到屏幕上点坐标 if (this._chartPanelStyle == Model.eChartDiagramPanelStyle.Whole) { for (int i = 0; i < qpListPoints.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(qpListPoints[i].X, qpListPoints[i].Y, AxisQ, QPAxisY); screenPoints.Add(coor.Point); } } else { for (int i = 0; i < qpListPoints.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(qpListPoints[i].X, qpListPoints[i].Y, AxisQ, QPAxisY, this.bottomChartDiagram); screenPoints.Add(coor.Point); } } //去掉重曲线复点 Point[] pointArray = screenPoints.Distinct().ToArray(); //绘制曲线 if (pointArray.Length > 2) { using (Pen penCurveQP = new Pen(colorQP, 1f)) { g.DrawCurve(penCurveQP, pointArray); } } } #endregion 流量功率线 } #endregion 绘制切割线 } if (_allDefineSimuCurveInfo != null && _queryLinePara > 0 && this._isQueryCurvePara1) { Color colorQE = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorQE; var screenPoints = new List();//得到屏幕上点坐标 var point_qes = Eventech.Common.FitCurveHelper.GetFitPoints( _allDefineSimuCurveInfo[_queryLinePara - 1].CurveExpressQE, 12); for (int i = 0; i < point_qes.Count(); i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(point_qes[i].X, point_qes[i].Y, AxisQ, QEAxisY); screenPoints.Add(coor.Point); } //去掉重曲线复点 Point[] pointArray = screenPoints.Distinct().ToArray(); //绘制曲线 if (pointArray.Length > 2) { using (Pen penCurve = new Pen(colorQE, 1f)) { g.DrawCurve(penCurve, pointArray); } } } #endregion 切割线 #region 曲线公差 if (_isDispCurveTolerance && !this.IsOnlyShowWrkCurve) { if (_toleranceCurveParas != null) { chartControl1.DrawToleranceCurveParas(g, _toleranceCurveParas, Color.FromArgb(70, Color.DeepSkyBlue)); } } #endregion 曲线公差 #region 最小流量线 if (_minFlowCurve != null && !this.IsOnlyShowWrkCurve) { using (Pen penCurve = new Pen(Color.CadetBlue, 1f)) { penCurve.DashStyle = System.Drawing.Drawing2D.DashStyle.Custom; penCurve.DashPattern = new float[] { 5, 5 }; List otherScreenPoints = new List(); for (int i = 0; i < _minFlowCurve.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_minFlowCurve[i].X, _minFlowCurve[i].Y, AxisQ, QHAxisY); otherScreenPoints.Add(coor.Point); } if (otherScreenPoints.Count < 2) { } else if (otherScreenPoints.Count == 2) { g.DrawLine(penCurve, otherScreenPoints[0], otherScreenPoints[1]); } else { //绘制曲线 g.DrawCurve(penCurve, otherScreenPoints.ToArray(), 0.5f); } } } #endregion 最小流量线 #region 显示 点击坐标 if (!_isQueryCurvePara1 && _isDispClickHint && _clickEquipResult != null) { g.SetClip(CalculateDiagramBounds());//保证曲线不会绘制图表外面 chartControl1.DrawEquipmentCurve(g, _clickEquipResult.EquipCurve.CurveInfo, _isMonoColor); g.ResetClip(); using (Pen penCurve = new Pen(_isMonoColor ? Color.Black : Color.Blue, 2f)) { ControlCoordinates coor_qh = mainChartDiagram.DiagramToPoint(_clickEquipResult.SectPt.Q, _clickEquipResult.SectPt.H, AxisQ, QHAxisY); g.DrawEllipse(penCurve, coor_qh.Point.X - 2, coor_qh.Point.Y - 2, 4, 4); if (this._isDisplayCurveQE) { ControlCoordinates coor_qe = mainChartDiagram.DiagramToPoint(_clickEquipResult.SectPt.Q, _clickEquipResult.SectPt.E, AxisQ, QEAxisY); g.DrawEllipse(penCurve, coor_qe.Point.X - 2, coor_qe.Point.Y - 2, 4, 4); } if (this._isDisplayCurveQP) { ControlCoordinates coor_qp = mainChartDiagram.DiagramToPoint(_clickEquipResult.SectPt.Q, _clickEquipResult.SectPt.P, AxisQ, QPAxisY); g.DrawEllipse(penCurve, coor_qp.Point.X - 2, coor_qp.Point.Y - 2, 4, 4); } if (_clickEquipResult.SectPt.NPSH > 0) { ControlCoordinates coor_qnpsh = mainChartDiagram.DiagramToPoint(_clickEquipResult.SectPt.Q, _clickEquipResult.SectPt.NPSH, AxisQ, NPSHAxisY); g.DrawEllipse(penCurve, coor_qnpsh.Point.X - 2, coor_qnpsh.Point.Y - 2, 4, 4); } } using (SolidBrush bkText = new SolidBrush(Color.White))//Color.FromArgb(20, Color.White))) using (SolidBrush brushText = new SolidBrush(Color.Gray)) using (Font fontText = SPump.WinFrmUI.CorpSkinStyleHelper.GetDefaultFont()) { StringBuilder sb_operateInfo = new StringBuilder(); sb_operateInfo.AppendFormat("{0}: {1} ({2})\r\n", SPump.WinFrmUI.Localization.TranslateHelper.GetString("流量"), CalcDispValueQ(_clickEquipResult.SectPt.Q), Eventech.Common.UnitQHelper.GetEnUnitName(_coordinate_unitQ)); sb_operateInfo.AppendFormat("{0}: {1} ({2})\r\n", SPump.WinFrmUI.Localization.TranslateHelper.GetString("扬程"), CalcDispValueH(_clickEquipResult.SectPt.H), Eventech.Common.UnitHHelper.GetEnUnitName(_coordinate_unitH)); if (this._isDisplayCurveQE) { sb_operateInfo.AppendFormat("{0}: {1} (%)\r\n", SPump.WinFrmUI.Localization.TranslateHelper.GetString(_seriesEntity.GetEtaTextName(SPump.WinFrmUI.Localization.Current)), Math.Round(_clickEquipResult.SectPt.E, 1)); } if (this._isDisplayCurveQP) { sb_operateInfo.AppendFormat("{0}: {1} ({2})\r\n", SPump.WinFrmUI.Localization.TranslateHelper.GetString(_seriesEntity.GetPowerTextName(SPump.WinFrmUI.Localization.Current)), CalcDispValueP(_clickEquipResult.SectPt.P), Eventech.Common.UnitPHelper.GetEnUnitName(_coordinate_unitP)); } if (_clickEquipResult.SectPt.NPSH > 0) { sb_operateInfo.AppendFormat("{0}: {1} ({2})", SPump.WinFrmUI.Localization.TranslateHelper.GetString("汽蚀"), CalcDispValueNPSH(_clickEquipResult.SectPt.NPSH), Eventech.Common.UnitHHelper.GetEnUnitName(_coordinate_unitNPSH)); } XYDiagram mainDiagram = (XYDiagram)this.chartControl1.Diagram; var diagram_left_top_pt = mainDiagram.DiagramToPoint(this._coordinateParas.DispMaxQ(), this._coordinateParas.DispMaxH()).Point; StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Near; var sb_operateInfo_str = sb_operateInfo.ToString(); var text_size = g.MeasureString(sb_operateInfo_str, fontText); g.FillRectangle(bkText, diagram_left_top_pt.X - text_size.Width - 5 - 3, diagram_left_top_pt.Y + 8 - 3, text_size.Width + 6, text_size.Height + 6); g.DrawString(sb_operateInfo_str, fontText, brushText, diagram_left_top_pt.X - text_size.Width - 5, diagram_left_top_pt.Y + 8, sf); } } #endregion 显示 点击坐标 #region 消防认证点 if (_isDispAllCertifiedPoint && _allCertifiedPoint != null && _allCertifiedPoint.Count > 0) { using (Pen penCurve = new Pen(Color.PaleVioletRed, 3f)) { for (int i = 0; i < _allCertifiedPoint.Count; i++) { var pt = _allCertifiedPoint[i]; ControlCoordinates coor1 = mainChartDiagram.DiagramToPoint( Eventech.Common.UnitQHelper.toM3H(Eventech.Model.UnitQ.USGalMin, pt.Q), Eventech.Common.UnitHHelper.toM(Eventech.Model.UnitH.Psi, pt.Hmin), AxisQ, QHAxisY); if (pt.Hmin > (pt.Hmax - 1)) { using (SolidBrush brush = new SolidBrush(Color.PaleVioletRed)) g.FillEllipse(brush, coor1.Point.X - 3, coor1.Point.Y - 3, 6, 6); } else { ControlCoordinates coor2 = mainChartDiagram.DiagramToPoint( Eventech.Common.UnitQHelper.toM3H(Eventech.Model.UnitQ.USGalMin, pt.Q), Eventech.Common.UnitHHelper.toM(Eventech.Model.UnitH.Psi, pt.Hmax), AxisQ, QHAxisY); g.DrawLine(penCurve, coor1.Point, coor2.Point); } } } } //if (this._currentCertifiedPoint != null) //{ // using (SolidBrush brush = new SolidBrush(Color.PaleVioletRed)) // { // ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_currentCertifiedPoint.Q, _currentCertifiedPoint.H, AxisQ, QHAxisY); // g.FillEllipse(brush, coor.Point.X - 3, coor.Point.Y - 3, 6, 6); // } //} //if (_hightLightCertifiedPoint != null) //{ // using (SolidBrush brush = new SolidBrush(Color.PaleVioletRed)) // { // ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_hightLightCertifiedPoint.Q, _hightLightCertifiedPoint.H, AxisQ, QHAxisY); // g.FillEllipse(brush, coor.Point.X - 4, coor.Point.Y - 4, 8, 8); // } //} #endregion 消防认证点 #region 临时点 测试用 if (_temp_disp_points_QH != null && _temp_disp_points_QH.Count > 0) { using (Pen penCurve = new Pen(Color.Red, 1f)) { for (int i = 0; i < _temp_disp_points_QH.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_temp_disp_points_QH[i].X, _temp_disp_points_QH[i].Y, AxisQ, QHAxisY); g.DrawEllipse(penCurve, coor.Point.X, coor.Point.Y, 3, 3); } } } if (_temp_disp_points_QE != null && _temp_disp_points_QE.Count > 0) { using (Pen penCurve = new Pen(Color.Red, 1f)) { for (int i = 0; i < _temp_disp_points_QE.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_temp_disp_points_QE[i].X, _temp_disp_points_QE[i].Y, AxisQ, QEAxisY); g.DrawEllipse(penCurve, coor.Point.X, coor.Point.Y, 3, 3); } } } if (_temp_disp_points_QP != null && _temp_disp_points_QP.Count > 0) { using (Pen penCurve = new Pen(Color.Red, 1f)) { for (int i = 0; i < _temp_disp_points_QP.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_temp_disp_points_QP[i].X, _temp_disp_points_QP[i].Y, AxisQ, QPAxisY); g.DrawEllipse(penCurve, coor.Point.X, coor.Point.Y, 3, 3); } } } #endregion 临时点 测试用 #region 150百分率的点 if (_percentPoint150_StdUnit != null) { using (Brush penCurve = new SolidBrush(Color.Red)) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_percentPoint150_StdUnit.X, _percentPoint150_StdUnit.Y, AxisQ, QHAxisY); g.FillEllipse(penCurve, coor.Point.X - 4, coor.Point.Y - 4, 8, 8); } } #endregion 150百分率的点 #region 关死点 if (_zeroH_Point != null) { using (Brush penCurve = new SolidBrush(Color.Red)) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_zeroH_Point.X, _zeroH_Point.Y, AxisQ, QHAxisY); g.FillEllipse(penCurve, coor.Point.X - 4, coor.Point.Y - 4, 8, 8); } } #endregion 关死点 #region 最大功率点 if (_maxPowerPtQP != null && _isDispMaxPowerPt) { using (Brush penCurve = new SolidBrush(Color.Red)) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_maxPowerPtQP.X, _maxPowerPtQP.Y, AxisQ, QPAxisY); g.FillEllipse(penCurve, coor.Point.X - 4, coor.Point.Y - 4, 8, 8); } } #endregion 最大功率点 #region 高效点 if (_maxEtaPtQE != null && _isDispMaxEtaPt) { using (Brush penCurve = new SolidBrush(Color.Red)) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint(_maxEtaPtQE.X, _maxEtaPtQE.Y, AxisQ, QEAxisY); g.FillEllipse(penCurve, coor.Point.X - 4, coor.Point.Y - 4, 8, 8); } } #endregion 高效点 if ( _curveBundleDispStyle == Model.eLxpCurveBundleDispStyle.仅工作曲线) { DrawLabelAnnotion4OnlyWrk(g); } else if (_curveBundleDispStyle == Model.eLxpCurveBundleDispStyle.最大最小工作曲线) { DrawLabelAnnotion4MaxMinWrk(g); } else { DrawLabelAnnotion4All(g); } } #region 画工作点 public static void DrawDesignPoint (this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.eDesignPointDispType dispType, Eventech.Model.FeatPoint designPoint, Color pointColor, float curveWidth = 2f, Eventech.Model.PointToleranceParas toleranceParas = null) { if (designPoint == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { if (dispType == Eventech.Model.eDesignPointDispType.LeftDownHalfCross) { System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; //一级4.5% 二级是8% Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = designPoint.X * 0.92, Y = designPoint.Y }; System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point; //一级3.0% 二级是5% Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * 0.95 }; System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point; g.DrawLine(pen, dpPointX, dpPoint); g.DrawLine(pen, dpPointY, dpPoint); } else if (dispType == Eventech.Model.eDesignPointDispType.PointCircle) { if (toleranceParas == null) toleranceParas = SPump.Common.SelectStandardHelper.GetDefaultToleranceParas(SPump.WinFrmUI.Localization.Current, SPump.GlobeParas.CorpName); Eventech.Model.FeatPoint dpFeatPointX1 = new Eventech.Model.FeatPoint() { X = designPoint.X * toleranceParas.TolRatioMinQ, Y = designPoint.Y }; System.Drawing.Point dpPointX1 = mainDiagram.DiagramToPoint(dpFeatPointX1.X, dpFeatPointX1.Y).Point; Eventech.Model.FeatPoint dpFeatPointX2 = new Eventech.Model.FeatPoint() { X = designPoint.X * toleranceParas.TolRatioMaxQ, Y = designPoint.Y }; System.Drawing.Point dpPointX2 = mainDiagram.DiagramToPoint(dpFeatPointX2.X, dpFeatPointX2.Y).Point; Eventech.Model.FeatPoint dpFeatPointY1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * toleranceParas.TolRatioMinH }; System.Drawing.Point dpPointY1 = mainDiagram.DiagramToPoint(dpFeatPointY1.X, dpFeatPointY1.Y).Point; Eventech.Model.FeatPoint dpFeatPointY2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * toleranceParas.TolRatioMaxH }; System.Drawing.Point dpPointY2 = mainDiagram.DiagramToPoint(dpFeatPointY2.X, dpFeatPointY2.Y).Point; var x = Math.Abs(dpPointX1.X - dpPointX2.X) / 4; var y = Math.Abs(dpPointY1.Y - dpPointY2.Y) / 5; var r = Math.Min(x, y); Eventech.Model.FeatPoint dpFeatPoint = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y }; System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(dpFeatPoint.X, dpFeatPoint.Y).Point; using (Brush b = new SolidBrush(pointColor)) g.FillEllipse(b, dpPoint.X - r / 2, dpPoint.Y - r / 2, r, r); } else if (dispType == Eventech.Model.eDesignPointDispType.Cross) { if (toleranceParas == null) toleranceParas = SPump.Common.SelectStandardHelper.GetDefaultToleranceParas(SPump.WinFrmUI.Localization.Current, SPump.GlobeParas.CorpName); Eventech.Model.FeatPoint dpFeatPointX1 = new Eventech.Model.FeatPoint() { X = designPoint.X * toleranceParas.TolRatioMinQ, Y = designPoint.Y }; System.Drawing.Point dpPointX1 = mainDiagram.DiagramToPoint(dpFeatPointX1.X, dpFeatPointX1.Y).Point; Eventech.Model.FeatPoint dpFeatPointX2 = new Eventech.Model.FeatPoint() { X = designPoint.X * toleranceParas.TolRatioMaxQ, Y = designPoint.Y }; System.Drawing.Point dpPointX2 = mainDiagram.DiagramToPoint(dpFeatPointX2.X, dpFeatPointX2.Y).Point; Eventech.Model.FeatPoint dpFeatPointY1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * toleranceParas.TolRatioMinH }; System.Drawing.Point dpPointY1 = mainDiagram.DiagramToPoint(dpFeatPointY1.X, dpFeatPointY1.Y).Point; Eventech.Model.FeatPoint dpFeatPointY2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * toleranceParas.TolRatioMaxH }; System.Drawing.Point dpPointY2 = mainDiagram.DiagramToPoint(dpFeatPointY2.X, dpFeatPointY2.Y).Point; g.DrawLine(pen, dpPointX1, dpPointX2); g.DrawLine(pen, dpPointY1, dpPointY2); } else if (dispType == Eventech.Model.eDesignPointDispType.CrossAnPointCircle) { if (toleranceParas == null) toleranceParas = SPump.Common.SelectStandardHelper.GetDefaultToleranceParas(SPump.WinFrmUI.Localization.Current, SPump.GlobeParas.CorpName); Eventech.Model.FeatPoint dpFeatPointX1 = new Eventech.Model.FeatPoint() { X = designPoint.X * toleranceParas.TolRatioMinQ, Y = designPoint.Y }; System.Drawing.Point dpPointX1 = mainDiagram.DiagramToPoint(dpFeatPointX1.X, dpFeatPointX1.Y).Point; Eventech.Model.FeatPoint dpFeatPointX2 = new Eventech.Model.FeatPoint() { X = designPoint.X * toleranceParas.TolRatioMaxQ, Y = designPoint.Y }; System.Drawing.Point dpPointX2 = mainDiagram.DiagramToPoint(dpFeatPointX2.X, dpFeatPointX2.Y).Point; Eventech.Model.FeatPoint dpFeatPointY1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * toleranceParas.TolRatioMinH }; System.Drawing.Point dpPointY1 = mainDiagram.DiagramToPoint(dpFeatPointY1.X, dpFeatPointY1.Y).Point; Eventech.Model.FeatPoint dpFeatPointY2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * toleranceParas.TolRatioMaxH }; System.Drawing.Point dpPointY2 = mainDiagram.DiagramToPoint(dpFeatPointY2.X, dpFeatPointY2.Y).Point; g.DrawLine(pen, dpPointX1, dpPointX2); g.DrawLine(pen, dpPointY1, dpPointY2); var x = Math.Abs(dpPointX1.X - dpPointX2.X) / 4; var y = Math.Abs(dpPointY1.Y - dpPointY2.Y) / 5; var r = Math.Min(x, y); Eventech.Model.FeatPoint dpFeatPoint = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y }; System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(dpFeatPoint.X, dpFeatPoint.Y).Point; using (Brush b = new SolidBrush(pointColor)) g.FillEllipse(b, dpPoint.X - r / 2, dpPoint.Y - r / 2, r, r); } } } public static void DrawDesignPoints4Cross(this DevExpress.XtraCharts.ChartControl chart, Graphics g, List designPoints, Color pointColor, float curveWidth, Eventech.Model.eToleranceGrade toleranceGrade) { if (designPoints == null) return; Eventech.Model.PointToleranceParas toleranceParas = new Eventech.Model.PointToleranceParas(toleranceGrade); foreach (var pt in designPoints) { DrawDesignPoint4Cross(chart, g, pt, pointColor, curveWidth, toleranceParas); } } public static void DrawDesignPoint4Cross(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint designPoint, Color pointColor, float curveWidth = 2f, Eventech.Model.PointToleranceParas toleranceParas = null) { if (designPoint == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { if (toleranceParas == null) toleranceParas = SPump.Common.SelectStandardHelper.GetDefaultToleranceParas(SPump.WinFrmUI.Localization.Current, SPump.GlobeParas.CorpName); Eventech.Model.FeatPoint dpFeatPointX1 = new Eventech.Model.FeatPoint() { X = designPoint.X * toleranceParas.TolRatioMinQ, Y = designPoint.Y }; System.Drawing.Point dpPointX1 = mainDiagram.DiagramToPoint(dpFeatPointX1.X, dpFeatPointX1.Y).Point; Eventech.Model.FeatPoint dpFeatPointX2 = new Eventech.Model.FeatPoint() { X = designPoint.X * toleranceParas.TolRatioMaxQ, Y = designPoint.Y }; System.Drawing.Point dpPointX2 = mainDiagram.DiagramToPoint(dpFeatPointX2.X, dpFeatPointX2.Y).Point; Eventech.Model.FeatPoint dpFeatPointY1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * toleranceParas.TolRatioMinH }; System.Drawing.Point dpPointY1 = mainDiagram.DiagramToPoint(dpFeatPointY1.X, dpFeatPointY1.Y).Point; Eventech.Model.FeatPoint dpFeatPointY2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * toleranceParas.TolRatioMaxH }; System.Drawing.Point dpPointY2 = mainDiagram.DiagramToPoint(dpFeatPointY2.X, dpFeatPointY2.Y).Point; g.DrawLine(pen, dpPointX1, dpPointX2); g.DrawLine(pen, dpPointY1, dpPointY2); } } public static void DrawDesignPoint4Triangle( this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint designPoint, Eventech.Model.LxpCoordinateParas coordinate, Color pointColor, float curveWidth = 2f) { if (designPoint == null || coordinate == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = designPoint.X - coordinate.CoordSpaceQ/2, Y = designPoint.Y }; System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point; Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - coordinate.CoordSpaceH / 2 }; System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point; g.DrawLine(pen, dpPointX, dpPoint); g.DrawLine(pen, dpPointY, dpPoint); g.DrawLine(pen, dpPointX, dpPointY); } } public static void DrawDesignPoint4TriangleBlod(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint designPoint, Eventech.Model.LxpCoordinateParas coordinate, Color pointColor ) { if (designPoint == null || coordinate == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (System.Drawing.Brush b = new System.Drawing.SolidBrush(pointColor)) { System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; //var length = Math.Max( this.Width/(5.0*this._coordinateParas.GridNumberX),this.Height/(5.0*(this._coordinateParas.EndLineNoH-this._coordinateParas.StartLineNoH)); Eventech.Model.FeatPoint dpFeatPoint_space_q = new Eventech.Model.FeatPoint() { X = designPoint.X - coordinate.CoordSpaceQ, Y = designPoint.Y }; System.Drawing.Point dpPoint_space_q = mainDiagram.DiagramToPoint(dpFeatPoint_space_q.X, dpFeatPoint_space_q.Y).Point; Eventech.Model.FeatPoint dpFeatPoint_space_h = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - coordinate.CoordSpaceH }; System.Drawing.Point dpPoint_space_h = mainDiagram.DiagramToPoint(dpFeatPoint_space_h.X, dpFeatPoint_space_h.Y).Point; var length = chart.Width/40;// Convert.ToSingle(Math.Max(Math.Abs(dpPoint_space_q.X - dpPoint.X) / 4.0, (Math.Abs(dpPoint_space_q.Y - dpPoint_space_h.Y)) / 4.0)); var houdu = length / 3; g.FillRectangle(b, dpPoint.X - length, dpPoint.Y, length, houdu); g.FillRectangle(b, dpPoint.X - houdu, dpPoint.Y, houdu, length); } } /// /// 正三角 /// /// /// /// /// /// public static void DrawDesignPoint4EquilateralTriangle(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint designPoint, Eventech.Model.LxpCoordinateParas coordinate, Color pointColor, float curveWidth = 2.5f) { if (designPoint == null || coordinate == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; var length = Convert.ToSingle(chart.Width * 1.0 / 50.0);// Convert.ToSingle(Math.Max(Math.Abs(dpPoint_space_q.X - dpPoint.X) / 4.0, (Math.Abs(dpPoint_space_q.Y - dpPoint_space_h.Y)) / 4.0)); g.DrawLine(pen, dpPoint.X, dpPoint.Y, dpPoint.X - length / 2, Convert.ToSingle(dpPoint.Y + length * 1.732 / 2)); g.DrawLine(pen, dpPoint.X, dpPoint.Y, dpPoint.X + length / 2, Convert.ToSingle(dpPoint.Y + length * 1.732 / 2)); g.DrawLine(pen, dpPoint.X - length / 2, Convert.ToSingle(dpPoint.Y + length * 1.732 / 2), dpPoint.X + length / 2, Convert.ToSingle(dpPoint.Y + length * 1.732 / 2)); } } public static void DrawDesignPoint4TriangleBlod(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint designPoint, Eventech.Model.QhCoordinateParas coordinate, Color pointColor) { if (designPoint == null || coordinate == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (System.Drawing.Brush br = new System.Drawing.SolidBrush(pointColor)) { System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; //var length = Math.Max( this.Width/(5.0*this._coordinateParas.GridNumberX),this.Height/(5.0*(this._coordinateParas.EndLineNoH-this._coordinateParas.StartLineNoH)); Eventech.Model.FeatPoint dpFeatPoint_space_q = new Eventech.Model.FeatPoint() { X = designPoint.X - (coordinate.AxisLabelQ[1] - coordinate.AxisLabelQ[0]), Y = designPoint.Y }; System.Drawing.Point dpPoint_space_q = mainDiagram.DiagramToPoint(dpFeatPoint_space_q.X, dpFeatPoint_space_q.Y).Point; Eventech.Model.FeatPoint dpFeatPoint_space_h = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - (coordinate.AxisLabelH[1] - coordinate.AxisLabelH[0]) }; System.Drawing.Point dpPoint_space_h = mainDiagram.DiagramToPoint(dpFeatPoint_space_h.X, dpFeatPoint_space_h.Y).Point; var length = 12;// Convert.ToSingle(Math.Max(Math.Abs(dpPoint_space_q.X - dpPoint.X) / 4.0, (Math.Abs(dpPoint_space_q.Y - dpPoint_space_h.Y)) / 4.0)); var houdu = length / 3; g.FillRectangle(br, dpPoint.X - length, dpPoint.Y, length, houdu); g.FillRectangle(br, dpPoint.X - houdu, dpPoint.Y, houdu, length); } } public static void DrawDesignPoint4Circle(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint designPoint, Eventech.Model.LxpCoordinateParas coordinate, Color pointColor, float curveWidth = 1.5f, float r = 7) { if (designPoint == null ) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (Brush b = new SolidBrush(pointColor)) using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { //double CoordSpaceQ = coordinate.CoordSpaceQ; //double CoordSpaceH = coordinate.CoordSpaceH; System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; g.DrawEllipse(pen, dpPoint.X - r, dpPoint.Y - r, r * 2, r * 2); float r2 = r - 2; g.DrawEllipse(pen, dpPoint.X - r2, dpPoint.Y - r2, r2 * 2, r2 * 2); float r3 = r2 - 2; g.FillEllipse(b, dpPoint.X - r3, dpPoint.Y - r3, r3 * 2, r3 * 2); } } public static void DrawDesignPoint4Circle(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint designPoint, Eventech.Model.QhCoordinateParas coordinate, Color pointColor, float curveWidth = 1.5f, float r = 7) { if (designPoint == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (Brush b = new SolidBrush(pointColor)) using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; g.DrawEllipse(pen, dpPoint.X - r, dpPoint.Y - r, r * 2, r * 2); float r2 = r - 2; g.DrawEllipse(pen, dpPoint.X - r2, dpPoint.Y - r2, r2 * 2, r2 * 2); float r3 = r2 - 2; g.FillEllipse(b, dpPoint.X - r3, dpPoint.Y - r3, r3 * 2, r3 * 2); } } public static void DrawDesignPoint4Triangle(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint designPoint, Eventech.Model.QhCoordinateParas coordinate, Color pointColor, float curveWidth = 2f) { if (designPoint == null || coordinate == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { double CoordSpaceQ = coordinate.AxisLabelQ[1] - coordinate.AxisLabelQ[0]; double CoordSpaceH = coordinate.AxisLabelH[1] - coordinate.AxisLabelH[0]; System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = designPoint.X - CoordSpaceQ / 2, Y = designPoint.Y }; System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point; Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - CoordSpaceH / 2 }; System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point; g.DrawLine(pen, dpPointX, dpPoint); g.DrawLine(pen, dpPointY, dpPoint); g.DrawLine(pen, dpPointX, dpPointY); Eventech.Model.FeatPoint dpFeatPointX_S1 = new Eventech.Model.FeatPoint() { X = designPoint.X - CoordSpaceQ / 2 + CoordSpaceQ / 6, Y = designPoint.Y }; System.Drawing.Point dpPointX_S1 = mainDiagram.DiagramToPoint(dpFeatPointX_S1.X, dpFeatPointX_S1.Y).Point; Eventech.Model.FeatPoint dpFeatPointY_S1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - CoordSpaceH / 2 + CoordSpaceH / 6 }; System.Drawing.Point dpPointY_S1 = mainDiagram.DiagramToPoint(dpFeatPointY_S1.X, dpFeatPointY_S1.Y).Point; g.DrawLine(pen, dpPointX_S1, dpPointY_S1); Eventech.Model.FeatPoint dpFeatPointX_S2 = new Eventech.Model.FeatPoint() { X = designPoint.X - CoordSpaceQ / 2 + CoordSpaceQ / 3, Y = designPoint.Y }; System.Drawing.Point dpPointX_S2 = mainDiagram.DiagramToPoint(dpFeatPointX_S2.X, dpFeatPointX_S2.Y).Point; Eventech.Model.FeatPoint dpFeatPointY_S2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - CoordSpaceH / 2 + CoordSpaceH / 3 }; System.Drawing.Point dpPointY_S2 = mainDiagram.DiagramToPoint(dpFeatPointY_S2.X, dpFeatPointY_S2.Y).Point; g.DrawLine(pen, dpPointX_S2, dpPointY_S2); } } public static void DrawDesignPoints(this DevExpress.XtraCharts.ChartControl chart, Graphics g, List designPoints, Color pointColor, float curveWidth = 2f, Eventech.Model.eDesignPointDispType dispType = Eventech.Model.eDesignPointDispType.LeftDownHalfCross) { if (designPoints == null || designPoints.Count() == 0) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { foreach (var designPoint in designPoints) { System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point; //一级4.5% 二级是8% Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = designPoint.X * 0.92, Y = designPoint.Y }; System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point; //一级3% 二级是5% Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * 0.95 }; System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point; g.DrawLine(pen, dpPointX, dpPoint); g.DrawLine(pen, dpPointY, dpPoint); g.DrawLine(pen, dpPointX, dpPointY); } } } public static void DrawDesignPointsLog10(this DevExpress.XtraCharts.ChartControl chart, Graphics g, List designPoints, Color pointColor, float curveWidth = 2f, Eventech.Model.eDesignPointDispType dispType = Eventech.Model.eDesignPointDispType.LeftDownHalfCross) { if (designPoints == null || designPoints.Count() == 0) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth)) { foreach (var designPoint in designPoints) { System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(Math.Log10(designPoint.X), Math.Log10(designPoint.Y)).Point; //一级4.5% 二级是8% Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = Math.Log10(designPoint.X * 0.92), Y = Math.Log10(designPoint.Y) }; System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point; //一级3% 二级是5% Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = Math.Log10(designPoint.X), Y = Math.Log10(designPoint.Y * 0.95) }; System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point; g.DrawLine(pen, dpPointX, dpPoint); g.DrawLine(pen, dpPointY, dpPoint); } } } #endregion #region 绘制等效线 public static void DrawEqualParaCurveE(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.CombineCurveList allEqualParaCurveE, Color curveColor, Eventech.Model.LxpCoordinateParas coordinateParas) { if (allEqualParaCurveE == null || coordinateParas == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; if (curveColor == Color.Empty) curveColor = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; float curveWidth = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveWidthEqualE; using (SolidBrush brushText = new SolidBrush(curveColor)) using (Pen penCurve = new Pen(curveColor, curveWidth)) { foreach (var equalCurve in allEqualParaCurveE) { List screenPoints = new List(); int i = 0; for (i = 0; i < equalCurve.PointInfo.Count; i++) { ControlCoordinates coor = mainDiagram.DiagramToPoint(equalCurve.PointInfo[i].X, equalCurve.PointInfo[i].Y); screenPoints.Add(coor.Point); } //去掉重曲线复点 Point[] pointArray = screenPoints.Distinct().ToArray(); //显示定义点 //using (Pen penCurve_def = new Pen(Color.SkyBlue, 1f)) //{ // for (int k = 0; k < pointArray.Count(); k++) // { // g.DrawEllipse(penCurve, pointArray[k].X, pointArray[k].Y, 3, 3); // } //} // 绘制 if (pointArray.Length > 2) { //penCurveQP.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDotDot; if (equalCurve.IsClosed) { System.Drawing.Drawing2D.FillMode aFillMode = System.Drawing.Drawing2D.FillMode.Alternate; g.DrawClosedCurve(penCurve, pointArray, equalCurve.DispTension, aFillMode); } else { g.DrawCurve(penCurve, pointArray, equalCurve.DispTension); //Bezier曲线绘制 //List bezierCurves = null; //bezierCurves = SPump.Common.BezierCurveHelper.CreateOpenCurves(equalCurve.PointInfo.ToArray()); //foreach (var _selCatalog in bezierCurves) //{ // ControlCoordinates coor0 = mainDiagram.DiagramToPoint(_selCatalog.Point0.X, _selCatalog.Point0.Y); // ControlCoordinates coor1 = mainDiagram.DiagramToPoint(_selCatalog.Point1.X, _selCatalog.Point1.Y); // ControlCoordinates coor2 = mainDiagram.DiagramToPoint(_selCatalog.Point2.X, _selCatalog.Point2.Y); // ControlCoordinates coor3 = mainDiagram.DiagramToPoint(_selCatalog.Point3.X, _selCatalog.Point3.Y); // g.DrawBezier(penCurveQP, coor0.Point, coor1.Point, coor3.Point, coor3.Point); //} } } else if (pointArray.Length == 2) { g.DrawLine(penCurve, pointArray[0], pointArray[1]); } else if (pointArray.Length == 1) { Rectangle rc = new Rectangle(pointArray[0].X - 2, pointArray[0].Y - 2, 4, 4); using (Brush b = new SolidBrush(curveColor)) g.FillEllipse(b, rc); } } } } //显示效率值 public static void DrawEqualParaCurvePara(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.CombineCurveList allEqualParaCurveE, Color colorText, Font fontText, Eventech.Model.LxpCoordinateParas coordinateParas) { if (allEqualParaCurveE == null || coordinateParas == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; if (colorText == Color.Empty) colorText = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; using (SolidBrush brushText = new SolidBrush(colorText)) { foreach (var equalCurve in allEqualParaCurveE) { var points_1 = equalCurve.PointInfo; var lastPt = points_1[points_1.Count - 1]; var firstPt = points_1[0]; if (firstPt.Y > lastPt.Y) { ControlCoordinates coor = mainDiagram.DiagramToPoint(firstPt.X, firstPt.Y); g.DrawString(equalCurve.CurvePara.ToString(), fontText, brushText, coor.Point.X - 3, coor.Point.Y - 13); } else { ControlCoordinates coor = mainDiagram.DiagramToPoint(lastPt.X, lastPt.Y); g.DrawString(equalCurve.CurvePara.ToString(), fontText, brushText, coor.Point.X - 3, coor.Point.Y - 13); } } } } public static void DrawEqualParaCurveE(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.CombineCurveList allEqualParaCurveE, Color curveColor, Eventech.Model.QhCoordinateParas coordinateParas, System.Drawing.Drawing2D.DashStyle DashStyle = System.Drawing.Drawing2D.DashStyle.Solid) { if (allEqualParaCurveE == null || coordinateParas == null) return; if (curveColor == Color.Empty) curveColor = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; XYDiagram mainChartDiagram = (XYDiagram)chart.Diagram; if (mainChartDiagram == null) return; float curveWidth = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveWidthEqualE; for (int k = 0; k < allEqualParaCurveE.Count; k++) { Eventech.Model.ThroughParaCurve curve = allEqualParaCurveE[k]; //得到屏幕上的点坐标:直接通过 List chartPoint = new List(); int i = 0; for (i = 0; i < curve.PointInfo.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint( coordinateParas.ToChartValueQ2(curve.PointInfo[i].X), coordinateParas.ToChartValueH2(curve.PointInfo[i].Y)); chartPoint.Add(coor.Point); } //画曲线 Point[] pointArray = chartPoint.Distinct().ToArray(); if (pointArray.Length == 2) { using (Pen penCurve = new Pen(curveColor, curveWidth)) { g.DrawLine(penCurve, pointArray[0], pointArray[1]); } } else if (pointArray.Length == 1) { Rectangle rc = new Rectangle(pointArray[0].X - 2, pointArray[0].Y - 2, 4, 4); using (Brush b = new SolidBrush(curveColor)) g.FillEllipse(b, rc); } else { using (Pen penCurve = new Pen(curveColor, curveWidth)) { if (DashStyle == System.Drawing.Drawing2D.DashStyle.Custom) { penCurve.DashStyle = System.Drawing.Drawing2D.DashStyle.Custom; penCurve.DashPattern = new float[] { 2f, 2f }; } if (curve.IsClosed) { System.Drawing.Drawing2D.FillMode aFillMode = System.Drawing.Drawing2D.FillMode.Alternate; g.DrawClosedCurve(penCurve, pointArray, curve.DispTension, aFillMode); } else { g.DrawCurve(penCurve, pointArray, curve.DispTension); //Bezier曲线绘制 //List bezierCurves = null; //bezierCurves = SPump.Common.BezierCurveHelper.CreateOpenCurves(equalCurve.PointInfo.ToArray()); //foreach (var _selCatalog in bezierCurves) //{ // ControlCoordinates coor0 = mainDiagram.DiagramToPoint(_selCatalog.Point0.X, _selCatalog.Point0.Y); // ControlCoordinates coor1 = mainDiagram.DiagramToPoint(_selCatalog.Point1.X, _selCatalog.Point1.Y); // ControlCoordinates coor2 = mainDiagram.DiagramToPoint(_selCatalog.Point2.X, _selCatalog.Point2.Y); // ControlCoordinates coor3 = mainDiagram.DiagramToPoint(_selCatalog.Point3.X, _selCatalog.Point3.Y); // g.DrawBezier(penCurveQP, coor0.Point, coor1.Point, coor3.Point, coor3.Point); //} } } } } } public static void DrawEqualParaCurveE(this DevExpress.XtraCharts.ChartControl chart, Graphics g, List allEqualParaCurveE, Color curveColor, Eventech.Model.QhCoordinateParas coordinateParas) { if (allEqualParaCurveE == null || coordinateParas == null) return; if (curveColor == Color.Empty) curveColor = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; XYDiagram mainChartDiagram = (XYDiagram)chart.Diagram; if (mainChartDiagram == null) return; float curveWidth = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveWidthEqualE; for (int k = 0; k < allEqualParaCurveE.Count; k++) { Eventech.Model.ThroughParaCurve curve = allEqualParaCurveE[k]; //得到屏幕上的点坐标:直接通过 List chartPoint = new List(); int i = 0; for (i = 0; i < curve.PointInfo.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint( coordinateParas.ToChartValueQ2(curve.PointInfo[i].X), coordinateParas.ToChartValueH2(curve.PointInfo[i].Y)); chartPoint.Add(coor.Point); } //画曲线 Point[] pointArray = chartPoint.Distinct().ToArray(); if (pointArray.Length == 2) { using (Pen penCurve = new Pen(curveColor, curveWidth)) { g.DrawLine(penCurve, pointArray[0], pointArray[1]); } } else if (pointArray.Length == 1) { Rectangle rc = new Rectangle(pointArray[0].X - 2, pointArray[0].Y - 2, 4, 4); using (Brush b = new SolidBrush(curveColor)) g.FillEllipse(b, rc); } else { using (Pen penCurve = new Pen(curveColor, curveWidth)) { if (curve.IsClosed) { System.Drawing.Drawing2D.FillMode aFillMode = System.Drawing.Drawing2D.FillMode.Alternate; g.DrawClosedCurve(penCurve, pointArray, curve.DispTension, aFillMode); } else { g.DrawCurve(penCurve, pointArray, curve.DispTension); //Bezier曲线绘制 //List bezierCurves = null; //bezierCurves = SPump.Common.BezierCurveHelper.CreateOpenCurves(equalCurve.PointInfo.ToArray()); //foreach (var _selCatalog in bezierCurves) //{ // ControlCoordinates coor0 = mainDiagram.DiagramToPoint(_selCatalog.Point0.X, _selCatalog.Point0.Y); // ControlCoordinates coor1 = mainDiagram.DiagramToPoint(_selCatalog.Point1.X, _selCatalog.Point1.Y); // ControlCoordinates coor2 = mainDiagram.DiagramToPoint(_selCatalog.Point2.X, _selCatalog.Point2.Y); // ControlCoordinates coor3 = mainDiagram.DiagramToPoint(_selCatalog.Point3.X, _selCatalog.Point3.Y); // g.DrawBezier(penCurveQP, coor0.Point, coor1.Point, coor3.Point, coor3.Point); //} } } } } } public static void DrawRefCurve(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPointList refCurve, Color curveColor, float curveWidth, Eventech.Model.QhCoordinateParas coordinateParas, System.Drawing.Drawing2D.DashStyle DashStyle = System.Drawing.Drawing2D.DashStyle.Solid) { if (refCurve == null || coordinateParas == null) return; if (curveColor == Color.Empty) curveColor = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; XYDiagram mainChartDiagram = (XYDiagram)chart.Diagram; if (mainChartDiagram == null) return; //得到屏幕上的点坐标:直接通过 List chartPoint = new List(); int i = 0; for (i = 0; i < refCurve.Count; i++) { ControlCoordinates coor = mainChartDiagram.DiagramToPoint( coordinateParas.ToChartValueQ2(refCurve[i].X), coordinateParas.ToChartValueH2(refCurve[i].Y)); chartPoint.Add(coor.Point); } //画曲线 Point[] pointArray = chartPoint.Distinct().ToArray(); if (pointArray.Length == 2) { using (Pen penCurve = new Pen(curveColor, curveWidth)) { g.DrawLine(penCurve, pointArray[0], pointArray[1]); } } else if (pointArray.Length == 1) { Rectangle rc = new Rectangle(pointArray[0].X - 2, pointArray[0].Y - 2, 4, 4); using (Brush b = new SolidBrush(curveColor)) g.FillEllipse(b, rc); } else { using (Pen penCurve = new Pen(curveColor, curveWidth)) { g.DrawCurve(penCurve, pointArray, 0.5f); } } } public static void DrawRefPoint(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.FeatPoint refPoint, Color curveColor, float curveWidth, Eventech.Model.QhCoordinateParas coordinateParas, System.Drawing.Drawing2D.DashStyle DashStyle = System.Drawing.Drawing2D.DashStyle.Solid) { if (refPoint == null || coordinateParas == null) return; if (curveColor == Color.Empty) curveColor = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; XYDiagram mainChartDiagram = (XYDiagram)chart.Diagram; if (mainChartDiagram == null) return; ControlCoordinates coor = mainChartDiagram.DiagramToPoint( coordinateParas.ToChartValueQ2(refPoint.X), coordinateParas.ToChartValueH2(refPoint.Y)); using (Pen penCurve = new Pen(curveColor, 2)) { g.DrawEllipse(penCurve, coor.Point.X - 2, coor.Point.Y - 2, 4, 4); } } //显示效率值 public static void DrawEqualParaCurvePara(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.CombineCurveList allEqualParaCurveE, Color colorText, Font fontText, Eventech.Model.QhCoordinateParas coordinateParas) { if (allEqualParaCurveE == null || coordinateParas == null) return; XYDiagram mainChartDiagram = (XYDiagram)chart.Diagram; if (mainChartDiagram == null) return; if (colorText == Color.Empty) colorText = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; using (SolidBrush brushText = new SolidBrush(colorText)) { for (int k = 0; k < allEqualParaCurveE.Count; k++) { Eventech.Model.ThroughParaCurve curve = allEqualParaCurveE[k]; Eventech.Model.FeatPoint posi = new Eventech.Model.FeatPoint(); if (curve.IsClosed) { #region 封闭 for (int i = 0; i < curve.PointInfo.Count; i++) { if (curve.PointInfo[i].X > posi.X) { posi = curve.PointInfo[i]; } } ControlCoordinates coor = mainChartDiagram.DiagramToPoint( coordinateParas.ToChartValueQ2(posi.X), coordinateParas.ToChartValueH2(posi.Y)); Point textPT = new Point(coor.Point.X + 10, coor.Point.Y); g.DrawString(curve.CurvePara.ToString() + "%", fontText, brushText, textPT); #endregion } else { if (Eventech.Common.MonotonicityHelper.CheckX(curve.PointInfo, 1) == Eventech.Model.eMonotonicity.Chaos) {//显示2边 posi = curve.PointInfo.First(); ControlCoordinates coor = mainChartDiagram.DiagramToPoint( coordinateParas.ToChartValueQ2(posi.X), coordinateParas.ToChartValueH2(posi.Y)); Point textPT = new Point(coor.Point.X + 15, coor.Point.Y - 8); g.DrawString(curve.CurvePara.ToString() + "%", fontText, brushText, textPT); posi = curve.PointInfo.Last(); coor = mainChartDiagram.DiagramToPoint( coordinateParas.ToChartValueQ2(posi.X), coordinateParas.ToChartValueH2(posi.Y)); textPT = new Point(coor.Point.X + 15, coor.Point.Y - 8); g.DrawString(curve.CurvePara.ToString() + "%", fontText, brushText, textPT); } else { posi = curve.PointInfo.Last(); ControlCoordinates coor = mainChartDiagram.DiagramToPoint( coordinateParas.ToChartValueQ2(posi.X), coordinateParas.ToChartValueH2(posi.Y)); Point textPT = new Point(coor.Point.X + 15, coor.Point.Y - 8); g.DrawString(curve.CurvePara.ToString() + "%", fontText, brushText, textPT); } } } } } public static void DrawEqualParaCurveE(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.CombineCurveList allEqualParaCurveE, Color curveColor, Eventech.Model.FanCoordinateParas coordinateParas) { if (allEqualParaCurveE == null || coordinateParas == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; if (curveColor == Color.Empty) curveColor = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; float curveWidth = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveWidthEqualE; using (SolidBrush brushText = new SolidBrush(curveColor)) using (Pen penCurve = new Pen(curveColor, curveWidth)) { foreach (var equalCurve in allEqualParaCurveE) { List screenPoints = new List(); int i = 0; for (i = 0; i < equalCurve.PointInfo.Count; i++) { ControlCoordinates coor = mainDiagram.DiagramToPoint(equalCurve.PointInfo[i].X, equalCurve.PointInfo[i].Y); screenPoints.Add(coor.Point); } //去掉重曲线复点 Point[] pointArray = screenPoints.Distinct().ToArray(); //显示定义点 //using (Pen penCurve_def = new Pen(Color.SkyBlue, 1f)) //{ // for (int k = 0; k < pointArray.Count(); k++) // { // g.DrawEllipse(penCurve, pointArray[k].X, pointArray[k].Y, 3, 3); // } //} // 绘制 if (pointArray.Length > 2) { //penCurveQP.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDotDot; if (equalCurve.IsClosed) { System.Drawing.Drawing2D.FillMode aFillMode = System.Drawing.Drawing2D.FillMode.Alternate; g.DrawClosedCurve(penCurve, pointArray, equalCurve.DispTension, aFillMode); } else { g.DrawCurve(penCurve, pointArray, equalCurve.DispTension); //Bezier曲线绘制 //List bezierCurves = null; //bezierCurves = SPump.Common.BezierCurveHelper.CreateOpenCurves(equalCurve.PointInfo.ToArray()); //foreach (var _selCatalog in bezierCurves) //{ // ControlCoordinates coor0 = mainDiagram.DiagramToPoint(_selCatalog.Point0.X, _selCatalog.Point0.Y); // ControlCoordinates coor1 = mainDiagram.DiagramToPoint(_selCatalog.Point1.X, _selCatalog.Point1.Y); // ControlCoordinates coor2 = mainDiagram.DiagramToPoint(_selCatalog.Point2.X, _selCatalog.Point2.Y); // ControlCoordinates coor3 = mainDiagram.DiagramToPoint(_selCatalog.Point3.X, _selCatalog.Point3.Y); // g.DrawBezier(penCurveQP, coor0.Point, coor1.Point, coor3.Point, coor3.Point); //} } } else if (pointArray.Length == 2) { g.DrawLine(penCurve, pointArray[0], pointArray[1]); } else if (pointArray.Length == 1) { Rectangle rc = new Rectangle(pointArray[0].X - 2, pointArray[0].Y - 2, 4, 4); using (Brush b = new SolidBrush(curveColor)) g.FillEllipse(b, rc); } } } } //显示效率值 public static void DrawEqualParaCurvePara(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.CombineCurveList allEqualParaCurveE, Color colorText, Font fontText, Eventech.Model.FanCoordinateParas coordinateParas) { if (allEqualParaCurveE == null || coordinateParas == null) return; XYDiagram mainDiagram = (XYDiagram)chart.Diagram; if (mainDiagram == null) return; if (colorText == Color.Empty) colorText = SPump.WinFrmUI.XBase.Cookie.ChartDisp.Default.CurveColorEqualE; using (SolidBrush brushText = new SolidBrush(colorText)) { foreach (var equalCurve in allEqualParaCurveE) { var points_1 = equalCurve.PointInfo; var lastPt = points_1[points_1.Count - 1]; var firstPt = points_1[0]; if (firstPt.Y > lastPt.Y) { ControlCoordinates coor = mainDiagram.DiagramToPoint(firstPt.X, firstPt.Y); g.DrawString(equalCurve.CurvePara.ToString(), fontText, brushText, coor.Point.X - 3, coor.Point.Y - 13); } else { ControlCoordinates coor = mainDiagram.DiagramToPoint(lastPt.X, lastPt.Y); g.DrawString(equalCurve.CurvePara.ToString(), fontText, brushText, coor.Point.X - 3, coor.Point.Y - 13); } } } } #endregion