using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace TProduct.PumpGraph.Picture
{
public partial class LxpFeatChart : FeatChart
{
#region 曲线宽度和颜色
protected float _curvePointSize = 8f;
public float CurvePointSize
{
get { return _curvePointSize; }
set { _curvePointSize = value; }
}
protected float _curvePointWidth = 2f;
public float PointPointWidth
{
get { return _curvePointWidth; }
set { _curvePointWidth = value; }
}
protected Color _coefficientLineColor = Color.Black;
public Color CoefficientLineColor
{
get { return _coefficientLineColor; }
set { _coefficientLineColor = value; }
}
protected float _coefficientLineWidth = 3f;
public float CoefficientLineWidth
{
get { return _coefficientLineWidth; }
set { _coefficientLineWidth = value; }
}
protected float _pointCrossLineWidth = 1f;//交叉线
public float PointCrossLineWidth
{
get { return _pointCrossLineWidth; }
set { _pointCrossLineWidth = value; }
}
protected float _curveNameSize = 10f;
public float CurveNameSize
{
get { return _curveNameSize; }
set { _curveNameSize = value; }
}
protected string _curveNameFontName = "Arial";
protected bool _isDispCurveName = false;
public bool IsDispCurveName
{
get { return _isDispCurveName; }
set { _isDispCurveName = value; }
}
protected bool _isDispQNPSH = true;//是否显示汽蚀曲线
public bool IsDispQNPSH
{
get { return _isDispQNPSH; }
set { _isDispQNPSH = value; }
}
bool _isDispQP = true;//是否显示功率曲线
public bool IsDispQP
{
get { return _isDispQP; }
set { _isDispQP = value; }
}
///
///
///
public bool IsAccordQE
{
get { return _isAccordQE; }
set { _isAccordQE = value; }
}
bool _isAccordQE = true;
bool _isAccordQH = true;
public bool IsAccordQH
{
get { return _isAccordQH; }
set { _isAccordQH = value; }
}
private int _curveParaTextPosi = 1;//1开始位置, 2 表示结束位置
protected int CurveParaTextPosi
{
get { return _curveParaTextPosi; }
set { _curveParaTextPosi = value; }
}
#endregion
#region 绘制曲线
protected void DrawAllCurves()
{
DrawCurveQH();
DrawCurveQE();
DrawCurveQP();
DrawCurveQNPSH();
}
//绘制汽蚀曲线
protected void DrawCurveQNPSH()
{
if (_points_CurveNPSH == null || _points_CurveNPSH.Count < 3)
return;
List QNPSHPts = new List();
for (int i = 0; i < _points_CurveNPSH.Count; i++)
{
PointF QNPSHPt = new PointF();
QNPSHPt.X = MapRealToPictQ(_points_CurveNPSH[i].X);
QNPSHPt.Y = MapRealToPictNPSH(_points_CurveNPSH[i].Y);
QNPSHPts.Add(QNPSHPt);
}
if (QNPSHPts.Count < 3)
return;
using (Pen pen = new Pen(_curveColorNPSH, base._curveWidth))
{
_graphics.DrawCurve(pen, QNPSHPts.ToArray());
}
if (_isDispCurveName)
{
//画曲线标签
PointF pt1 = new PointF();
pt1 = QNPSHPts[QNPSHPts.Count - 1];
PointF pt2 = new PointF();
pt2.X = pt1.X + 10;
pt2.Y = pt1.Y - 10;
string title = "Q-NPSH";
using (var font = new Font(_curveNameFontName, _curveNameSize,
System.Drawing.FontStyle.Regular |
System.Drawing.FontStyle.Bold))
{
_graphics.DrawString(title, font, new SolidBrush(Color.Black), pt2);
}
}
}
//绘制扬程曲线
protected void DrawCurveQH()
{
if (_curveInfoQH == null)
return;
//画曲线
DrawSingleCurveQH(this._curveInfoQH, this._curveColorQH, this._curveWidth);
DrawCurveLabelQH();
}
protected virtual void DrawCurveLabelQH()
{
//画曲线标签
if (_isDispCurveName)
{
PointF pt1 = new PointF();
pt1.X = MapRealToPictQ(_curveInfoQH[_curveInfoQH.Count - 2].X);
pt1.Y = MapRealToPictH(_curveInfoQH[_curveInfoQH.Count - 2].Y);
PointF pt2 = new PointF();
pt2.X = pt1.X + 10;
pt2.Y = pt1.Y - 10;
string title = "Q-H";
using (var font = new Font(_curveNameFontName, _curveNameSize,
System.Drawing.FontStyle.Regular |
System.Drawing.FontStyle.Bold))
{
_graphics.DrawString(title, font, new SolidBrush(_curveColorQH), pt2);
}
}
}
//绘制效率曲线
protected void DrawCurveQE()
{
if (_curveInfoQE == null)
return;
//画曲线
DrawSingleCurveQE(_curveInfoQE, this._curveColorQE, this._curveWidth);
DrawCurveLabelQE();
}
protected virtual void DrawCurveLabelQE()
{
//画曲线标签
if (_isDispCurveName)
{
PointF pt1 = new PointF();
pt1.X = MapRealToPictQ(_curveInfoQE[_curveInfoQE.Count - 2].X);
pt1.Y = MapRealToPictE(_curveInfoQE[_curveInfoQE.Count - 2].Y);
PointF pt2 = new PointF();
pt2.X = pt1.X + 10;
pt2.Y = pt1.Y - 10;
string title = "Q-η";
using (var font = new Font(_curveNameFontName, _curveNameSize,
System.Drawing.FontStyle.Regular |
System.Drawing.FontStyle.Bold))
{
_graphics.DrawString(title, font, new SolidBrush(_curveColorQE), pt2);
}
}
}
//绘制功率曲线
protected void DrawCurveQP()
{
if (_curveInfoQP == null)
return;
DrawSingleCurveQP(_curveInfoQP, this._curveColorQP, this._curveWidth);
DrawCurveLabelQP();
}
protected virtual void DrawCurveLabelQP()
{
//画曲线标签
if (_isDispCurveName)
{
PointF pt1 = new PointF();
pt1.X = MapRealToPictQ(_curveInfoQP[_curveInfoQP.Count - 2].X);
pt1.Y = MapRealToPictP(_curveInfoQP[_curveInfoQP.Count - 2].Y);
PointF pt2 = new PointF();
pt2.X = pt1.X + 10;
pt2.Y = pt1.Y - 10;
string title = "Q-P";
using (var font = new Font(_curveNameFontName, _curveNameSize,
System.Drawing.FontStyle.Regular |
System.Drawing.FontStyle.Bold))
{
_graphics.DrawString(title, font, new SolidBrush(_curveColorQP), pt2);
}
}
}
//
protected void DrawSingleCurveQH(
List curvePoints,
System.Drawing.Color curveColor,
float curveWidth,
DashStyle DashStyle = DashStyle.Solid)
{
if (curvePoints == null || curvePoints.Count < 3)
return;
if (this._isMonoColor)
curveColor = Color.Black;
List picture_points = new List();
for (int i = 0; i < curvePoints.Count; i++)
{
PointF image_pt = new PointF();
image_pt.X = MapRealToPictQ(curvePoints[i].X);
image_pt.Y = MapRealToPictH(curvePoints[i].Y);
picture_points.Add(image_pt);
}
//去掉重曲线复点
//Point[] pointArray = screenPoints.Distinct().ToArray();
using (Pen pen = new Pen(curveColor, curveWidth))
{
pen.DashStyle = DashStyle;
//penMajorTick.DashPattern = new float[] { 3f, 3f };
_graphics.DrawCurve(pen, picture_points.ToArray());
}
}
//
protected void DrawSingleCurveQE(List curvePoints, System.Drawing.Color curveColor, float curveWidth, DashStyle DashStyle = DashStyle.Solid)
{
if (curvePoints == null || curvePoints.Count < 3)
return;
if (this._isMonoColor)
curveColor = Color.Black;
List picture_points = new List();
for (int i = 0; i < curvePoints.Count; i++)
{
PointF image_pt = new PointF();
image_pt.X = MapRealToPictQ(curvePoints[i].X);
image_pt.Y = MapRealToPictE(curvePoints[i].Y);
picture_points.Add(image_pt);
}
//去掉重曲线复点
//Point[] pointArray = screenPoints.Distinct().ToArray();
using (Pen pen = new Pen(curveColor, curveWidth))
{
pen.DashStyle = DashStyle;
_graphics.DrawCurve(pen, picture_points.ToArray());
}
}
//
protected void DrawSingleCurveQP(List curvePoints, System.Drawing.Color curveColor, float curveWidth, DashStyle DashStyle = DashStyle.Solid)
{
if (curvePoints == null || curvePoints.Count < 3)
return;
List picture_points = new List();
for (int i = 0; i < curvePoints.Count; i++)
{
PointF image_pt = new PointF();
image_pt.X = MapRealToPictQ(curvePoints[i].X);
image_pt.Y = MapRealToPictP(curvePoints[i].Y);
picture_points.Add(image_pt);
}
//去掉重曲线复点
//Point[] pointArray = screenPoints.Distinct().ToArray();
if (this._isMonoColor)
curveColor = Color.Black;
using (Pen pen = new Pen(curveColor, curveWidth))
{
pen.DashStyle = DashStyle;
_graphics.DrawCurve(pen, picture_points.ToArray());
}
}
//
protected void DrawSingleCurveQNPSH(List curvePoints, System.Drawing.Color curveColor, float curveWidth, DashStyle DashStyle = DashStyle.Solid)
{
if (curvePoints == null || curvePoints.Count < 3)
return;
if (this._isMonoColor)
curveColor = Color.Black;
List picture_points = new List();
for (int i = 0; i < curvePoints.Count; i++)
{
PointF image_pt = new PointF();
image_pt.X = MapRealToPictQ(curvePoints[i].X);
image_pt.Y = MapRealToPictNPSH(curvePoints[i].Y);
picture_points.Add(image_pt);
}
//去掉重曲线复点
//Point[] pointArray = screenPoints.Distinct().ToArray();
using (Pen pen = new Pen(curveColor, curveWidth))
{
pen.DashStyle = DashStyle;
_graphics.DrawCurve(pen, picture_points.ToArray());
}
}
#endregion
#region 测试点
protected void DrawAllPoint()
{
DrawPointQH();
DrawPointQE();
DrawPointQP();
DrawPointQNPSH();
}
protected void DrawPointQH()
{
if (_pointInfoQH == null || _pointInfoQH.Count < 1)
return;
for (int i = 0; i < _pointInfoQH.Count; i++)
{
PointF pt = new PointF();
pt.X = MapRealToPictQ(_pointInfoQH[i].X);
pt.Y = MapRealToPictH(_pointInfoQH[i].Y);
DrawPoint_CircleStyle(pt, true, this._curveColorQH, this._curvePointSize, this._curvePointWidth);
}
}
protected void DrawPointQE()
{
if (_pointInfoQE == null || _pointInfoQE.Count < 1)
return;
for (int i = 0; i < _pointInfoQE.Count; i++)
{
PointF pt = new PointF();
pt.X = MapRealToPictQ(_pointInfoQE[i].X);
pt.Y = MapRealToPictE(_pointInfoQE[i].Y);
DrawPoint_RectStyle(pt, true, _curveColorQE, this._curvePointSize, this._curvePointWidth);
}
}
protected void DrawPointQP()
{
if (_pointInfoQP == null || _pointInfoQP.Count < 1)
return;
for (int i = 0; i < _pointInfoQP.Count; i++)
{
PointF pt = new PointF();
pt.X = MapRealToPictQ(_pointInfoQP[i].X);
pt.Y = MapRealToPictP(_pointInfoQP[i].Y);
DrawPoint_CrossStyle(pt, _curveColorQP, this._curvePointSize, this._curvePointWidth);
}
}
protected void DrawPointQNPSH()
{
if (_points_TestNPSH == null || _points_TestNPSH.Count < 1)
return;
for (int i = 0; i < _points_TestNPSH.Count; i++)
{
PointF pt = new PointF();
pt.X = MapRealToPictQ(_points_TestNPSH[i].X);
pt.Y = MapRealToPictNPSH(_points_TestNPSH[i].Y);
DrawPoint_RectStyle(pt, true, _curveColorNPSH, this._curvePointSize, this._curvePointWidth);
}
}
#endregion
#region 最小流量线
Eventech.Model.FeatPointList _minFlowCurve;
public Eventech.Model.FeatPointList MinFlowCurve
{
get { return _minFlowCurve; }
set { _minFlowCurve = value; }
}
#endregion
#region 型谱
//型谱颜色
protected Color _spectrumBackColor = Color.FromArgb(60, Color.Gray);
//型谱形状
protected Eventech.Model.LxpSpectrumShape _spectrumShape = null;
public Eventech.Model.LxpSpectrumShape SpectrumShape
{
get { return _spectrumShape; }
set { _spectrumShape = value; }
}
//是否显示型谱
protected bool _isDispSpectrum = true;
public bool IsDispSpectrum { get { return _isDispSpectrum; } set { _isDispSpectrum = value; } }
#endregion
#region 区域
protected Eventech.Model.LxpRegionPointParas _regionPointParas = null;
public bool SetRegionParas(Eventech.Model.LxpPerformParas lxpPerformParas, Eventech.Model.LxpCurveGroupExpress wrkCurve)
{
if (lxpPerformParas == null || wrkCurve == null)
return false;
if (wrkCurve == null)
return false;
this._regionPointParas = new Eventech.Model.LxpRegionPointParas();
if (lxpPerformParas.PreferredRegionMin > 0.1)
{
this._regionPointParas.PerferRegionMin = new Eventech.Model.GroupPoint();
_regionPointParas.PerferRegionMin.Q = lxpPerformParas.PreferredRegionMin;
_regionPointParas.PerferRegionMin.H = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQH, lxpPerformParas.PreferredRegionMin), 1);
_regionPointParas.PerferRegionMin.E = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQE, lxpPerformParas.PreferredRegionMin), 1);
_regionPointParas.PerferRegionMin.P = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQP, lxpPerformParas.PreferredRegionMin), 2);
if (wrkCurve.CurveExpressNPSH != null)
{
this._regionPointParas.PerferRegionMin.NPSH = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressNPSH, this._regionPointParas.PerferRegionMin.Q), 1);
}
}
if (lxpPerformParas.PreferredRegionMax > 0.1)
{
this._regionPointParas.PerferRegionMax = new Eventech.Model.GroupPoint();
_regionPointParas.PerferRegionMax.Q = lxpPerformParas.PreferredRegionMax;
_regionPointParas.PerferRegionMax.H = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQH, lxpPerformParas.PreferredRegionMax), 1);
_regionPointParas.PerferRegionMax.E = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQE, lxpPerformParas.PreferredRegionMax), 1);
_regionPointParas.PerferRegionMax.P = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQP, lxpPerformParas.PreferredRegionMax), 2);
if (wrkCurve.CurveExpressNPSH != null)
{
this._regionPointParas.PerferRegionMax.NPSH = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressNPSH, this._regionPointParas.PerferRegionMax.Q), 1);
}
}
if (lxpPerformParas.AllowableRegionMin > 0.1)
{
this._regionPointParas.AllowRegionMin = new Eventech.Model.GroupPoint();
this._regionPointParas.AllowRegionMin.Q = lxpPerformParas.AllowableRegionMin;
this._regionPointParas.AllowRegionMin.H = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQH, lxpPerformParas.AllowableRegionMin), 1);
this._regionPointParas.AllowRegionMin.E = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQE, lxpPerformParas.AllowableRegionMin), 1);
this._regionPointParas.AllowRegionMin.P = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQP, lxpPerformParas.AllowableRegionMin), 2);
if (wrkCurve.CurveExpressNPSH != null)
{
this._regionPointParas.AllowRegionMin.NPSH = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressNPSH, this._regionPointParas.AllowRegionMin.Q), 1);
}
}
if (lxpPerformParas.AllowableRegionMax > 0.1)
{
this._regionPointParas.AllowRegionMax = new Eventech.Model.GroupPoint();
this._regionPointParas.AllowRegionMax.Q = lxpPerformParas.AllowableRegionMax;
this._regionPointParas.AllowRegionMax.H = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQH, lxpPerformParas.AllowableRegionMax), 1);
this._regionPointParas.AllowRegionMax.E = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQE, lxpPerformParas.AllowableRegionMax), 1);
this._regionPointParas.AllowRegionMax.P = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressQP, lxpPerformParas.AllowableRegionMax), 2);
if (wrkCurve.CurveExpressNPSH != null)
{
this._regionPointParas.AllowRegionMax.NPSH = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.CurveExpressNPSH, this._regionPointParas.AllowRegionMax.Q), 1);
}
}
return true;
}
public bool SetRegionParas(Eventech.Model.LxpPerformParas lxpPerformParas, Eventech.Model.LxpFeatChartCurveGroup wrkCurve)
{
if (lxpPerformParas == null || wrkCurve == null)
return false;
this._regionPointParas = new Eventech.Model.LxpRegionPointParas();
this._regionPointParas.PerferRegionMax = new Eventech.Model.GroupPoint();
this._regionPointParas.PerferRegionMax.Q = lxpPerformParas.PreferredRegionMax;
this._regionPointParas.PerferRegionMax.H = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQH.CurveExpress, lxpPerformParas.PreferredRegionMax), 1);
this._regionPointParas.PerferRegionMax.E = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQE.CurveExpress, lxpPerformParas.PreferredRegionMax), 1);
this._regionPointParas.PerferRegionMax.P = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQP.CurveExpress, lxpPerformParas.PreferredRegionMax), 2);
this._regionPointParas.PerferRegionMin = new Eventech.Model.GroupPoint();
this._regionPointParas.PerferRegionMin.Q = lxpPerformParas.PreferredRegionMin;
this._regionPointParas.PerferRegionMin.H = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQH.CurveExpress, lxpPerformParas.PreferredRegionMin), 1);
this._regionPointParas.PerferRegionMin.E = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQE.CurveExpress, lxpPerformParas.PreferredRegionMin), 1);
this._regionPointParas.PerferRegionMin.P = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQP.CurveExpress, lxpPerformParas.PreferredRegionMin), 2);
this._regionPointParas.AllowRegionMax = new Eventech.Model.GroupPoint();
this._regionPointParas.AllowRegionMax.Q = lxpPerformParas.AllowableRegionMax;
this._regionPointParas.AllowRegionMax.H = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQH.CurveExpress, lxpPerformParas.AllowableRegionMax), 1);
this._regionPointParas.AllowRegionMax.E = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQE.CurveExpress, lxpPerformParas.AllowableRegionMax), 1);
this._regionPointParas.AllowRegionMax.P = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQP.CurveExpress, lxpPerformParas.AllowableRegionMax), 2);
this._regionPointParas.AllowRegionMin = new Eventech.Model.GroupPoint();
this._regionPointParas.AllowRegionMin.Q = lxpPerformParas.AllowableRegionMin;
this._regionPointParas.AllowRegionMin.H = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQH.CurveExpress, lxpPerformParas.AllowableRegionMin), 1);
this._regionPointParas.AllowRegionMin.E = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQE.CurveExpress, lxpPerformParas.AllowableRegionMin), 1);
this._regionPointParas.AllowRegionMin.P = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveQP.CurveExpress, lxpPerformParas.AllowableRegionMin), 2);
if (wrkCurve.FeatCurveNPSH != null && wrkCurve.FeatCurveNPSH.CurveExpress != null)
{
this._regionPointParas.AllowRegionMin.NPSH = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveNPSH.CurveExpress, this._regionPointParas.AllowRegionMin.Q), 1);
this._regionPointParas.AllowRegionMax.NPSH = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveNPSH.CurveExpress, this._regionPointParas.AllowRegionMax.Q), 1);
this._regionPointParas.PerferRegionMin.NPSH = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveNPSH.CurveExpress, this._regionPointParas.PerferRegionMin.Q), 1);
this._regionPointParas.PerferRegionMax.NPSH = Math.Round(Eventech.Common.FitCurveHelper.GetFitPointY(wrkCurve.FeatCurveNPSH.CurveExpress, this._regionPointParas.PerferRegionMax.Q), 1);
}
return true;
}
public bool SetRegionParas(Eventech.Model.LxpRegionPointParas regionPointParas)
{
_regionPointParas = regionPointParas;
return true;
}
//最优区域(是否显示)
protected bool _isDispRegionPrefer = false;
public bool IsDispRegionPrefer
{
get { return _isDispRegionPrefer; }
set { _isDispRegionPrefer = value; }
}
//允许区域(是否显示)
protected bool _isDispRegionAllow = false;
public bool IsDispRegionAllow
{
get { return _isDispRegionAllow; }
set { _isDispRegionAllow = value; }
}
#endregion
}
}