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<Point>();//得到屏幕上点坐标
|
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<Point>();//得到屏幕上点坐标
|
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<Point>();//得到屏幕上点坐标
|
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<Point> otherScreenPoints = new List<Point>();
|
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<Eventech.Model.FeatPoint> 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);
|
}
|
}
|
/// <summary>
|
/// 正三角
|
/// </summary>
|
/// <param name="chart"></param>
|
/// <param name="g"></param>
|
/// <param name="designPoint"></param>
|
/// <param name="coordinate"></param>
|
/// <param name="pointColor"></param>
|
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<Eventech.Model.FeatPoint> 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<Eventech.Model.FeatPoint> 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<Point> screenPoints = new List<Point>();
|
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<XingHao.BezierCurve> 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<Point> chartPoint = new List<Point>();
|
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<Model.BezierCurve> 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<Eventech.Model.CombineCurve> 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<Point> chartPoint = new List<Point>();
|
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<XingHao.BezierCurve> 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<Point> chartPoint = new List<Point>();
|
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<Point> screenPoints = new List<Point>();
|
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<XingHao.BezierCurve> 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
|