using DevExpress.Utils;
|
using DevExpress.XtraCharts;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Drawing.Drawing2D;
|
using System.Linq;
|
using System.Windows.Forms;
|
|
namespace TProduct.WinFrmUI.TPump
|
{
|
|
public partial class ChartLxpMultiCurveExCtrl : DevExpress.XtraEditors.XtraUserControl, Eventech.Model.IDispOperateInfo
|
{
|
public event Eventech.Model.DispOperateInfoHandler OnDispOperateInfo = null;
|
|
//public event TagEventHandler OnChangeQueryPtStatus = null;
|
|
//泵的曲线
|
private List<Eventech.Model.CurveDispParasEx> AllCurveQH = new List<Eventech.Model.CurveDispParasEx>();
|
|
private List<Eventech.Model.CurveDispParasEx> AllCurveQE = new List<Eventech.Model.CurveDispParasEx>();
|
private List<Eventech.Model.CurveDispParasEx> AllCurveQP = new List<Eventech.Model.CurveDispParasEx>();
|
private List<Eventech.Model.CurveDispParasEx> AllCurveNPSH = new List<Eventech.Model.CurveDispParasEx>();
|
private Dictionary<Guid, DevExpress.XtraCharts.Series> SeriesGuidDict = new Dictionary<Guid, Series>();
|
private Dictionary<Guid, TextAnnotation> AnnoGuidDict_QH = new Dictionary<Guid, TextAnnotation>();
|
private Dictionary<Guid, TextAnnotation> AnnoGuidDict_QP = new Dictionary<Guid, TextAnnotation>();
|
|
public List<Eventech.Model.CurveDispParasEx> GetAllCurveQH()
|
{
|
return AllCurveQH;
|
}
|
|
public List<Eventech.Model.CurveDispParasEx> GetAllCurveQE()
|
{
|
return AllCurveQE;
|
}
|
|
public List<Eventech.Model.CurveDispParasEx> GetAllCurveQP()
|
{
|
return AllCurveQP;
|
}
|
|
public List<Eventech.Model.CurveDispParasEx> GetAllCurveNPSH()
|
{
|
return AllCurveNPSH;
|
}
|
private bool IsDisplayCurveQE = true;
|
#region CHART变量
|
|
//
|
private DevExpress.XtraCharts.XYDiagram mainChartDiagram = null;
|
|
private DevExpress.XtraCharts.XYDiagramPane bottomChartDiagram = null;
|
|
private DevExpress.XtraCharts.Series QueryLineHorizontal = null;
|
private DevExpress.XtraCharts.TextAnnotation QueryParaInfoText = null;
|
private DevExpress.XtraCharts.ConstantLine QueryLineVertical = null;
|
private DevExpress.XtraCharts.ConstantLine refConstantLineH = null;
|
|
private DevExpress.XtraCharts.Strip StripWorkRegion = null;
|
|
//
|
private AxisX AxisQ = null;
|
|
private AxisY QHAxisY = null;
|
private SecondaryAxisY QEAxisY = null;
|
private SecondaryAxisY QPAxisY = null;
|
private SecondaryAxisY NPSHAxisY = null;
|
|
private double _maxQ = 0, _minQ = 1000;
|
private double _maxH = 0, _minH = 1000;
|
private double _maxE = 100, _minE = 0;
|
private double _maxP = 0, _minP = 1000;
|
private double _maxNPSH = 0, _minNPSH = 1000;
|
|
//获取的最小扬程 用于计算坐标时放小的倍率
|
private double _scaleMinH = 1;
|
public double ChartScaleMinH
|
{
|
get { return _scaleMinH; }
|
set { _scaleMinH = value; }
|
}
|
|
private double _scaleMaxH = 1;
|
public double ChartScaleMaxH
|
{
|
get { return _scaleMaxH; }
|
set { _scaleMaxH = value; }
|
}
|
|
#endregion CHART变量
|
|
#region 构造函数和加载函数
|
|
public ChartLxpMultiCurveExCtrl()
|
{
|
InitializeComponent();
|
|
InitialChart();
|
}
|
|
private void LoadWindow(object sender, EventArgs e)
|
{
|
//
|
this.SizeChanged += new System.EventHandler(this.OnFrmSizeChanged);
|
|
SetChartDisplay();
|
|
SetAxisTitle();
|
|
LocationDialog();
|
}
|
|
//翻译界面语言
|
private void LocationDialog()
|
{
|
if (TProduct.UserSetting.Localization.IsCN)
|
return;
|
|
this.查询曲线参数MenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("查询曲线参数");
|
this.设置曲线标签显示MenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置曲线标签");
|
this.设置图形显示Menu.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置图表显示");
|
this.调整坐标系Menu.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置图表坐标");
|
|
this.设置坐标AxisMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置坐标");
|
this.显示坐标标签ItemMenu.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("显示坐标标签");
|
|
this.设置颜色AxisMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置颜色");
|
this.颜色交织AxisMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("颜色交织");
|
this.设置子刻度数AxisMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置子刻度数");
|
this.MenuItemAnno修改内容.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("修改名称");
|
this.MenuItemAnno设置文字颜色.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置文字颜色");
|
this.MenuItemAnno设置背景色.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置背景色");
|
this.MenuItemAnno设置背景透明.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置背景透明");
|
this.设置颜色SeriesMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置颜色");
|
this.设置宽度SeriesMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置宽度");
|
this.设置线型SeriesMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置线型");
|
this.设置颜色LineMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置颜色");
|
this.设置值LineMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置值");
|
|
//this.曲线显示ToolStripMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("设置曲线显示");
|
//this.流量扬程曲线DispMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("流量扬程曲线");
|
//this.流量效率曲线DispMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("流量效率曲线");
|
//this.流量功率曲线DispMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("流量功率曲线");
|
//this.流量汽蚀曲线DispMenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("流量汽蚀曲线");
|
}
|
|
private void OnFrmSizeChanged(object sender, EventArgs e)
|
{
|
if (_isAutoPadding)
|
{
|
if (this.Width > 700)
|
{
|
SetChartPadding(false);
|
}
|
else
|
{
|
SetChartPadding(true);
|
}
|
}
|
}
|
|
private bool _isAutoPadding = false;
|
public bool IsAutoPadding { set { _isAutoPadding = value; } get { return _isAutoPadding; } }
|
|
public void SetChartPadding(bool isNonePadding)
|
{
|
if (!isNonePadding)
|
{
|
int space = (int)((this.Width - 680) * 0.4);
|
this.Padding = new System.Windows.Forms.Padding(space, 5, space, 5);
|
}
|
else
|
{
|
this.Padding = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
}
|
}
|
|
private void InitialChart()
|
{
|
mainChartDiagram = (XYDiagram)chartControl1.Diagram;
|
for (int i = 0; i < mainChartDiagram.Panes.Count; i++)
|
{
|
var panel = mainChartDiagram.Panes[i];
|
if (panel.Name == "PaneBottom")
|
{
|
bottomChartDiagram = panel;
|
}
|
}
|
|
AxisQ = mainChartDiagram.AxisX;
|
QHAxisY = mainChartDiagram.AxisY;
|
QEAxisY = mainChartDiagram.SecondaryAxesY.GetAxisByName("QEAxisY");
|
QPAxisY = mainChartDiagram.SecondaryAxesY.GetAxisByName("QPAxisY");
|
NPSHAxisY = mainChartDiagram.SecondaryAxesY.GetAxisByName("NPSHAxisY");
|
|
AxisQ.NumericScaleOptions.AutoGrid = false;
|
AxisQ.VisualRange.Auto = false;
|
QHAxisY.VisualRange.Auto = false;
|
QHAxisY.NumericScaleOptions.AutoGrid = false;
|
QEAxisY.VisualRange.Auto = false;
|
QEAxisY.NumericScaleOptions.AutoGrid = false;
|
QPAxisY.VisualRange.Auto = false;
|
QPAxisY.NumericScaleOptions.AutoGrid = false;
|
NPSHAxisY.VisualRange.Auto = false;
|
NPSHAxisY.NumericScaleOptions.AutoGrid = false;
|
|
QueryLineHorizontal = chartControl1.Series["QueryLineHorizontal"];
|
QueryLineHorizontal.Visible = false;
|
QueryLineHorizontal.CrosshairHighlightPoints = DefaultBoolean.False;
|
QueryLineHorizontal.CrosshairEnabled = DefaultBoolean.False;
|
|
QueryLineVertical = (DevExpress.XtraCharts.ConstantLine)mainChartDiagram.AxisX.ConstantLines.GetElementByName("refConstantLineQ");
|
QueryLineVertical.Visible = false;
|
|
refConstantLineH = (DevExpress.XtraCharts.ConstantLine)mainChartDiagram.AxisY.ConstantLines.GetElementByName("refConstantLineH");
|
refConstantLineH.Visible = false;
|
|
QueryParaInfoText = chartControl1.AnnotationRepository[0] as DevExpress.XtraCharts.TextAnnotation;
|
QueryParaInfoText.Visible = false;
|
|
StripWorkRegion = AxisQ.Strips.GetStripByName("StripWorkRegion");
|
StripWorkRegion.Visible = false;
|
|
//设置此属性
|
this.chartControl1.SelectionMode = ElementSelectionMode.Single;// = true;// 表示可以选择CHART上物体
|
//this.chartControl1.SeriesSelectionMode = SeriesSelectionMode.Point;//系列选择是选择其中的点而不是整个系列
|
this.chartControl1.SeriesSelectionMode = SeriesSelectionMode.Series;
|
|
//添加事件
|
this.chartControl1.CustomPaint += new DevExpress.XtraCharts.CustomPaintEventHandler(this.chartControl_CustomPaint);
|
this.chartControl1.ObjectHotTracked += new DevExpress.XtraCharts.HotTrackEventHandler(this.chartControl1_ObjectHotTracked);
|
////this.chartControl1.MouseLeave += new System.EventHandler(this.chartControl1_MouseLeave);
|
this.chartControl1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chartControl_MouseMove);
|
this.chartControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.chartControl_MouseUp);
|
this.chartControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chartControl_MouseDown);
|
this.chartControl1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.chartControl_MouseClick);
|
this.chartControl1.LegendItemChecked += new DevExpress.XtraCharts.LegendItemCheckedEventHandler(this.chartControl1_LegendItemChecked);
|
|
|
}
|
|
private void SetAxisTitle()
|
{
|
//TProduct.WinFrmUI.TPump.XtraChartHelper.SetTitle(AxisQ,
|
// string.Format("{0}({1})",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString("流量"),
|
// Eventech.Common.UnitQHelper.GetEnUnitName(_coordinate_unitQ)));
|
//if (_coordinate_unitH == Eventech.Model.UnitH.MPa || _coordinate_unitH == Eventech.Model.UnitH.KPa)
|
//{
|
// TProduct.WinFrmUI.TPump.XtraChartHelper.SetTitle(QHAxisY,
|
// string.Format("{0}({1})",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString("压力"),
|
// Eventech.Common.UnitHHelper.GetEnUnitName(_coordinate_unitH)));
|
//}
|
//else
|
//{
|
// TProduct.WinFrmUI.TPump.XtraChartHelper.SetTitle(QHAxisY,
|
// string.Format("{0}({1})",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString("扬程"),
|
// Eventech.Common.UnitHHelper.GetEnUnitName(_coordinate_unitH)));
|
//}
|
//TProduct.WinFrmUI.TPump.XtraChartHelper.SetTitle(NPSHAxisY, string.Format("{0}({1})",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString("汽蚀"),
|
// "m"));
|
//if (_seriesEntity != null)
|
//{
|
// TProduct.WinFrmUI.TPump.XtraChartHelper.SetTitle(QEAxisY, string.Format("{0}(%)",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString(_seriesEntity.GetEtaTextName(TProduct.UserSetting.Localization.Current)), TProduct.CorpSetting.Chart.AbbreviateTextE));
|
|
// TProduct.WinFrmUI.TPump.XtraChartHelper.SetTitle(QPAxisY, string.Format("{0}({1})",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString(_seriesEntity.GetPowerTextName(TProduct.UserSetting.Localization.Current)),
|
// Eventech.Common.UnitPHelper.GetEnUnitName(_coordinate_unitP)));
|
//}
|
//else
|
//{
|
// TProduct.WinFrmUI.TPump.XtraChartHelper.SetTitle(QEAxisY, TProduct.CorpSetting.Chart.AbbreviateTextE + "(%)");
|
// TProduct.WinFrmUI.TPump.XtraChartHelper.SetTitle(QPAxisY, string.Format("{0}({1})",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString("功率"),
|
// Eventech.Common.UnitPHelper.GetEnUnitName(_coordinate_unitP)));
|
//}
|
}
|
|
#endregion 构造函数和加载函数
|
|
#region 坐标单位
|
protected Eventech.Model.UnitQ _queryInfo_unitQ = Eventech.Model.UnitQ.M3H;
|
protected Eventech.Model.UnitH _queryInfo_unitH = Eventech.Model.UnitH.M;//图表查询用的单位
|
|
protected Eventech.Model.UnitQ _unit_design_point_Q = Eventech.Model.UnitQ.M3H;
|
protected Eventech.Model.UnitH _unit_design_point_H = Eventech.Model.UnitH.M;
|
|
//注意即使改了单位,曲线里面的数据没有变,只变化了图表的坐标显示
|
protected Eventech.Model.UnitQ _coordinate_unitQ = Eventech.Model.UnitQ.M3H;
|
protected Eventech.Model.UnitH _coordinate_unitH = Eventech.Model.UnitH.M;
|
protected Eventech.Model.UnitP _coordinate_unitP = Eventech.Model.UnitP.KW;
|
protected Eventech.Model.UnitH _coordinate_unitNPSH = Eventech.Model.UnitH.M;
|
|
public Eventech.Model.UnitH CoordinateUnitH
|
{
|
get { return _coordinate_unitH; }
|
}
|
|
public Eventech.Model.UnitQ CoordinateUnitQ
|
{
|
get { return _coordinate_unitQ; }
|
}
|
|
public Eventech.Model.UnitP CoordinateUnitP
|
{
|
get { return _coordinate_unitP; }
|
}
|
|
public Eventech.Model.UnitH CoordinateUnitNPSH
|
{
|
get { return _coordinate_unitNPSH; }
|
}
|
|
|
|
public void SetUnit(Eventech.Model.UnitQ unit_q, Eventech.Model.UnitH unit_h, Eventech.Model.UnitP unit_p, Eventech.Model.UnitH unitNPSH)
|
{
|
this._coordinate_unitH = unit_h; this._unit_design_point_H = unit_h; this._queryInfo_unitH = unit_h;
|
this._coordinate_unitQ = unit_q; this._queryInfo_unitQ = unit_q; this._unit_design_point_Q = unit_q;
|
this._coordinate_unitP = unit_p;
|
this._coordinate_unitNPSH = unitNPSH;
|
}
|
|
//改变单位只改变了坐标显示,其他都没变
|
public double CalcDispValueQ(double q)
|
{
|
if (_coordinate_unitQ == Eventech.Model.UnitQ.M3H)
|
return q;
|
|
return Math.Round(Eventech.Common.UnitQHelper.fromM3H(_coordinate_unitQ, q), 2);
|
}
|
|
public string CalcDispValueQ_STR(double q)
|
{
|
if (_coordinate_unitQ != Eventech.Model.UnitQ.M3H)
|
{
|
q = Eventech.Common.UnitQHelper.fromM3H(_coordinate_unitQ, q);
|
}
|
|
if (q < 9)
|
return q.ToString("N2");
|
else
|
return q.ToString("N1");
|
}
|
|
public string CalcDispValueQ_STR(Eventech.Model.UnitQ UnitQ, double q)
|
{
|
if (_coordinate_unitQ != Eventech.Model.UnitQ.M3H)
|
{
|
q = Eventech.Common.UnitQHelper.fromM3H(UnitQ, q);
|
}
|
|
if (q < 5)
|
return q.ToString("N2");
|
else
|
return q.ToString("N1");
|
}
|
|
public double CalcDataValueQ(double q)
|
{
|
if (_coordinate_unitQ == Eventech.Model.UnitQ.M3H)
|
return q;
|
|
return Eventech.Common.UnitQHelper.toM3H(_coordinate_unitQ, q);
|
}
|
|
public double CalcDispValueH(double h)
|
{
|
if (_coordinate_unitH == Eventech.Model.UnitH.M)
|
return h;
|
else if (_coordinate_unitH == Eventech.Model.UnitH.MPa)
|
return Math.Round(Eventech.Common.UnitHHelper.fromM2(_coordinate_unitH, h), 4);
|
else
|
return Math.Round(Eventech.Common.UnitHHelper.fromM(_coordinate_unitH, h), 2);
|
}
|
|
public string CalcDispValueH_STR(double h)
|
{
|
if (_coordinate_unitH == Eventech.Model.UnitH.M)
|
return Math.Round(h, 1).ToString();
|
else if (_coordinate_unitH == Eventech.Model.UnitH.MPa)
|
return Math.Round(Eventech.Common.UnitHHelper.fromM2(_coordinate_unitH, h), 4).ToString();
|
else
|
{
|
var v = Eventech.Common.UnitHHelper.fromM2(_coordinate_unitH, h);
|
if (v > 100)
|
return Math.Round(v, 0).ToString();
|
else if (v > 10)
|
return Math.Round(v, 1).ToString();
|
else
|
return Math.Round(v, 2).ToString();
|
}
|
}
|
|
public string CalcDispValueH_STR(Eventech.Model.UnitH UnitH, double h)
|
{
|
if (UnitH == Eventech.Model.UnitH.M)
|
return Math.Round(h, 1).ToString();
|
else if (UnitH == Eventech.Model.UnitH.MPa)
|
return Math.Round(Eventech.Common.UnitHHelper.fromM2(UnitH, h), 4).ToString();
|
else
|
{
|
var v = Eventech.Common.UnitHHelper.fromM2(UnitH, h);
|
if (v > 100)
|
return Math.Round(v, 0).ToString();
|
else if (v > 10)
|
return Math.Round(v, 1).ToString();
|
else
|
return Math.Round(v, 2).ToString();
|
}
|
}
|
|
public double CalcDataValueH(double h)
|
{
|
if (_coordinate_unitH == Eventech.Model.UnitH.M)
|
return h;
|
else if (_coordinate_unitH == Eventech.Model.UnitH.MPa)
|
return Math.Round(Eventech.Common.UnitHHelper.toM2(_coordinate_unitH, h), 4);
|
else
|
return Math.Round(Eventech.Common.UnitHHelper.toM(_coordinate_unitH, h), 2);
|
}
|
|
public double CalcDispValueP(double power)
|
{
|
if (_coordinate_unitP == Eventech.Model.UnitP.KW)
|
return TProduct.Common.RoundHelper.GetDispValuePower(power);
|
|
return TProduct.Common.RoundHelper.GetDispValuePower(Eventech.Common.UnitPHelper.fromKW(_coordinate_unitP, power));
|
}
|
|
public double CalcDataValueP(double power)
|
{
|
if (_coordinate_unitP == Eventech.Model.UnitP.KW)
|
return power;
|
|
return Math.Round(Eventech.Common.UnitPHelper.toKW(_coordinate_unitP, power), 3);
|
}
|
public double CalcDispValueNPSH(double npsh)
|
{
|
if (_coordinate_unitNPSH == Eventech.Model.UnitH.M)
|
{
|
return TProduct.Common.RoundHelper.GetDispValuePower(npsh);
|
}
|
|
var npsh2 = Eventech.Common.UnitHHelper.fromM2(_coordinate_unitNPSH, npsh);
|
return TProduct.Common.RoundHelper.GetDispValuePower(npsh2);
|
}
|
#endregion 坐标单位
|
|
#region 获取曲线的随机颜色
|
|
private static List<Color> ColorArray = new List<Color>() { Color.Red,
|
Color.Blue, Color.Green, Color.DodgerBlue,Color.Fuchsia,Color.MidnightBlue,Color.Maroon, Color.Aquamarine, Color.Bisque ,Color.BurlyWood };
|
|
public static Color GetCurveColor(int index)
|
{
|
return index < ColorArray.Count ? ColorArray[index] : GetRandomColor();
|
}
|
|
public static Color GetRandomColor()
|
{
|
Random RandomNum_First = new Random((int)DateTime.Now.Ticks);
|
int int_Red = RandomNum_First.Next(256);
|
Random RandomNum_Sencond = new Random((int)DateTime.Now.Ticks);
|
int int_Green = RandomNum_Sencond.Next(256);
|
int int_Blue = RandomNum_Sencond.Next(256);
|
return Color.FromArgb(int_Red, int_Green, int_Blue);
|
}
|
|
#endregion 获取曲线的随机颜色
|
|
#region 设置曲线
|
|
//添加曲线
|
public void AddFeatCurve(Eventech.Model.CurveDispParasEx curve)
|
{
|
if (curve == null || curve.CurveInfo == null)
|
return;
|
|
if (curve.CurveType == Eventech.Model.eFeatCurveType.QH)
|
{
|
AllCurveQH.Add(curve);
|
}
|
if (curve.CurveType == Eventech.Model.eFeatCurveType.QE)
|
{
|
AllCurveQE.Add(curve);
|
}
|
if (curve.CurveType == Eventech.Model.eFeatCurveType.QP)
|
{
|
AllCurveQP.Add(curve);
|
}
|
if (curve.CurveType == Eventech.Model.eFeatCurveType.QNPSH)
|
{
|
AllCurveNPSH.Add(curve);
|
}
|
}
|
|
public void SetCurveColorByGroupID(Guid id, Color color)
|
{
|
if (this.AllCurveQH != null)
|
foreach (var curve in AllCurveQH)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurveColor = color;
|
|
if (AnnoGuidDict_QH.ContainsKey(curve.CurveID))
|
AnnoGuidDict_QH[curve.CurveID].TextColor = color;
|
}
|
}
|
if (this.AllCurveQE != null)
|
foreach (var curve in AllCurveQE)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurveColor = color;
|
}
|
}
|
if (this.AllCurveQP != null)
|
foreach (var curve in AllCurveQP)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurveColor = color;
|
|
if (AnnoGuidDict_QP.ContainsKey(curve.CurveID))
|
AnnoGuidDict_QP[curve.CurveID].TextColor = color;
|
}
|
}
|
if (this.AllCurveNPSH != null)
|
foreach (var curve in this.AllCurveNPSH)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurveColor = color;
|
}
|
}
|
UpdateAllCurve();
|
}
|
|
public void SetCurveParaByGroupID(Guid id, string CurvePara, bool isRefresh)
|
{
|
if (this.AllCurveQH != null)
|
foreach (var curve in AllCurveQH)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurvePara = CurvePara;
|
if (AnnoGuidDict_QH.ContainsKey(curve.CurveID))
|
AnnoGuidDict_QH[curve.CurveID].Text = CurvePara;
|
}
|
}
|
if (this.AllCurveQE != null)
|
foreach (var curve in AllCurveQE)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurvePara = CurvePara;
|
}
|
}
|
if (this.AllCurveQP != null)
|
foreach (var curve in AllCurveQP)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurvePara = CurvePara;
|
|
if (AnnoGuidDict_QP.ContainsKey(curve.CurveID))
|
AnnoGuidDict_QP[curve.CurveID].Text = CurvePara;
|
}
|
}
|
if (this.AllCurveNPSH != null)
|
foreach (var curve in this.AllCurveNPSH)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurvePara = CurvePara;
|
}
|
}
|
if (AnnoGuidDict_QH.ContainsKey(id))
|
{
|
AnnoGuidDict_QH[id].Text = CurvePara;
|
}
|
if (AnnoGuidDict_QP.ContainsKey(id))
|
{
|
AnnoGuidDict_QP[id].Text = CurvePara;
|
}
|
//if (isRefresh)
|
// UpdateAllCurve();
|
}
|
|
public void SetCurveInfoByGroupID(Guid id, string CurvePara, Eventech.Model.LxpCurveGroupExpress curveGrpExpress)
|
{
|
if (this.AllCurveQH != null)
|
foreach (var curve in AllCurveQH)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurvePara = CurvePara;
|
curve.CurveExpress = curveGrpExpress.CurveExpressQH;
|
curve.CurveInfo = Eventech.Common.CurveExpressConver.ToPoints(curveGrpExpress.CurveExpressQH, 16);
|
if (AnnoGuidDict_QH.ContainsKey(curve.CurveID))
|
AnnoGuidDict_QH[curve.CurveID].Text = CurvePara;
|
}
|
}
|
if (this.AllCurveQE != null)
|
foreach (var curve in AllCurveQE)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurvePara = CurvePara;
|
curve.CurveExpress = curveGrpExpress.CurveExpressQE;
|
curve.CurveInfo = Eventech.Common.CurveExpressConver.ToPoints(curveGrpExpress.CurveExpressQE, 16);
|
}
|
}
|
if (this.AllCurveQP != null)
|
foreach (var curve in AllCurveQP)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurvePara = CurvePara;
|
curve.CurveExpress = curveGrpExpress.CurveExpressQP;
|
curve.CurveInfo = Eventech.Common.CurveExpressConver.ToPoints(curveGrpExpress.CurveExpressQP, 16);
|
|
if (AnnoGuidDict_QP.ContainsKey(curve.CurveID))
|
AnnoGuidDict_QP[curve.CurveID].Text = CurvePara;
|
}
|
}
|
if (this.AllCurveNPSH != null)
|
foreach (var curve in this.AllCurveNPSH)
|
{
|
if (curve.GroupID == id)
|
{
|
curve.CurvePara = CurvePara;
|
|
curve.CurveExpress = curveGrpExpress.CurveExpressNPSH;
|
curve.CurveInfo = Eventech.Common.CurveExpressConver.ToPoints(curveGrpExpress.CurveExpressNPSH, 16);
|
}
|
}
|
if (AnnoGuidDict_QH.ContainsKey(id))
|
{
|
AnnoGuidDict_QH[id].Text = CurvePara;
|
}
|
if (AnnoGuidDict_QP.ContainsKey(id))
|
{
|
AnnoGuidDict_QP[id].Text = CurvePara;
|
}
|
}
|
|
//清理曲线
|
public void RemoveCurveByGroupID(Guid id)
|
{
|
var qh = from x in AllCurveQH where x.GroupID == id select x;
|
if (qh.Count() != 0)
|
{
|
var c = qh.First();
|
AllCurveQH.Remove(c);
|
if (AnnoGuidDict_QH.ContainsKey(c.CurveID))
|
this.chartControl1.AnnotationRepository.Remove(AnnoGuidDict_QH[c.CurveID]);
|
//if (AnnoGuidDict_QP.ContainsKey(c.CurveID))
|
// this.chartControl1.AnnotationRepository.Remove(AnnoGuidDict_QP[c.CurveID]);
|
|
if (SeriesGuidDict.ContainsKey(c.CurveID))
|
this.chartControl1.Series.Remove(SeriesGuidDict[c.CurveID]);
|
}
|
|
if (AllCurveQE != null)
|
{
|
var qe = from x in AllCurveQE where x.GroupID == id select x;
|
if (qe.Count() != 0)
|
{
|
var c = qe.First();
|
AllCurveQE.Remove(c);
|
//if (AnnoGuidDict_QH.ContainsKey(c.CurveID))
|
// this.chartControl1.AnnotationRepository.Remove(AnnoGuidDict_QH[c.CurveID]);
|
//if (AnnoGuidDict_QP.ContainsKey(c.CurveID))
|
// this.chartControl1.AnnotationRepository.Remove(AnnoGuidDict_QP[c.CurveID]);
|
|
if (SeriesGuidDict.ContainsKey(c.CurveID))
|
this.chartControl1.Series.Remove(SeriesGuidDict[c.CurveID]);
|
}
|
}
|
|
if (AllCurveQP != null)
|
{
|
var qp = from x in AllCurveQP where x.GroupID == id select x;
|
if (qp.Count() != 0)
|
{
|
var c = qp.First();
|
AllCurveQP.Remove(c);
|
if (AnnoGuidDict_QP.ContainsKey(c.CurveID))
|
this.chartControl1.AnnotationRepository.Remove(AnnoGuidDict_QP[c.CurveID]);
|
if (SeriesGuidDict.ContainsKey(c.CurveID))
|
this.chartControl1.Series.Remove(SeriesGuidDict[c.CurveID]);
|
}
|
}
|
|
if (AllCurveNPSH != null)
|
{
|
var np = from x in AllCurveNPSH where x.GroupID == id select x;
|
if (np.Count() != 0)
|
{
|
var c = np.First();
|
AllCurveNPSH.Remove(c);
|
//if (AnnoGuidDict.ContainsKey(c.CurveID))
|
// this.chartControl1.AnnotationRepository.Remove(AnnoGuidDict[c.CurveID]);
|
if (SeriesGuidDict.ContainsKey(c.CurveID))
|
this.chartControl1.Series.Remove(SeriesGuidDict[c.CurveID]);
|
}
|
}
|
}
|
|
public void ClearAllCurves()
|
{
|
AllCurveQH.Clear();
|
AllCurveQE.Clear();
|
AllCurveQP.Clear();
|
AllCurveNPSH.Clear();
|
|
ClearCurveSeries();
|
}
|
|
private void ClearCurveSeries()
|
{
|
foreach (var series in SeriesGuidDict.Values)
|
{
|
this.chartControl1.Series.Remove(series);
|
}
|
foreach (var anno in AnnoGuidDict_QH.Values)
|
{
|
this.chartControl1.AnnotationRepository.Remove(anno);
|
}
|
foreach (var anno in AnnoGuidDict_QP.Values)
|
{
|
this.chartControl1.AnnotationRepository.Remove(anno);
|
}
|
|
AnnoGuidDict_QH.Clear();
|
AnnoGuidDict_QP.Clear();
|
SeriesGuidDict.Clear();
|
|
//for (int i = this.chartControl1.SeriesSerializable.Count() - 1; i >= 0; i--)
|
//{
|
// var series = this.chartControl1.Series[i];//.RemoveAt(iExcelCol);
|
// if (series.Name == "QueryLineHorizontal")
|
// continue;
|
// if (series.Name.StartsWith("QH_") || series.Name.StartsWith("QE_") || series.Name.StartsWith("QP_") || series.Name.StartsWith("QNPSH_"))
|
// {
|
// i++;
|
// if (i > this.chartControl1.SeriesSerializable.Count() - 1)
|
// i = this.chartControl1.SeriesSerializable.Count() - 1;
|
// this.chartControl1.Series.Remove(series);
|
// }
|
//}
|
|
//for (int i = this.chartControl1.AnnotationRepository.Count - 1; i >= 0; i--)
|
//{
|
// var anno = this.chartControl1.AnnotationRepository[i];
|
// if (anno.Name == "QueryParaInfoText")
|
// continue;
|
// if (anno.Name.StartsWith("QH_") || anno.Name.StartsWith("QE_") || anno.Name.StartsWith("QP_") || anno.Name.StartsWith("QNPSH_"))
|
// {
|
// i++;
|
// if (i > this.chartControl1.AnnotationRepository.Count - 1)
|
// i = this.chartControl1.AnnotationRepository.Count - 1;
|
// this.chartControl1.AnnotationRepository.Remove(anno);
|
// }
|
//}
|
}
|
|
#endregion 设置曲线
|
|
#region 泵信息
|
|
protected Eventech.Model.eChartType _chartType = Eventech.Model.eChartType.BaoLuo;
|
protected bool _isMeter = true;
|
|
|
#endregion 泵信息
|
|
#region 设计点
|
|
private List<Eventech.Model.FeatPoint> _designPointList = new List<Eventech.Model.FeatPoint>();//可以显示多个设计点
|
|
private Eventech.Model.eDesignPointDispType _desginPointSyle = Eventech.Model.eDesignPointDispType.LeftDownHalfCross;
|
|
public Eventech.Model.eDesignPointDispType DesginPointSyle
|
{
|
get { return _desginPointSyle; }
|
set { _desginPointSyle = value; }
|
}
|
|
public Eventech.Model.FeatPoint GetDefaultDesignPoint()
|
{
|
return _designPointList.FirstOrDefault();
|
}
|
|
public List<Eventech.Model.FeatPoint> GetDesignPoints()
|
{
|
return _designPointList;
|
}
|
|
//添加设计点(可以加入,显示多个设计点)
|
public void AddDesignPoint(Eventech.Model.FeatPoint pt)
|
{
|
if (pt == null)
|
return;
|
_designPointList.Add(pt);
|
}
|
|
public void RemoveDesignPoint(Eventech.Model.FeatPoint pt)
|
{
|
if (pt == null)
|
return;
|
if (_designPointList == null || _designPointList.Count() == 0)
|
return;
|
foreach (var p in _designPointList)
|
{
|
if (Math.Abs(p.X - pt.X) < 0.1 && Math.Abs(p.Y - pt.Y) < 0.1)
|
{
|
_designPointList.Remove(p);
|
return;//删掉后返回
|
}
|
}
|
}
|
|
public void AddDesignPoint(decimal ptQ, decimal ptH)
|
{
|
_designPointList.Add(new Eventech.Model.FeatPoint(ptQ, ptH));
|
}
|
|
public void AddDesignPoint(double ptQ, double ptH)
|
{
|
_designPointList.Add(new Eventech.Model.FeatPoint(ptQ, ptH));
|
}
|
|
public void ClearDesignPoint()
|
{
|
_designPointList.Clear();
|
}
|
|
#endregion 设计点
|
|
#region 查询点
|
|
//是否可以查询曲线参数
|
private bool _isQueryCurvePara = false;
|
|
public bool IsQueryCurvePara
|
{
|
set
|
{
|
_isQueryCurvePara = value;
|
QueryLineVertical.Visible = _isQueryCurvePara;
|
QueryLineVertical.Title.Visible = _isQueryCurvePara;
|
QueryParaInfoText.Visible = _isQueryCurvePara;
|
QueryLineHorizontal.Visible = _isQueryCurvePara;
|
}
|
get
|
{
|
return _isQueryCurvePara;
|
}
|
}
|
|
#endregion 查询点
|
|
#region 获取曲线
|
|
public List<Eventech.Model.FeatPoint> GetDefaultCurveInfoQE()
|
{
|
return null;
|
}
|
|
public List<Eventech.Model.FeatPoint> GetDefaultCurveInfoQP()
|
{
|
return null;
|
}
|
|
public List<Eventech.Model.FeatPoint> GetDefaultCurveInfoNPSH()
|
{
|
return null;
|
}
|
|
#endregion 获取曲线
|
|
#region 坐标
|
|
private Eventech.Model.LxpCoordinateParas _coordinateParas = null;
|
public void SetCoordinate(Eventech.Model.LxpCoordinateParas coordinateParas)
|
{
|
this._coordinateParas = coordinateParas;
|
|
if (coordinateParas != null)
|
{
|
SetChartPanelStyle();
|
}
|
}
|
|
//计算最大最小值
|
private void CalcCoordLimit()
|
{
|
_maxQ = 0; _minQ = 10000;
|
_maxH = 0; _minH = 10000;
|
_maxE = 0; _minE = 0;
|
_maxP = 0; _minP = 1000;
|
_maxNPSH = 0; _minNPSH = 1000;
|
foreach (Eventech.Model.CurveDispParasEx info in AllCurveQH)
|
{
|
var xxx = info.CurveInfo.Select(x => x.X);
|
var yyy = info.CurveInfo.Select(x => x.Y);
|
|
_minQ = Math.Min(_minQ, xxx.Min());
|
_maxQ = Math.Max(_maxQ, xxx.Max());
|
|
_minH = Math.Min(_minH, yyy.Min());
|
_maxH = Math.Max(_maxH, yyy.Max());
|
}
|
|
foreach (Eventech.Model.CurveDispParasEx info in AllCurveQE)
|
{
|
var xxx = info.CurveInfo.Select(x => x.X);
|
var yyy = info.CurveInfo.Select(x => x.Y);
|
|
_minQ = Math.Min(_minQ, xxx.Min());
|
_maxQ = Math.Max(_maxQ, xxx.Max());
|
//minE = Math.Min(minE, (from posi_off in pumpStr.CurveQE select posi_off.Y).Min());
|
_maxE = Math.Max(_maxE, yyy.Max());
|
}
|
foreach (Eventech.Model.CurveDispParasEx info in AllCurveQP)
|
{
|
var xxx = info.CurveInfo.Select(x => x.X);
|
var yyy = info.CurveInfo.Select(x => x.Y);
|
|
_minQ = Math.Min(_minQ, xxx.Min());
|
_maxQ = Math.Max(_maxQ, xxx.Max());
|
_minP = Math.Min(_minP, yyy.Min());
|
_maxP = Math.Max(_maxP, yyy.Max());
|
}
|
foreach (Eventech.Model.CurveDispParasEx info in AllCurveNPSH)
|
{
|
var xxx = info.CurveInfo.Select(x => x.X);
|
var yyy = info.CurveInfo.Select(x => x.Y);
|
|
_minQ = Math.Min(_minQ, xxx.Min());
|
_maxQ = Math.Max(_maxQ, xxx.Max());
|
_minNPSH = Math.Min(_minNPSH, yyy.Min());
|
_maxNPSH = Math.Max(_maxNPSH, yyy.Max());
|
}
|
}
|
|
//计算坐标
|
public void CalcCoordinate()
|
{
|
// _coordinateParas = null;
|
if (AllCurveQH == null || AllCurveQH.Count() == 0)
|
return;
|
//
|
CalcCoordLimit();
|
|
_coordinateParas = Eventech.Common.CoordinateHelper.CalcCoordinate(
|
_minQ, _maxQ, this._coordinate_unitQ, _minH * _scaleMinH, _maxH * _scaleMaxH, this._coordinate_unitH, _minE, _maxE,
|
_minP, _maxP, this._coordinate_unitP, _minNPSH, _maxNPSH);
|
if (_coordinateParas == null)
|
return;
|
if (_coordinateParas.CoordMinQ + _coordinateParas.CoordSpaceQ * this._coordinateParas.GridNumberX < _maxQ * 1.05)
|
{
|
_coordinateParas.GridNumberX++;
|
}
|
|
if (QueryLineVertical != null && _coordinateParas != null)
|
{
|
if (QueryLineVertical.AxisValue != null &&
|
Convert.ToDouble(QueryLineVertical.AxisValue) <= _coordinateParas.CoordMinQ + (_coordinateParas.DispMaxQ() - _coordinateParas.CoordMinQ) * 0.1)
|
QueryLineVertical.AxisValue = (_coordinateParas.CoordMinQ + _coordinateParas.DispMaxQ()) * 0.5;
|
}
|
|
}
|
|
//更新坐标
|
public bool UpdateCoordinate()
|
{
|
if (_coordinateParas == null)
|
return false;
|
if (this._minH > _maxH)
|
{
|
this.CalcCoordLimit();
|
}
|
|
if (_coordinateParas.CoordSpaceQ < 0.1)
|
{
|
return false;
|
}
|
if (_coordinateParas.CoordSpaceH < 0.1)
|
{
|
return false;
|
}
|
|
// 流量坐标刻度
|
List<CustomAxisLabel> q_Label_List = new List<CustomAxisLabel>();
|
AxisQ.CustomLabels.Clear();
|
double disQ = _coordinateParas.CoordMinQ;
|
for (int i = 0; i < _coordinateParas.GridNumberX + 1; i++)
|
{
|
q_Label_List.Add(new CustomAxisLabel(CalcDispValueQ(disQ).ToString(), disQ));
|
disQ = disQ + _coordinateParas.CoordSpaceQ;
|
}
|
AxisQ.CustomLabels.AddRange(q_Label_List.ToArray());
|
|
//设置显示
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(AxisQ, _coordinateParas.CoordMinQ,
|
_coordinateParas.CoordMinQ + _coordinateParas.GridNumberX * _coordinateParas.CoordSpaceQ);
|
|
//子刻度
|
AxisQ.MinorCount = 4;
|
//扬程
|
|
//坐标刻度
|
QHAxisY.CustomLabels.Clear();
|
List<CustomAxisLabel> h_Label_List = new List<CustomAxisLabel>();
|
double disH = _coordinateParas.CoordMinH + _coordinateParas.CoordSpaceH * _coordinateParas.StartLineNoH;
|
for (int i = _coordinateParas.StartLineNoH; i < _coordinateParas.EndLineNoH + 1; i++)
|
{
|
if (disH >= 0)
|
{
|
h_Label_List.Add(new CustomAxisLabel(CalcDispValueH(disH).ToString(), disH));
|
}
|
|
disH = disH + _coordinateParas.CoordSpaceH;
|
}
|
QHAxisY.CustomLabels.AddRange(h_Label_List.ToArray());
|
|
//子刻度
|
QHAxisY.MinorCount = 4;
|
|
|
//效率
|
if (_minE < _maxE)
|
{
|
//坐标刻度
|
QEAxisY.CustomLabels.Clear();
|
List<CustomAxisLabel> E_Label_List = new List<CustomAxisLabel>();
|
double disE = _coordinateParas.CoordMinE + _coordinateParas.CoordSpaceE * _coordinateParas.StartLineNoE;
|
for (int i = _coordinateParas.StartLineNoE; i < _coordinateParas.EndLineNoE + 1; i++)
|
{
|
E_Label_List.Add(new CustomAxisLabel(disE <= 100 ? disE.ToString() : "", disE));
|
disE = disE + _coordinateParas.CoordSpaceE;
|
}
|
QEAxisY.CustomLabels.AddRange(E_Label_List.ToArray());
|
|
//子刻度
|
QEAxisY.MinorCount = 4;
|
}
|
|
//功率
|
if (_minP < _maxP)
|
{
|
//坐标刻度
|
QPAxisY.CustomLabels.Clear();
|
List<CustomAxisLabel> P_Label_List = new List<CustomAxisLabel>();
|
double disP = Math.Round(_coordinateParas.CoordMinP + _coordinateParas.CoordSpaceP * _coordinateParas.StartLineNoP, 4);//防止小数点过多
|
for (int i = _coordinateParas.StartLineNoP; i < _coordinateParas.EndLineNoP + 1; i++)
|
{
|
var coord_P = CalcDispValueP(disP);
|
P_Label_List.Add(new CustomAxisLabel(coord_P < 0.001 ? "0" : Math.Round(coord_P, 4).ToString("g"), disP));//改变单位只改变了坐标显示,其他都没变
|
disP = disP + _coordinateParas.CoordSpaceP;
|
}
|
QPAxisY.CustomLabels.AddRange(P_Label_List.ToArray());
|
|
//子刻度
|
QPAxisY.MinorCount = 4;
|
}
|
|
//汽蚀
|
if (_minNPSH < _maxNPSH)
|
{
|
//坐标刻度
|
NPSHAxisY.CustomLabels.Clear();
|
List<CustomAxisLabel> NPSH_Label_List = new List<CustomAxisLabel>();
|
double dispNPSH = _coordinateParas.CoordMinNPSH + _coordinateParas.CoordSpaceNPSH * _coordinateParas.StartLineNoNPSH;
|
for (int i = _coordinateParas.StartLineNoNPSH; i < _coordinateParas.EndLineNoNPSH + 1; i++)
|
{
|
if (dispNPSH >= 0)
|
{
|
NPSH_Label_List.Add(new CustomAxisLabel(dispNPSH.ToString(), dispNPSH));
|
}
|
|
dispNPSH = dispNPSH + _coordinateParas.CoordSpaceNPSH;
|
}
|
NPSHAxisY.CustomLabels.AddRange(NPSH_Label_List.ToArray());
|
//子刻度
|
NPSHAxisY.MinorCount = 4;
|
}
|
|
return true;
|
}
|
|
//检查坐标
|
private void CheckCoordinate()
|
{
|
if (_coordinateParas == null)
|
return;
|
double minQ = 1000000, maxQ = 0;
|
double minH = 1000000, maxH = 0;
|
if (AllCurveQH != null && AllCurveQH.Count > 0)
|
{
|
foreach (Eventech.Model.CurveDispParasEx info in AllCurveQH)
|
{
|
minH = Math.Min(minH, (from x in info.CurveInfo select x.Y).Min());
|
maxH = Math.Max(maxH, (from x in info.CurveInfo select x.Y).Max());
|
|
minQ = Math.Min(minQ, (from x in info.CurveInfo select x.X).Min());
|
maxQ = Math.Max(maxQ, (from x in info.CurveInfo select x.X).Max());
|
}
|
}
|
|
double minP = 1000000, maxP = 0;
|
if (this.AllCurveQP != null)
|
{
|
foreach (var curveGrp in AllCurveQP)
|
{
|
double maxP0 = 0;
|
double minP0 = 0;
|
|
Eventech.Common.FitCurveHelper.GetMinMaxPointY(curveGrp.CurveExpress, out maxP0, out minP0);
|
maxP = Math.Max(maxP, maxP0);
|
minP = Math.Min(minP, minP0);
|
|
minQ = Math.Min(minQ, curveGrp.CurveExpress.RangeMin);
|
maxQ = Math.Max(maxQ, curveGrp.CurveExpress.RangeMax);
|
}
|
}
|
|
|
//double disH_min = _coordinateParas.CoordMinH + _coordinateParas.CoordSpaceH * _coordinateParas.StartLineNoH;
|
//if (minH < disH_min)
|
//{
|
// CalcCoordinate();
|
//}
|
|
|
|
if (maxH > minH)
|
{
|
var old_count = this._coordinateParas.EndLineNoH - this._coordinateParas.StartLineNoH;
|
|
for (int i = 0; i < 100; i++)
|
{
|
if (this._coordinateParas.DispMinH() < minH)
|
break;
|
//this._coordinateParas.StartLineNoH = this._coordinateParas.StartLineNoH - 1;
|
if (this._coordinateParas.StartLineNoH <= 0)
|
{
|
this._coordinateParas.CoordMinH = this._coordinateParas.CoordMinH - this._coordinateParas.CoordSpaceH;
|
}
|
else
|
{
|
this._coordinateParas.StartLineNoH--;
|
}
|
}
|
|
for (int i = 3; i < 100; i++)
|
{
|
if (this._coordinateParas.DispMaxH() > maxH)
|
break;
|
|
this._coordinateParas.EndLineNoH = this._coordinateParas.StartLineNoH + i;
|
}
|
|
if ((this._coordinateParas.EndLineNoH - this._coordinateParas.StartLineNoH) > old_count * 1.5 || this._coordinateParas.DispMaxH() > maxH * 1.4)
|
{
|
double disp_max_h, disp_min_h;
|
Eventech.Common.CoordinateHelper.CalcCoordinateH2(minH, maxH, this._coordinate_unitH,
|
old_count,
|
ref this._coordinateParas, out disp_min_h, out disp_max_h);
|
|
|
_coordinateParas.CoordMinH = Eventech.Common.NumberHelper.GetByPlacesLength(disp_max_h - _coordinateParas.EndLineNoH * _coordinateParas.CoordSpaceH, 3);
|
}
|
}
|
this._maxH = maxH;
|
this._minH = minH;
|
|
|
|
if (maxP > minP)
|
{
|
var old_count = this._coordinateParas.EndLineNoP - this._coordinateParas.StartLineNoP;
|
for (int i = 0; i < 100; i++)
|
{
|
if (this._coordinateParas.DispMinP() < minP)
|
break;
|
//
|
if (this._coordinateParas.StartLineNoP <= 0)
|
this._coordinateParas.CoordMinP = this._coordinateParas.CoordMinP - this._coordinateParas.CoordSpaceP;
|
else
|
this._coordinateParas.StartLineNoP = this._coordinateParas.StartLineNoP - 1;
|
|
}
|
|
for (int i = 3; i < 100; i++)
|
{
|
if (this._coordinateParas.DispMaxP() > maxP)
|
break;
|
|
this._coordinateParas.EndLineNoP = this._coordinateParas.StartLineNoP + i;
|
}
|
if ((this._coordinateParas.EndLineNoP - this._coordinateParas.StartLineNoP) > old_count * 1.5 || this._coordinateParas.DispMaxP() > maxP * 1.4)
|
{
|
double disp_max_p, disp_min_p;
|
var space = Eventech.Common.CoordinateHelper.GetOptimalSpaceMin(minP, maxP, old_count, out disp_min_p, out disp_max_p);
|
|
this._coordinateParas.CoordSpaceP = space;
|
//
|
double disP = disp_max_p;
|
this._coordinateParas.EndLineNoP = this._coordinateParas.StartLineNoH - 5;
|
this._coordinateParas.StartLineNoP = this._coordinateParas.EndLineNoP;
|
while (disP > minP * 0.98)
|
{
|
disP = disP - space;
|
if (disP < 0)
|
break;
|
this._coordinateParas.StartLineNoP--;
|
}
|
this._coordinateParas.CoordMinP = Eventech.Common.NumberHelper.GetByPlacesLength(disp_max_p - this._coordinateParas.EndLineNoP * this._coordinateParas.CoordSpaceP, 3);
|
}
|
}
|
|
this._maxP = maxP;
|
this._minP = minP;
|
|
if (maxQ > minQ)
|
{
|
var old_count = this._coordinateParas.GridNumberX;
|
for (int i = 3; i < 100; i++)
|
{
|
if (this._coordinateParas.DispMaxQ() > maxQ)
|
break;
|
|
this._coordinateParas.GridNumberX = this._coordinateParas.GridNumberX + 1;
|
}
|
if (this._coordinateParas.GridNumberX > old_count * 1.3 || this._coordinateParas.DispMaxQ() > maxQ * 1.4)
|
{
|
Eventech.Common.CoordinateHelper.CalcCoordinateQ1(minQ, maxQ, this._coordinate_unitQ, ref this._coordinateParas, old_count);
|
}
|
}
|
|
|
this._maxQ = maxQ;
|
this._minQ = minQ;
|
}
|
|
|
private void 调整坐标系MenuItem_Click(object sender, EventArgs e)
|
{
|
SetCoordinateByDlg();
|
}
|
|
public void SetCoordinateByDlg()
|
{
|
SetLxpCoordinateDlg theSetDlg = new SetLxpCoordinateDlg();
|
theSetDlg.SetCoordinate(_coordinateParas, this._coordinate_unitQ, this._coordinate_unitH, this._coordinate_unitP);
|
theSetDlg.OnChangedCoord += ChangedCoordHandler;
|
theSetDlg.ShowDialog();
|
}
|
|
private void ChangedCoordHandler(object sender, LxpCoordEventArgs e)
|
{
|
//if (e.IsChangeUnitQ)
|
//{
|
// UpdateChart(false);
|
//}
|
//else
|
{
|
UpdateCoordinate();
|
SetChartPanelStyle();
|
SetChartCurveStyle();
|
}
|
}
|
|
public Eventech.Model.LxpCoordinateParas GetCoordinateParas()
|
{
|
return _coordinateParas;
|
}
|
|
#endregion 坐标
|
|
#region 更新
|
|
//更新所有
|
public void UpdateChart(bool isCheckCoord)
|
{
|
if (_coordinateParas == null || _coordinateParas.CoordSpaceQ < .1 || _coordinateParas.CoordSpaceQ < 0.1)
|
{
|
CalcCoordinate();
|
}
|
|
if (isCheckCoord)
|
{
|
CheckCoordinate();
|
}
|
|
|
if (!UpdateCoordinate())
|
return;
|
|
UpdateAllCurve();
|
|
SetChartPanelStyle();
|
|
SetChartCurveStyle();
|
|
SetAxisTitleDispH();
|
}
|
|
|
//更新所有曲线
|
public void UpdateAllCurve()
|
{
|
ClearCurveSeries();
|
|
if (AllCurveQH.Count == 0)
|
{
|
QueryLineHorizontal.Visible = false;
|
QueryLineVertical.Visible = false;
|
refConstantLineH.Visible = false;
|
QueryParaInfoText.Visible = false;
|
return;
|
}
|
|
if (AllCurveQH != null && AllCurveQH.Count > 0)
|
{
|
int i = 0;
|
for (i = 0; i < AllCurveQH.Count; i++)
|
{
|
CreateSeriesQH(AllCurveQH[i], i.ToString());
|
}
|
}
|
|
if (AllCurveQE != null && AllCurveQE.Count > 0)
|
{
|
int i = 0;
|
for (i = 0; i < AllCurveQE.Count; i++)
|
{
|
CreateSeriesQE(AllCurveQE[i], i.ToString());
|
}
|
}
|
if (AllCurveQP != null && AllCurveQP.Count > 0)
|
{
|
int i = 0;
|
for (i = 0; i < AllCurveQP.Count; i++)
|
{
|
CreateSeriesQP(AllCurveQP[i], i.ToString());
|
}
|
}
|
if (AllCurveNPSH != null && AllCurveNPSH.Count > 0)
|
{
|
int i = 0;
|
for (i = 0; i < AllCurveNPSH.Count; i++)
|
{
|
CreateSeriesNPSH(AllCurveNPSH[i], i.ToString());
|
}
|
}
|
}
|
|
//插入QH曲线
|
private bool isDispCurvePoint = false;
|
|
private void CreateSeriesQH(Eventech.Model.CurveDispParasEx curve, string nameAppend)
|
{
|
DevExpress.XtraCharts.Series series_curve = new DevExpress.XtraCharts.Series();
|
series_curve.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
|
series_curve.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;
|
series_curve.Name = "QH_" + nameAppend;
|
series_curve.ShowInLegend = false;
|
series_curve.CrosshairEnabled = DefaultBoolean.False;
|
series_curve.Tag = curve.CurveID;
|
|
DevExpress.XtraCharts.SplineSeriesView splineSeriesView = new DevExpress.XtraCharts.SplineSeriesView();
|
splineSeriesView.LineStyle.Thickness = curve.CurveThickness;
|
splineSeriesView.LineStyle.DashStyle = (DevExpress.XtraCharts.DashStyle)curve.CurveDashStyle;
|
splineSeriesView.Color = curve.CurveColor;
|
|
series_curve.SeriesPointsSorting = SortingMode.None;
|
series_curve.SeriesPointsSortingKey = SeriesPointKey.Value_1;
|
series_curve.Visible = curve.IsDispCurve;
|
series_curve.View = splineSeriesView;
|
|
for (int j = 0; j < curve.CurveInfo.Count(); j++)
|
{
|
series_curve.Points.Add(new SeriesPoint(curve.CurveInfo[j].X, new double[] { curve.CurveInfo[j].Y }));
|
}
|
|
this.chartControl1.Series.Add(series_curve);
|
SeriesGuidDict[curve.CurveID] = series_curve;
|
|
if (isDispCurvePoint)
|
{
|
DevExpress.XtraCharts.Series series_point = new DevExpress.XtraCharts.Series();
|
series_point.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
|
series_point.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;
|
series_point.Name = "QH_Point_" + nameAppend;
|
series_point.ShowInLegend = false;
|
series_point.CrosshairEnabled = DefaultBoolean.False;
|
series_point.Tag = curve.CurveID;
|
|
DevExpress.XtraCharts.PointSeriesView pointSeriesView = new DevExpress.XtraCharts.PointSeriesView();
|
pointSeriesView.Color = curve.CurveColor;
|
|
series_point.View = pointSeriesView;
|
this.chartControl1.Series.Add(series_point);
|
|
for (int j = 0; j < curve.CurveInfo.Count(); j++)
|
{
|
series_point.Points.Add(new SeriesPoint(curve.CurveInfo[j].X, new double[] { curve.CurveInfo[j].Y }));
|
}
|
}
|
|
if (curve.IsDispPara && curve.LabelPosiPara != null && !string.IsNullOrEmpty(curve.CurvePara))
|
{
|
DevExpress.XtraCharts.TextAnnotation annotationText = new DevExpress.XtraCharts.TextAnnotation();
|
|
DevExpress.XtraCharts.PaneAnchorPoint ptPaneAnchor = new DevExpress.XtraCharts.PaneAnchorPoint();
|
ptPaneAnchor.AxisXCoordinate.AxisValueSerializable = curve.LabelPosiPara.X.ToString();
|
ptPaneAnchor.AxisYCoordinate.AxisValueSerializable = curve.LabelPosiPara.Y.ToString();
|
annotationText.AnchorPoint = ptPaneAnchor;
|
|
annotationText.BackColor = Color.Transparent;
|
annotationText.TextColor = Color.LightGray;
|
annotationText.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
annotationText.LabelMode = false;
|
annotationText.RuntimeAnchoring = true;
|
annotationText.RuntimeMoving = true;
|
annotationText.RuntimeResizing = true;
|
annotationText.RuntimeRotation = true;
|
annotationText.Name = "QH_" + nameAppend;
|
|
DevExpress.XtraCharts.RelativePosition relativePosition1 = new DevExpress.XtraCharts.RelativePosition();
|
relativePosition1.Angle = 90D;
|
relativePosition1.ConnectorLength = 12;
|
annotationText.ShapePosition = relativePosition1;
|
|
annotationText.Visible = true;
|
annotationText.Text = curve.CurvePara;
|
annotationText.TextColor = curve.CurveColor;
|
annotationText.BackColor = System.Drawing.Color.Transparent;
|
annotationText.Shadow.Visible = false;
|
|
//annotationText.Border.Color = Curve.CurveColor;
|
this.chartControl1.AnnotationRepository.Add(annotationText);
|
|
AnnoGuidDict_QH[curve.CurveID] = annotationText;
|
}
|
}
|
|
//插入QE曲线
|
public void CreateSeriesQE(Eventech.Model.CurveDispParasEx curve, string nameAppend)
|
{
|
DevExpress.XtraCharts.Series series = new DevExpress.XtraCharts.Series();
|
series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
|
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;
|
series.Name = "QE_" + nameAppend;
|
series.ShowInLegend = false;
|
series.CrosshairEnabled = DefaultBoolean.False;
|
series.Tag = curve.CurveID;
|
|
DevExpress.XtraCharts.SplineSeriesView splineSeriesView = new DevExpress.XtraCharts.SplineSeriesView();
|
splineSeriesView.Color = curve.CurveColor;
|
splineSeriesView.LineStyle.Thickness = curve.CurveThickness;
|
splineSeriesView.LineStyle.DashStyle = (DevExpress.XtraCharts.DashStyle)curve.CurveDashStyle;
|
splineSeriesView.AxisY = QEAxisY;//.AxisYName = "QEAxisY";
|
|
series.View = splineSeriesView;
|
this.chartControl1.Series.Add(series);
|
|
for (int j = 0; j < curve.CurveInfo.Count(); j++)
|
{
|
series.Points.Add(new SeriesPoint(curve.CurveInfo[j].X, new double[] { curve.CurveInfo[j].Y }));
|
}
|
|
series.Visible = curve.IsDispCurve;
|
SeriesGuidDict[curve.CurveID] = series;
|
}
|
|
//更新QP曲线
|
public void CreateSeriesQP(Eventech.Model.CurveDispParasEx curve, string nameAppend)
|
{
|
DevExpress.XtraCharts.Series series = new DevExpress.XtraCharts.Series();
|
series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
|
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;
|
series.Name = "QP_" + nameAppend;
|
series.ShowInLegend = false;
|
series.CrosshairEnabled = DefaultBoolean.False;
|
series.Tag = curve.CurveID;
|
|
DevExpress.XtraCharts.SplineSeriesView splineSeriesView = new DevExpress.XtraCharts.SplineSeriesView();
|
splineSeriesView.Color = curve.CurveColor;
|
splineSeriesView.LineStyle.Thickness = curve.CurveThickness;
|
splineSeriesView.LineStyle.DashStyle = (DevExpress.XtraCharts.DashStyle)curve.CurveDashStyle;
|
splineSeriesView.AxisY = QPAxisY;//.AxisYName = "QEAxisY";
|
if (_chartPanelStyle == TProduct.Model.eChartDiagramPanelStyle.Whole)
|
{//
|
splineSeriesView.Pane = mainChartDiagram.DefaultPane;
|
}
|
else
|
{//分开放
|
splineSeriesView.Pane = this.bottomChartDiagram;
|
}
|
series.View = splineSeriesView;
|
|
this.chartControl1.Series.Add(series);
|
|
for (int j = 0; j < curve.CurveInfo.Count(); j++)
|
{
|
series.Points.Add(new SeriesPoint(curve.CurveInfo[j].X, new double[] { curve.CurveInfo[j].Y }));
|
}
|
|
series.Visible = curve.IsDispCurve;
|
SeriesGuidDict[curve.CurveID] = series;
|
|
if (curve.IsDispPara && curve.LabelPosiPara != null && !string.IsNullOrEmpty(curve.CurvePara))
|
{
|
DevExpress.XtraCharts.TextAnnotation annotationText = new DevExpress.XtraCharts.TextAnnotation();
|
if (_chartPanelStyle == TProduct.Model.eChartDiagramPanelStyle.Whole)
|
{
|
DevExpress.XtraCharts.PaneAnchorPoint ptPaneAnchor = new DevExpress.XtraCharts.PaneAnchorPoint();
|
ptPaneAnchor.AxisXCoordinate.AxisValueSerializable = curve.LabelPosiPara.X.ToString();
|
ptPaneAnchor.AxisYCoordinate.AxisValueSerializable = curve.LabelPosiPara.Y.ToString();
|
ptPaneAnchor.AxisYCoordinate.Axis = this.QPAxisY;
|
annotationText.AnchorPoint = ptPaneAnchor;
|
}
|
else
|
{
|
DevExpress.XtraCharts.PaneAnchorPoint ptPaneAnchor = new DevExpress.XtraCharts.PaneAnchorPoint();
|
ptPaneAnchor.AxisXCoordinate.AxisValueSerializable = curve.LabelPosiPara.X.ToString();
|
ptPaneAnchor.AxisYCoordinate.AxisValueSerializable = curve.LabelPosiPara.Y.ToString();
|
ptPaneAnchor.AxisYCoordinate.Axis = this.QPAxisY;
|
ptPaneAnchor.Pane = this.bottomChartDiagram;
|
annotationText.AnchorPoint = ptPaneAnchor;
|
}
|
|
annotationText.BackColor = Color.Transparent;
|
annotationText.TextColor = Color.LightGray;
|
annotationText.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
annotationText.LabelMode = false;
|
annotationText.RuntimeAnchoring = true;
|
annotationText.RuntimeMoving = true;
|
annotationText.RuntimeResizing = true;
|
annotationText.RuntimeRotation = true;
|
annotationText.Name = "QP_" + nameAppend;
|
|
DevExpress.XtraCharts.RelativePosition relativePosition1 = new DevExpress.XtraCharts.RelativePosition();
|
relativePosition1.Angle = 0D;
|
relativePosition1.ConnectorLength = 25;
|
annotationText.ShapePosition = relativePosition1;
|
|
annotationText.Visible = true;
|
annotationText.Text = curve.CurvePara;
|
annotationText.TextColor = curve.CurveColor;
|
annotationText.BackColor = System.Drawing.Color.Transparent;
|
annotationText.Shadow.Visible = false;
|
|
//annotationText.Border.Color = Curve.CurveColor;
|
this.chartControl1.AnnotationRepository.Add(annotationText);
|
|
AnnoGuidDict_QP[curve.CurveID] = annotationText;
|
}
|
}
|
|
//更新QNPS曲线
|
public void CreateSeriesNPSH(Eventech.Model.CurveDispParasEx curve, string nameAppend)
|
{
|
DevExpress.XtraCharts.Series series = new DevExpress.XtraCharts.Series();
|
series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Numerical;
|
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;
|
series.Name = "QNPSH_" + nameAppend;
|
series.ShowInLegend = false;
|
series.CrosshairEnabled = DefaultBoolean.False;
|
series.Tag = curve.CurveID;
|
|
DevExpress.XtraCharts.SplineSeriesView splineSeriesView = new DevExpress.XtraCharts.SplineSeriesView();
|
splineSeriesView.Color = curve.CurveColor;
|
splineSeriesView.LineStyle.Thickness = curve.CurveThickness;
|
splineSeriesView.LineStyle.DashStyle = (DevExpress.XtraCharts.DashStyle)curve.CurveDashStyle;
|
splineSeriesView.AxisY = NPSHAxisY;//.AxisYName = "QEAxisY";
|
if (_chartPanelStyle == TProduct.Model.eChartDiagramPanelStyle.Whole)
|
{//
|
splineSeriesView.Pane = mainChartDiagram.DefaultPane;
|
}
|
else
|
{//分开放
|
splineSeriesView.Pane = this.bottomChartDiagram;
|
}
|
|
series.View = splineSeriesView;
|
this.chartControl1.Series.Add(series);
|
|
for (int j = 0; j < curve.CurveInfo.Count(); j++)
|
{
|
series.Points.Add(new SeriesPoint(curve.CurveInfo[j].X, new double[] { curve.CurveInfo[j].Y }));
|
}
|
|
series.Visible = curve.IsDispCurve;
|
SeriesGuidDict[curve.CurveID] = series;
|
}
|
|
//
|
public void RefreshChart()
|
{
|
chartControl1.Refresh();
|
}
|
|
#endregion 更新
|
|
|
#region 重绘
|
|
private Rectangle CalculateDiagramBounds()
|
{
|
return CalculateDiagramBounds(mainChartDiagram.AxisX.VisualRange, mainChartDiagram.AxisY.VisualRange);
|
}
|
|
private Rectangle CalculateDiagramBounds(VisualRange RangeAxisX, VisualRange RangeAxisY)
|
{
|
Point p1 = mainChartDiagram.DiagramToPoint((double)RangeAxisX.MinValue, (double)RangeAxisY.MinValue).Point;
|
Point p2 = mainChartDiagram.DiagramToPoint((double)RangeAxisX.MaxValue, (double)RangeAxisY.MaxValue).Point;
|
|
return Eventech.Common.RectangleHelper.CreateRectangle(p1, p2);
|
}
|
|
private void chartControl_CustomPaint(object sender, CustomPaintEventArgs e)
|
{
|
if (_coordinateParas == null)
|
return;
|
|
Graphics g = e.Graphics;
|
//g.SetClip(CalculateDiagramBounds());
|
g.SmoothingMode = SmoothingMode.AntiAlias;
|
|
//绘制默认曲线的文字MaxCurveQH.PointInfo
|
//if (isDispCurveName && MaxCurveQH.CurvePara > 1)
|
//{
|
// ControlCoordinates coorPoint = mainChartDiagram.DiagramToPoint(MaxCurveQH.PointInfo.Last().X,
|
// MaxCurveQH.PointInfo.Last().Y, AxisX, AxisY);
|
// Point textPosi = new Point(coorPoint.Point.X - 3, coorPoint.Point.Y + 8);
|
// g.DrawString(MaxCurveQH.CurvePara.ToString(), TProduct.WinFrmUI.TPump.Properties.Settings.Dia.AnnoCurveName, new SolidBrush(Color.Black), textPosi);
|
//}
|
|
#region 绘制网格线
|
|
if (_chartPanelStyle == TProduct.Model.eChartDiagramPanelStyle.Whole)
|
{
|
chartControl1.DrawGridLineY(g, _coordinateParas,
|
isMonoColor ? Color.Silver : TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.GridLinesColorY);
|
}
|
|
#endregion 绘制网格线
|
|
#region 添加水印
|
if (TProduct.WinFrmUI.GlobeParas.IsPrintWaterMark)
|
{
|
chartControl1.DrawCorpLogo(g);
|
}
|
#endregion 添加水印
|
|
#region 设计点
|
|
if (_designPointList != null && _designPointList.Count() > 0)
|
{
|
if (this._desginPointSyle == Eventech.Model.eDesignPointDispType.CrossAnPointCircle)
|
{
|
System.Drawing.Point dpPoint = this.mainChartDiagram.DiagramToPoint(_designPointList[0].X, _designPointList[0].Y).Point;
|
// var first_pt = _coordinateParas.ToChartValue(_designPointList).First();
|
using (var brsh = new SolidBrush(Color.Red))
|
{
|
RectangleF rc = new RectangleF(dpPoint.X - 5, dpPoint.Y - 5, 10, 10);
|
g.FillEllipse(brsh, rc);
|
}
|
|
|
}
|
else
|
{
|
chartControl1.DrawDesignPoints4Cross(g, _coordinateParas.ToChartValue(_designPointList),
|
isMonoColor ? Color.Gray : Color.Red);
|
}
|
|
}
|
|
#endregion 设计点
|
|
#region 绘制装配曲线
|
|
if (_isDispEquipmentCurve && _equipmentCurveList != null)
|
{
|
g.SetClip(CalculateDiagramBounds());//保证曲线不会绘制图表外面
|
|
using (Pen penCurve = new Pen(System.Drawing.Color.LightCyan, 3f))
|
{
|
foreach (var curve in _equipmentCurveList)
|
{
|
if (curve.Item2.CurveInfo != null)
|
{
|
chartControl1.DrawEquipmentCurve(g,
|
_coordinateParas.ToChartValue(curve.Item2.CurveInfo), isMonoColor);
|
}
|
|
for (int i = 0; i < curve.Item1.Count; i++)
|
{
|
ControlCoordinates coor = mainChartDiagram.DiagramToPoint(curve.Item1[i].X,
|
curve.Item1[i].Y, AxisQ, QHAxisY);
|
|
g.DrawEllipse(penCurve, coor.Point.X - 3, coor.Point.Y - 3, 6, 6);
|
}
|
}
|
}
|
|
g.ResetClip();
|
}
|
|
#endregion 绘制装配曲线
|
|
|
}
|
|
private void DrawEqualCurve(List<Point> points, Eventech.Model.CombineCurve equalCurve, Graphics g, Color curveColor)
|
{
|
//去掉重曲线复点
|
Point[] pointArray = points.Distinct().ToArray();
|
|
//写字
|
//using (SolidBrush brushTextQP = new SolidBrush(curveColor))
|
//using (Font fontTextQP = TProduct.WinFrmUI.CorpSkinStyleHelper.GetDefaultFont())
|
//{
|
// g.DrawString(equalCurve.CurvePara.ToString(), fontTextQP, brushTextQP,
|
// pointArray.First().X, pointArray.First().Y - 15);
|
//}
|
|
//绘制曲线
|
if (pointArray.Length > 2)
|
{
|
using (Pen penCurve = new Pen(curveColor, 3f))
|
{
|
if (equalCurve.IsClosed)
|
{
|
System.Drawing.Drawing2D.FillMode aFillMode = System.Drawing.Drawing2D.FillMode.Alternate;
|
g.DrawClosedCurve(penCurve, pointArray, equalCurve.DispTension, aFillMode);
|
}
|
else
|
{//DrawBeziers
|
g.DrawCurve(penCurve, pointArray, equalCurve.DispTension);
|
}
|
}
|
}
|
else if (pointArray.Length == 2)
|
{
|
using (Pen penCurve = new Pen(curveColor, 3f))
|
{
|
g.DrawLine(penCurve, pointArray[0], pointArray[1]);
|
}
|
}
|
else if (pointArray.Length == 1)
|
{
|
using (var brsh = new SolidBrush(curveColor))
|
{
|
Rectangle rc = new Rectangle(pointArray[0].X - 2, pointArray[0].Y - 2, 4, 4);
|
g.FillEllipse(brsh, rc);
|
}
|
}
|
}
|
|
#endregion 重绘
|
|
#region 显示
|
|
//是否显示曲线Legend
|
private bool isDispLegend = false;
|
|
public bool IsDispLegend
|
{
|
get { return isDispLegend; }
|
set
|
{
|
isDispLegend = value;
|
this.chartControl1.Legend.Visibility = value ? DefaultBoolean.True : DefaultBoolean.False;
|
}
|
}
|
|
//是否显示曲线参数
|
private bool isDispCurveName = false;
|
|
public bool IsDispCurveName
|
{
|
get { return isDispCurveName; }
|
set { isDispCurveName = value; 设置曲线标签显示MenuItem.Visible = value; }
|
}
|
|
private bool isMonoColor = false;
|
|
public bool IsMonoColor
|
{
|
get { return isMonoColor; }
|
set
|
{
|
isMonoColor = value;
|
if (isMonoColor)
|
{
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetMonoColor(chartControl1);
|
}
|
else
|
{
|
SetSettingColor();
|
}
|
}
|
}
|
|
public void SetChartDisplay()
|
{
|
if (isMonoColor)
|
{
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetMonoColor(chartControl1);
|
}
|
else
|
{
|
SetSettingColor();
|
}
|
}
|
|
private void SetSettingColor()
|
{
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetDisplay(AxisQ, QHAxisY, QEAxisY, QPAxisY, NPSHAxisY);
|
//TProduct.WinFrmUI.TPump.XtraChartHelper.SetCurveDisplay(SeriesQHdefault, SeriesQEdefault, SeriesQPdefault, SeriesNPSHdefault);
|
//TProduct.WinFrmUI.TPump.XtraChartHelper.SetCurveDisplay(SeriesQHmax, SeriesQEmax, SeriesQPmax, SeriesNPSHmax);
|
//TProduct.WinFrmUI.TPump.XtraChartHelper.SetCurveDisplay(SeriesQHmin, SeriesQEmin, SeriesQPmin, SeriesNPSHmin);
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetDisplay(StripWorkRegion);
|
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetBackColor(chartControl1, mainChartDiagram);
|
}
|
|
#endregion 显示
|
|
#region 查询点
|
public void SetQueryPointQ(double q)
|
{
|
QueryLineVertical.AxisValue = q;
|
if (_coordinateParas == null)
|
{
|
QueryLineHorizontal.Points.Clear();
|
}
|
else
|
{
|
CalcCurveParasByQ(q);
|
}
|
}
|
|
//是否可以查询曲线参数
|
public void SetQueryLineDisp(bool isDisp)
|
{
|
_isQueryCurvePara = isDisp;
|
QueryLineVertical.Visible = _isQueryCurvePara;
|
QueryLineVertical.Title.Visible = _isQueryCurvePara;
|
QueryParaInfoText.Visible = _isQueryCurvePara;
|
QueryLineHorizontal.Visible = _isQueryCurvePara;
|
if (_isQueryCurvePara)
|
this.IsHandCursor();
|
else
|
this.IsCrossCursor();
|
}
|
|
#endregion 查询点
|
|
#region 图表事件
|
|
private object _rightClickObj = null;
|
private double _rightClickFlow = 0;
|
|
private void chartControl_MouseClick(object sender, MouseEventArgs e)
|
{
|
if (e.Button == System.Windows.Forms.MouseButtons.Right)
|
{
|
ChartHitInfo hitInfo = chartControl1.CalcHitInfo(e.Location);
|
|
DiagramCoordinates coordPt = mainChartDiagram.PointToDiagram(e.Location);
|
_rightClickFlow = coordPt.NumericalArgument;
|
|
if (hitInfo.InAnnotation)
|
{
|
_rightClickObj = hitInfo.Annotation;
|
annoRightMenu.Show(chartControl1, e.Location);
|
}
|
else if (hitInfo.InSeries)
|
{
|
_rightClickObj = hitInfo.Series;
|
curveRightMenu.Show(chartControl1, e.Location);
|
}
|
else if (hitInfo.InAxis)
|
{
|
_rightClickObj = hitInfo.Axis;
|
axisRightMenu.Show(chartControl1, e.Location);
|
}
|
else if (hitInfo.InConstantLine)
|
{
|
_rightClickObj = hitInfo.ConstantLine;
|
lineMenuStrip.Show(chartControl1, e.Location);
|
}
|
//else if (hitInfo.InChartTitle)
|
//{
|
// rightClickObj = hitInfo.AxisTitle;
|
// lineMenuStrip.Show(chartControl1, e.locationType);
|
//}
|
else
|
{
|
_rightClickObj = null;
|
chartRightMenu.Show(chartControl1, e.Location);
|
}
|
}
|
}
|
|
//ToolTipController toolTipController1 = new ToolTipController();
|
private void chartControl1_ObjectHotTracked(object sender, HotTrackEventArgs e)
|
{
|
//if (e.Button == System.Windows.Forms.MouseButtons.Right)
|
//{
|
// ChartHitInfo hitInfo = chartControl1.CalcHitInfo(e.Location);
|
// if (hitInfo.InConstantLine)
|
// {
|
// rightClickObj = hitInfo.ConstantLine;
|
// lineMenuStrip.Show(chartControl1, e.Location);
|
// }
|
// else
|
// {
|
// rightClickObj = null;
|
// chartRightMenu.Show(chartControl1, e.Location);
|
// }
|
//}
|
}
|
|
public Eventech.Model.LxpFeatChartCurveGroup GetDefaultCurveGroupChart()
|
{
|
if (AllCurveQH == null || AllCurveQH.Count() == 0)
|
return null;
|
|
Eventech.Model.LxpFeatChartCurveGroup defaultCurveGrp = new Eventech.Model.LxpFeatChartCurveGroup();
|
defaultCurveGrp.FeatCurveQH = this.AllCurveQH.First();
|
|
if (this.AllCurveQP != null && this.AllCurveQP.Count > 0)
|
defaultCurveGrp.FeatCurveQP = this.AllCurveQP.First();
|
|
if (this.AllCurveQE != null && this.AllCurveQE.Count > 0)
|
defaultCurveGrp.FeatCurveQE = this.AllCurveQE.First();
|
|
return defaultCurveGrp;
|
}
|
|
private Eventech.Model.CurveDispParasEx GetCurveByIndex(Eventech.Model.eFeatCurveType type, int index)
|
{
|
if (index < 0)
|
return null;
|
if (type == Eventech.Model.eFeatCurveType.QH)
|
{
|
if (this.AllCurveQH == null)
|
return null;
|
if (index >= this.AllCurveQH.Count)
|
return null;
|
return this.AllCurveQH[index];
|
}
|
if (type == Eventech.Model.eFeatCurveType.QE)
|
{
|
if (this.AllCurveQE == null)
|
return null;
|
if (index >= this.AllCurveQE.Count)
|
return null;
|
return this.AllCurveQE[index];
|
}
|
if (type == Eventech.Model.eFeatCurveType.QP)
|
{
|
if (this.AllCurveQP == null)
|
return null;
|
if (index >= this.AllCurveQP.Count)
|
return null;
|
return this.AllCurveQP[index];
|
}
|
if (type == Eventech.Model.eFeatCurveType.QNPSH)
|
{
|
if (this.AllCurveNPSH == null)
|
return null;
|
if (index >= this.AllCurveNPSH.Count)
|
return null;
|
return this.AllCurveNPSH[index];
|
}
|
|
return null;
|
}
|
|
private void CalcCurveParasByQ(double queryQ)
|
{
|
for (int indx = 0; indx < this.AllCurveQH.Count(); indx++)
|
{
|
var queryPt = CalcQueryPointPt(
|
GetCurveByIndex(Eventech.Model.eFeatCurveType.QH, indx),
|
GetCurveByIndex(Eventech.Model.eFeatCurveType.QE, indx),
|
GetCurveByIndex(Eventech.Model.eFeatCurveType.QP, indx),
|
GetCurveByIndex(Eventech.Model.eFeatCurveType.QNPSH, indx),
|
queryQ);
|
if (queryPt == null || queryPt.Q < 1)
|
continue;
|
|
if (indx == 0)
|
{
|
DispQueryInfoInChart(queryPt);
|
SetQueryParaLineQ(queryPt);
|
}
|
|
if (OnCalcQueryPtInfo != null)
|
{
|
OnCalcQueryPtInfo(indx, queryPt);
|
}
|
}
|
}
|
|
//修改了查询点位置
|
public Action<int, Eventech.Model.GroupPoint> OnCalcQueryPtInfo = null;
|
|
private Eventech.Model.GroupPoint CalcQueryPointPt(
|
Eventech.Model.CurveDispParasEx FeatCurveQH,
|
Eventech.Model.CurveDispParasEx FeatCurveQE,
|
Eventech.Model.CurveDispParasEx FeatCurveQP,
|
Eventech.Model.CurveDispParasEx FeatCurveNPSH,
|
double queryQ)
|
{
|
var query_posi = new Eventech.Model.GroupPoint(0, 0, 0, 0, 0);
|
query_posi.Q = queryQ;
|
query_posi.H = Eventech.Common.FitCurveHelper.GetFitPointY(FeatCurveQH.CurveExpress, queryQ);
|
if (FeatCurveQE != null && IsDisplayCurveQE)
|
{
|
query_posi.E = Eventech.Common.FitCurveHelper.GetFitPointY(FeatCurveQE.CurveExpress, queryQ);
|
}
|
|
if (FeatCurveQP != null)
|
{
|
query_posi.P = Eventech.Common.FitCurveHelper.GetFitPointY(FeatCurveQP.CurveExpress, queryQ);
|
}
|
|
if (FeatCurveNPSH != null)
|
{
|
if (queryQ > FeatCurveNPSH.CurveExpress.RangeMin && queryQ < FeatCurveNPSH.CurveExpress.RangeMax)
|
{
|
query_posi.NPSH = Eventech.Common.FitCurveHelper.GetFitPointY(FeatCurveNPSH.CurveExpress, queryQ);
|
}
|
}
|
|
return query_posi;
|
}
|
|
private void DispQueryInfoInChart(Eventech.Model.GroupPoint queryPt)
|
{
|
// if (queryPt == null)
|
// return;
|
|
// StringBuilder builder = new StringBuilder();
|
|
// builder.AppendLine("---" + TProduct.UserSetting.Localization.TranslateHelper.GetString("曲线点参数") + "---");
|
// if (_unit_design_point_Q == _coordinate_unitQ)
|
// {
|
// builder.AppendFormat("{0}:{1} {2}",
|
//TProduct.UserSetting.Localization.TranslateHelper.GetString("流量"),
|
//CalcDispValueQ_STR(_coordinate_unitQ, queryPt.Q),
|
//Eventech.Common.UnitQHelper.GetEnUnitName(this._coordinate_unitQ));
|
// }
|
// else
|
// {
|
// builder.AppendFormat("{0}:{1} {2} ({3} {4})",
|
//TProduct.UserSetting.Localization.TranslateHelper.GetString("流量"),
|
//CalcDispValueQ_STR(_queryInfo_unitQ, queryPt.Q),
|
//Eventech.Common.UnitQHelper.GetEnUnitName(this._queryInfo_unitQ),
|
//CalcDispValueQ_STR(Eventech.Common.UnitQHelper.Tran(this._coordinate_unitQ, _unit_design_point_Q, queryPt.Q)),
|
//Eventech.Common.UnitQHelper.GetEnUnitName(this._unit_design_point_Q));
|
// }
|
|
// builder.AppendLine("");
|
// if (_unit_design_point_H == _coordinate_unitH)
|
// {
|
// builder.AppendFormat("{0}:{1} {2}",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString("扬程"),
|
// CalcDispValueH_STR(_queryInfo_unitH, queryPt.H),
|
// Eventech.Common.UnitHHelper.GetEnUnitName(this._queryInfo_unitH));
|
// }
|
// else
|
// {
|
// builder.AppendFormat("{0}:{1} {2} ({3} {4})",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString("扬程"),
|
// CalcDispValueH_STR(_queryInfo_unitH, queryPt.H),
|
// Eventech.Common.UnitHHelper.GetEnUnitName(this._queryInfo_unitH),
|
// CalcDispValueH_STR(Eventech.Common.UnitHHelper.Tran(this._coordinate_unitH, _unit_design_point_H, queryPt.H)),
|
// Eventech.Common.UnitHHelper.GetEnUnitName(this._unit_design_point_H));
|
// }
|
|
// if (_seriesEntity.IsDisplayCurveQE() && queryPt.E > 0)
|
// {
|
// builder.AppendLine("");
|
// // builder.AppendFormat(TProduct.UserSetting.Localization.TranslateHelper.GetString("效率") +
|
// // ":{0:N1}%", _queryPt.E);
|
// builder.AppendFormat("{0}:{1:N1}%",
|
// TProduct.UserSetting.Localization.TranslateHelper.GetString(_seriesEntity.GetEtaTextName(TProduct.UserSetting.Localization.Current)), queryPt.E);
|
// }
|
|
// if (_seriesEntity.IsDisplayCurveQP() && queryPt.P > 0)
|
// {
|
// queryPt.P = TProduct.Common.RoundHelper.GetDispValuePower(queryPt.P);
|
// builder.AppendLine("");
|
|
// //builder.AppendFormat(TProduct.UserSetting.Localization.TranslateHelper.GetString("轴功率") + ":{0:N1}{1}", CalcDispValueP(_queryPt.P),
|
// // Eventech.Common.UnitPHelper.GetEnUnitName(this._unitP));
|
|
// builder.AppendFormat("{0}:{1}{2}", TProduct.UserSetting.Localization.TranslateHelper.GetString(_seriesEntity.GetPowerTextName(TProduct.UserSetting.Localization.Current)), CalcDispValueP(queryPt.P),
|
//Eventech.Common.UnitPHelper.GetEnUnitName(this._coordinate_unitP));
|
// }
|
|
// if (queryPt.NPSH > 0)
|
// {
|
// builder.AppendLine("");
|
// if (queryPt.NPSH < 3)
|
// builder.AppendFormat(TProduct.UserSetting.Localization.TranslateHelper.GetString("汽蚀") + ":{0:N2}", queryPt.NPSH);
|
// else
|
// builder.AppendFormat(TProduct.UserSetting.Localization.TranslateHelper.GetString("汽蚀") + ":{0:N1}", queryPt.NPSH);
|
// }
|
|
//QueryParaInfoText.Text = builder.ToString();
|
}
|
|
private void SetQueryParaLineQ(Eventech.Model.GroupPoint queryPt)
|
{
|
QueryLineVertical.AxisValue = queryPt.Q;
|
QueryLineVertical.Title.Text = string.Format("{0} ({1})", CalcDispValueQ_STR(queryPt.Q), Eventech.Common.UnitQHelper.GetEnUnitName(this._coordinate_unitQ));
|
|
QueryLineHorizontal.Points.Clear();
|
if (_coordinateParas != null)
|
QueryLineHorizontal.Points.Add(new SeriesPoint(_coordinateParas.CoordMinQ, queryPt.H));
|
else
|
QueryLineHorizontal.Points.Add(new SeriesPoint(_minQ, queryPt.H));
|
QueryLineHorizontal.Points.Add(new SeriesPoint(queryPt.Q, queryPt.H));
|
}
|
|
private bool _isMoveQueryLineQ1 = false;
|
private bool _isMoveQueryLineH1 = false;
|
private Point _clickLocation;
|
|
private void chartControl_MouseDown(object sender, MouseEventArgs e)
|
{
|
if (e.Button == System.Windows.Forms.MouseButtons.Left)
|
{
|
_clickLocation = e.Location;
|
ChartHitInfo hitInfo = chartControl1.CalcHitInfo(_clickLocation);
|
if (hitInfo.InConstantLine)
|
{
|
if (hitInfo.ConstantLine == QueryLineVertical)
|
_isMoveQueryLineQ1 = true;
|
}
|
else if (hitInfo.InSeries)
|
{
|
if (hitInfo.Series == QueryLineHorizontal)
|
_isMoveQueryLineH1 = true;
|
}
|
else
|
{
|
DiagramCoordinates coordPt = mainChartDiagram.PointToDiagram(e.Location);
|
double refQ = coordPt.NumericalArgument;
|
double refH = coordPt.NumericalValue;
|
|
if (OnDispOperateInfo != null)
|
{
|
if (TProduct.UserSetting.Localization.Current == Eventech.Model.eLocalizationType.zhCN)
|
OnDispOperateInfo(this, new Eventech.Model.OperateInfoEventArgs(string.Format("鼠标点击处 流量={0:N1};扬程={1:N1}", refQ, refH)));
|
else
|
OnDispOperateInfo(this, new Eventech.Model.OperateInfoEventArgs(string.Format("Clink Point: Flow={0:N1};Head={1:N1}", refQ, refH)));
|
}
|
}
|
}
|
|
//if (isRectSel)
|
//{//进行框选删除点
|
// Rectangle bounds = CalculateDiagramBounds();
|
// if (bounds.Contains(e.locationType))
|
// {
|
// selCornerFirstPt = selCornerLastPt = e.locationType;
|
// selRectangleIng = Rectangle.Empty;
|
// }
|
//}
|
}
|
|
private void chartControl_MouseMove(object sender, MouseEventArgs e)
|
{
|
if (_isMoveQueryLineQ1)
|
{
|
DiagramCoordinates coordPt = mainChartDiagram.PointToDiagram(e.Location);
|
double refQ = coordPt.NumericalArgument;
|
CalcCurveParasByQ(refQ);
|
}
|
else if (_isMoveQueryLineH1)
|
{
|
//DiagramCoordinates coordPt = mainChartDiagram.PointToDiagram(e.Location);
|
//double refH = coordPt.NumericalValue;
|
//double refQ = 0;
|
//if (CalcCurveParasByH(refH, ref refQ))
|
//{
|
// CalcCurveParasByQ(refQ);
|
// SetQueryParaLineQ();
|
//}
|
}
|
}
|
|
//public event TagEventHandler OnChangeWorkPt = null;
|
private void chartControl_MouseUp(object sender, MouseEventArgs e)
|
{
|
//if (isMoveQueryLineQ || isMoveQueryLineH)
|
//{
|
// if (OnChangeWorkPt != null)
|
// {
|
// OnChangeWorkPt(this, new TagEventArgs(_queryPt));
|
// }
|
//}
|
|
_isMoveQueryLineQ1 = false;
|
_isMoveQueryLineH1 = false;
|
//if (isRectSel)
|
//{
|
// isRectSel = false;
|
// #region 框选删除
|
// if (isRectSelDelPts)
|
// {//
|
// isRectSelDelPts = false;
|
|
// DiagramCoordinates firstCoordinate = theXYDiagram.PointToDiagram(selCornerFirstPt);
|
// DiagramCoordinates lastCoordinate = theXYDiagram.PointToDiagram(selCornerLastPt); if
|
// (firstCoordinate.IsEmpty || lastCoordinate.IsEmpty) return; PointF firstPoint = new
|
// PointF((float)firstCoordinate.NumericalArgument,
|
// (float)firstCoordinate.NumericalValue); PointF lastPoint = new
|
// PointF((float)lastCoordinate.NumericalArgument, (float)lastCoordinate.NumericalValue);
|
|
// //foreach (var row in _clickPointInfo) //{ // if (row.X < lastPoint.X && row.X >
|
// firstPoint.X && row.Y > lastPoint.Y && row.Y < firstPoint.Y) // { //
|
// _clickPointInfo.Remove(row); // } //} for (int iExcelCol = _clickPointInfo.Count - 1;
|
// iExcelCol >= 0; iExcelCol--) { var row = _clickPointInfo[iExcelCol]; if (row.X <
|
// lastPoint.X && row.X > firstPoint.X && row.Y > lastPoint.Y && row.Y < firstPoint.Y) {
|
// _clickPointInfo.Remove(row); }
|
|
// }
|
|
// SeriesPoint.Spectrum.Clear(); foreach (var ftPoint in _clickPointInfo) {
|
// SeriesPoint.Spectrum.Add(new SeriesPoint(ftPoint.X, new double[] { ftPoint.Y })); } } #endregion
|
|
//}
|
//selCornerFirstPt = Point.Empty;
|
//selCornerLastPt = Point.Empty;
|
//selRectangleIng = Rectangle.Empty;
|
}
|
|
private void chartControl1_LegendItemChecked(object sender, LegendItemCheckedEventArgs e)
|
{
|
//if (curvesGroups.Count == 0)
|
// return;
|
|
////if (e.CheckedElement == SeriesQHdefault)
|
////{
|
//// SetCurveTypeDisp(eCurveType.QHcurve,e.NewCheckState,false);
|
////}
|
//if (e.CheckedElement == SeriesQEdefault)
|
//{
|
// SetCurveTypeDisp(eCurveType.QEcurve, e.NewCheckState, false);
|
//}
|
//if (e.CheckedElement == SeriesQPdefault)
|
//{
|
// SetCurveTypeDisp(eCurveType.QPcurve, e.NewCheckState, false);
|
//}
|
|
//UpdateCoordinate();
|
}
|
|
#endregion 图表事件
|
|
#region 鼠标样式
|
|
public void IsCrossCursor()
|
{
|
this.chartControl1.Cursor = System.Windows.Forms.Cursors.Cross;
|
}
|
|
public void IsHandCursor()
|
{
|
this.chartControl1.Cursor = System.Windows.Forms.Cursors.Hand;
|
}
|
|
#endregion 鼠标样式
|
|
#region 右击菜单
|
|
private void chartRightMenu_Opening(object sender, CancelEventArgs e)
|
{
|
if (_isQueryCurvePara)
|
{
|
查询曲线参数MenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("关闭曲线参数查询");
|
}
|
else
|
{
|
查询曲线参数MenuItem.Text = TProduct.UserSetting.Localization.TranslateHelper.GetString("查询曲线参数");
|
}
|
}
|
|
private void 查询曲线参数MenuItem_Click(object sender, EventArgs e)
|
{
|
//if (_maxCurves == null || _maxCurves.FeatCurveQH == null || _maxCurves.FeatCurveQH.PointInfo.Count < 4)
|
// return;
|
//查询曲线参数MenuItem.IsSelect = !查询曲线参数MenuItem.IsSelect;
|
//IsQueryCurvePara = 查询曲线参数MenuItem.IsSelect;
|
|
//if (OnChangeQueryPtStatus != null)
|
// OnChangeQueryPtStatus(this, new TagEventArgs(_isQueryCurvePara));
|
|
//AnalysisParasByQDlg theCalcParasByQDlg = new AnalysisParasByQDlg();
|
//theCalcParasByQDlg.SetPointInfo(MaxCurveQH.PointInfo, MaxCurveQE.PointInfo, MaxCurveQP.PointInfo, null);
|
//theCalcParasByQDlg.Show();
|
}
|
|
private bool isDispCoodTittle = true;
|
|
private void 显示坐标标签ItemMenu_Click(object sender, EventArgs e)
|
{
|
显示坐标标签ItemMenu.Checked = !显示坐标标签ItemMenu.Checked;
|
|
isDispCoodTittle = 显示坐标标签ItemMenu.Checked;
|
|
AxisQ.Title.Visibility = isDispCoodTittle ? DefaultBoolean.True : DefaultBoolean.False;
|
QHAxisY.Title.Visibility = isDispCoodTittle ? DefaultBoolean.True : DefaultBoolean.False;
|
QEAxisY.Title.Visibility = isDispCoodTittle ? DefaultBoolean.True : DefaultBoolean.False;
|
QPAxisY.Title.Visibility = isDispCoodTittle ? DefaultBoolean.True : DefaultBoolean.False;
|
NPSHAxisY.Title.Visibility = isDispCoodTittle ? DefaultBoolean.True : DefaultBoolean.False;
|
|
SetAxisTitleDispH();
|
}
|
|
private void SetAxisTitleDispH()
|
{
|
if (QEAxisY.Visibility != DefaultBoolean.True && QPAxisY.Visibility != DefaultBoolean.True)
|
{
|
QHAxisY.Title.Alignment = StringAlignment.Center;
|
}
|
else
|
{
|
QHAxisY.Title.Alignment = StringAlignment.Far;
|
}
|
}
|
|
private void 设置图形显示Menu_Click(object sender, EventArgs e)
|
{
|
SetChartDisp();
|
}
|
|
public void SetChartDisp()
|
{
|
TProduct.WinFrmUI.SetChartDisplayDlg theDlg = new TProduct.WinFrmUI.SetChartDisplayDlg();
|
if (theDlg.ShowDialog() == DialogResult.OK)
|
{
|
SetChartDisplay();
|
chartControl1.Refresh();
|
}
|
}
|
|
private void 设置曲线标签显示MenuItem_Click(object sender, EventArgs e)
|
{
|
//System.Windows.Forms.FontDialog fontDialog1 = new System.Windows.Forms.FontDialog();
|
//fontDialog1.Font = TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.AnnoCurveName;
|
|
//if (fontDialog1.ShowDialog() != DialogResult.Cancel)
|
//{
|
// TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.AnnoCurveName = fontDialog1.Font;
|
// chartControl1.Refresh();
|
//}
|
}
|
|
//显示曲线方程
|
public void DispCurveExpressInfo()
|
{
|
//if (AllCurveQH == null || AllCurveQH.Count() == 0)
|
// return;
|
//Eventech.WinFrmUI.DispCurveEquation2Dlg theSetDlg = new Eventech.WinFrmUI.DispCurveEquation2Dlg();
|
//theSetDlg.SetCurveInfo(this.AllCurveQH);
|
//theSetDlg.Show();
|
}
|
|
#region Anno
|
|
private void annoRightMenu_Opening(object sender, CancelEventArgs e)
|
{
|
var anno = _rightClickObj as DevExpress.XtraCharts.TextAnnotation;
|
if (anno == null)
|
return;
|
|
if (anno == QueryParaInfoText)
|
{
|
MenuItemAnno删除.Visible = false;
|
MenuItemAnno修改内容.Visible = false;
|
}
|
else if (anno.Name.StartsWith("EE_"))
|
{
|
MenuItemAnno删除.Visible = true;
|
MenuItemAnno修改内容.Visible = true;
|
}
|
else
|
{
|
MenuItemAnno删除.Visible = false;
|
MenuItemAnno修改内容.Visible = false;
|
}
|
}
|
|
private void MenuItemAnno删除_Click(object sender, EventArgs e)
|
{
|
|
|
|
}
|
|
public Func<double, bool, Eventech.Model.CombineCurve> OnCalcEqualEtaCurvePoints = null;
|
|
private void MenuItemAnno修改内容_Click(object sender, EventArgs e)
|
{
|
|
}
|
|
private void 设置颜色AnnoMenuItem_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
var anno = _rightClickObj as DevExpress.XtraCharts.TextAnnotation;
|
if (anno == null)
|
return;
|
|
System.Windows.Forms.ColorDialog colorDialog1 = new System.Windows.Forms.ColorDialog();
|
colorDialog1.Color = anno.TextColor;
|
if (colorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
{
|
anno.TextColor = colorDialog1.Color;
|
anno.Border.Color = colorDialog1.Color;
|
}
|
}
|
catch
|
{
|
return;
|
}
|
}
|
|
private void 设置背景色AnnoMenuItem_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
var anno = _rightClickObj as DevExpress.XtraCharts.TextAnnotation;
|
if (anno == null)
|
return;
|
|
System.Windows.Forms.ColorDialog colorDialog1 = new System.Windows.Forms.ColorDialog();
|
colorDialog1.Color = anno.BackColor;
|
if (colorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
{
|
anno.BackColor = colorDialog1.Color;
|
}
|
}
|
catch
|
{
|
return;
|
}
|
}
|
|
private void 设置背景透明AnnoMenuItem_Click(object sender, EventArgs e)
|
{
|
var anno = _rightClickObj as DevExpress.XtraCharts.TextAnnotation;
|
if (anno == null)
|
return;
|
|
anno.BackColor = Color.Transparent;
|
anno.Shadow.Visible = false;
|
}
|
|
#endregion Anno
|
|
#region Axis
|
|
private void axisRightMenu_Opening(object sender, CancelEventArgs e)
|
{
|
if (_rightClickObj == null)
|
e.Cancel = true;
|
if (_rightClickObj == AxisQ)
|
{
|
颜色交织AxisMenuItem.Visible = true;
|
}
|
else
|
{
|
颜色交织AxisMenuItem.Visible = false;
|
}
|
}
|
|
private void 颜色交织AxisMenuItem_Click(object sender, EventArgs e)
|
{
|
var axis = _rightClickObj as DevExpress.XtraCharts.Axis;
|
if (axis == null)
|
return;
|
颜色交织AxisMenuItem.Checked = !颜色交织AxisMenuItem.Checked;
|
axis.Interlaced = 颜色交织AxisMenuItem.Checked;
|
}
|
|
private void 设置颜色AxisMenuItem_Click(object sender, EventArgs e)
|
{
|
var axis = _rightClickObj as DevExpress.XtraCharts.Axis;
|
if (axis == null)
|
return;
|
|
System.Windows.Forms.ColorDialog colorDialog1;
|
colorDialog1 = new System.Windows.Forms.ColorDialog();
|
colorDialog1.Color = axis.Label.TextColor;
|
if (colorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
{
|
axis.Title.TextColor = colorDialog1.Color;
|
axis.Label.TextColor = colorDialog1.Color;
|
axis.Color = colorDialog1.Color;
|
}
|
}
|
|
private void 设置坐标值MenuItem_Click(object sender, EventArgs e)
|
{
|
var axis = _rightClickObj as DevExpress.XtraCharts.Axis;
|
if (axis == null)
|
return;
|
if (_rightClickObj == AxisQ)
|
{
|
TProduct.WinFrmUI.TPump.SetSingleCoordLxpQDlg theSetDlg = new TProduct.WinFrmUI.TPump.SetSingleCoordLxpQDlg();
|
theSetDlg.SetBindingData(_coordinateParas);
|
theSetDlg.OnChangedCoord += ChangedCoordHandler;
|
theSetDlg.ShowDialog();
|
}
|
else if (_rightClickObj == QHAxisY)
|
{
|
TProduct.WinFrmUI.TPump.SetSingleCoordLxpHDlg theSetDlg = new TProduct.WinFrmUI.TPump.SetSingleCoordLxpHDlg();
|
theSetDlg.SetBindingData(_coordinateParas);
|
theSetDlg.OnChangedCoord += ChangedCoordHandler;
|
theSetDlg.ShowDialog();
|
}
|
else if (_rightClickObj == QPAxisY)
|
{
|
TProduct.WinFrmUI.TPump.SetSingleCoordLxpPDlg theSetDlg = new TProduct.WinFrmUI.TPump.SetSingleCoordLxpPDlg();
|
theSetDlg.SetBindingData(_coordinateParas, this._coordinate_unitP);
|
theSetDlg.OnChangedCoord += ChangedCoordHandler;
|
theSetDlg.ShowDialog();
|
}
|
else if (_rightClickObj == NPSHAxisY)
|
{
|
TProduct.WinFrmUI.TPump.SetSingleCoordLxpNpshDlg theSetDlg = new TProduct.WinFrmUI.TPump.SetSingleCoordLxpNpshDlg();
|
theSetDlg.SetBindingData(_coordinateParas, this._coordinate_unitNPSH);
|
theSetDlg.OnChangedCoord += ChangedCoordHandler;
|
theSetDlg.ShowDialog();
|
}
|
else if (_rightClickObj == QEAxisY)
|
{
|
TProduct.WinFrmUI.TPump.SetSingleCoordLxpEDlg theSetDlg = new TProduct.WinFrmUI.TPump.SetSingleCoordLxpEDlg();
|
theSetDlg.SetBindingData(_coordinateParas);
|
theSetDlg.OnChangedCoord += ChangedCoordHandler;
|
theSetDlg.ShowDialog();
|
}
|
}
|
|
private void 设置子刻度数AxisMenuItem_Click(object sender, EventArgs e)
|
{
|
var axis = _rightClickObj as DevExpress.XtraCharts.Axis;
|
if (axis == null)
|
return;
|
SetNumberDlg theDlg = new SetNumberDlg();
|
theDlg.IsInt();
|
theDlg.Number = axis.MinorCount;
|
if (theDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
{
|
axis.MinorCount = Convert.ToInt32(theDlg.Number);
|
}
|
}
|
|
#endregion Axis
|
|
#region Series
|
|
private void 设置颜色SeriesMenuItem_Click(object sender, EventArgs e)
|
{
|
var series = _rightClickObj as DevExpress.XtraCharts.Series;
|
if (series == null)
|
return;
|
|
System.Windows.Forms.ColorDialog colorDialog1;
|
colorDialog1 = new System.Windows.Forms.ColorDialog();
|
|
colorDialog1.Color = series.View.Color;
|
if (colorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
{
|
series.View.Color = colorDialog1.Color;
|
}
|
}
|
|
private void 设置宽度SeriesMenuItem_Click(object sender, EventArgs e)
|
{
|
var series = _rightClickObj as DevExpress.XtraCharts.Series;
|
if (series == null)
|
return;
|
if (!(series.View is DevExpress.XtraCharts.LineSeriesView))
|
return;
|
SetCurveWidthDlg theDlg = new SetCurveWidthDlg();
|
theDlg.CurveWidth = (series.View as DevExpress.XtraCharts.LineSeriesView).LineStyle.Thickness;
|
if (theDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
{
|
(series.View as DevExpress.XtraCharts.LineSeriesView).LineStyle.Thickness = theDlg.CurveWidth;
|
}
|
}
|
|
private void 设置线型SeriesMenuItem_Click(object sender, EventArgs e)
|
{
|
var series = _rightClickObj as DevExpress.XtraCharts.Series;
|
if (series == null)
|
return;
|
if (!(series.View is DevExpress.XtraCharts.LineSeriesView))
|
return;
|
SetLineStyleDlg theDlg = new SetLineStyleDlg();
|
theDlg.DashStyle = (series.View as DevExpress.XtraCharts.LineSeriesView).LineStyle.DashStyle;
|
if (theDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
{
|
(series.View as DevExpress.XtraCharts.LineSeriesView).LineStyle.DashStyle = theDlg.DashStyle;
|
}
|
}
|
|
#endregion Series
|
|
#region Line
|
|
private void 设置颜色LineMenuItem_Click(object sender, EventArgs e)
|
{
|
var refLine = _rightClickObj as DevExpress.XtraCharts.ConstantLine;
|
if (refLine == null)
|
return;
|
|
System.Windows.Forms.ColorDialog colorDialog1;
|
colorDialog1 = new System.Windows.Forms.ColorDialog();
|
|
colorDialog1.Color = refLine.Color;
|
if (colorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
{
|
refLine.Color = colorDialog1.Color;
|
refLine.Title.TextColor = colorDialog1.Color;
|
}
|
}
|
|
private void MenuItem设置值Line_Click(object sender, EventArgs e)
|
{
|
if (_rightClickObj == QueryLineHorizontal)
|
{
|
//SetRefLineValue1Dlg theDlg = new SetRefLineValue1Dlg();
|
//theDlg.SetUnitName(Eventech.Common.UnitHHelper.GetEnUnitName(this._unitH));
|
//theDlg.RefLineValue = Convert.ToDecimal(Math.Round(CalcDispValueH(QueryLineHorizontal.Points[0].Values[0]), 1));
|
//if (theDlg.ShowDialog() == DialogResult.OK)
|
//{
|
// double refH = CalcDataValueH(Convert.ToDouble(theDlg.RefLineValue));
|
// double refQ = 0;
|
// if (CalcCurveParasByH(refH, ref refQ))
|
// {
|
// CalcCurveParasByQ(refQ);
|
// SetQueryParaLineQ();
|
// }
|
//}
|
}
|
else
|
{
|
var refLine = _rightClickObj as DevExpress.XtraCharts.ConstantLine;
|
if (refLine == null)
|
return;
|
if (refLine == QueryLineVertical)
|
{
|
//SetRefLineValue2Dlg theDlg = new SetRefLineValue2Dlg();
|
//theDlg.SetUnitName(Eventech.Common.UnitQHelper.GetEnUnitName(this._coordinate_unitQ));
|
|
//theDlg.SetValue(Math.Round(CalcDispValueQ(Convert.ToDouble(QueryLineVertical.AxisValue)), 1));
|
//if (theDlg.ShowDialog() == DialogResult.OK)
|
//{
|
// CalcCurveParasByQ(CalcDataValueQ(theDlg.GetValue().Value));
|
//}
|
}
|
}
|
}
|
|
#endregion Line
|
|
#endregion 右击菜单
|
|
#region 装置曲线
|
|
private List<Tuple<Eventech.Model.FeatPointList, Eventech.Model.EquipCurveParas>> _equipmentCurveList = null;
|
|
public bool IsHaveEquipmentCurve()
|
{
|
if (_equipmentCurveList == null || _equipmentCurveList.Count() == 0)
|
return false;
|
else
|
return true;
|
}
|
|
private bool _isDispEquipmentCurve = false;
|
|
public bool IsDispEquipmentCurve
|
{
|
get { return _isDispEquipmentCurve; }
|
set { _isDispEquipmentCurve = value; }
|
}
|
|
public void ClearEquipmentCurve()
|
{
|
_equipmentCurveList = null;
|
chartControl1.Refresh();
|
}
|
|
public void SetEquipmentCurve(Eventech.Model.FeatPoint other_pt, double zeroh)
|
{
|
var defaultWrkCurve = GetDefaultCurveGroupChart();
|
if (defaultWrkCurve == null || defaultWrkCurve.FeatCurveQH == null)
|
return;
|
|
var set_pt1 = Eventech.Common.ParabolaCurveHelper_H.GetSectPoint(defaultWrkCurve.FeatCurveQH.CurveExpress, other_pt, zeroh);
|
if (set_pt1 == null)
|
return;
|
|
if (_equipmentCurveList == null)
|
_equipmentCurveList = new List<Tuple<Eventech.Model.FeatPointList, Eventech.Model.EquipCurveParas>>();
|
|
var curve = BuildEquipCurveParas(set_pt1, zeroh);
|
Eventech.Model.FeatPointList sect_points = new Eventech.Model.FeatPointList();
|
sect_points.Add(set_pt1);
|
if (this.OnCalcQueryPtInfo != null)
|
{
|
Eventech.Model.GroupPoint queryPt = new Eventech.Model.GroupPoint();
|
queryPt.Q = set_pt1.X;
|
queryPt.H = set_pt1.Y;
|
|
OnCalcQueryPtInfo(0, queryPt);
|
}
|
|
for (int indx = 1; indx < this.AllCurveQH.Count(); indx++)
|
{
|
var wrkCurve2 = GetCurveByIndex(Eventech.Model.eFeatCurveType.QH, indx);
|
var set_pt2 = Eventech.Common.ParabolaCurveHelper_H.GetSectPoint(wrkCurve2.CurveExpress, other_pt, zeroh);
|
if (set_pt2 == null)
|
return;
|
sect_points.Add(set_pt2);
|
|
if (this.OnCalcQueryPtInfo != null)
|
{
|
Eventech.Model.GroupPoint queryPt = new Eventech.Model.GroupPoint();
|
queryPt.Q = set_pt2.X;
|
queryPt.H = set_pt2.Y;
|
|
OnCalcQueryPtInfo(indx, queryPt);
|
}
|
}
|
|
if (_equipmentCurveList.Count() == 0)
|
{
|
_equipmentCurveList.Add(new Tuple<Eventech.Model.FeatPointList, Eventech.Model.EquipCurveParas>(sect_points, curve));
|
}
|
else
|
{
|
_equipmentCurveList[0] = new Tuple<Eventech.Model.FeatPointList, Eventech.Model.EquipCurveParas>(sect_points, curve);
|
}
|
chartControl1.Refresh();
|
}
|
|
private Eventech.Model.EquipCurveParas BuildEquipCurveParas(Eventech.Model.FeatPoint other_pt, double textZeroH)
|
{
|
double b = textZeroH;
|
double y1 = other_pt.Y;
|
double x1 = other_pt.X;
|
double k = (y1 - b) / (x1 * x1);
|
|
List<Eventech.Model.FeatPoint> points = new List<Eventech.Model.FeatPoint>();
|
|
double space = (other_pt.X - _minQ) / 10;//11个点
|
for (int i = 0; i < 11; i++)
|
{
|
double x = space * i + _minQ;
|
double y = k * x * x + b;
|
points.Add(new Eventech.Model.FeatPoint(x, y));
|
}
|
|
var equipmentCurveParas = new Eventech.Model.EquipCurveParas();
|
equipmentCurveParas.Type = 0;//0表示二次曲线
|
equipmentCurveParas.OriginPoints = new List<Eventech.Model.FeatPoint>();
|
equipmentCurveParas.OriginPoints.Add(new Eventech.Model.FeatPoint() { X = 0, Y = b });
|
equipmentCurveParas.OriginPoints.Add(new Eventech.Model.FeatPoint() { X = x1, Y = y1 });
|
equipmentCurveParas.CurveInfo = points;
|
equipmentCurveParas.CurveExpress = Eventech.Common.CurveExpressConver.ToParameter(points);
|
return equipmentCurveParas;
|
}
|
|
#endregion 装置曲线
|
|
#region 曲线分开放菜单
|
|
protected TProduct.Model.eChartDiagramPanelStyle _chartPanelStyle = TProduct.Model.eChartDiagramPanelStyle.Two;
|
|
public void SetChartPanelStyleParas(TProduct.Model.eChartDiagramPanelStyle style)
|
{
|
_chartPanelStyle = style;
|
SetChartPanelStyle();
|
}
|
|
//0 是一整块 1 上面扬程效率 下面功率汽蚀
|
public void SetChartPanelStyle()
|
{
|
bool isHaveCurveQH = false;
|
bool isHaveCurveQE = false;
|
bool isHaveCurveQP = false;
|
bool isHaveCurveNPSH = false;
|
if (AllCurveQH != null && AllCurveQH.Count > 0)
|
{
|
isHaveCurveQH = AllCurveQH.Find(x => x.IsDispCurve) == null ? false : true;
|
}
|
|
if (AllCurveQE != null && AllCurveQE.Count > 0)
|
{
|
isHaveCurveQE = AllCurveQE.Find(x => x.IsDispCurve) == null ? false : true;
|
}
|
if (AllCurveQP != null && AllCurveQP.Count > 0)
|
{
|
isHaveCurveQP = AllCurveQP.Find(x => x.IsDispCurve) == null ? false : true;
|
}
|
if (AllCurveNPSH != null && AllCurveNPSH.Count > 0)
|
{
|
isHaveCurveNPSH = AllCurveNPSH.Find(x => x.IsDispCurve) == null ? false : true;
|
}
|
|
this.QEAxisY.Visibility = isHaveCurveQE ? DefaultBoolean.True : DefaultBoolean.False;
|
this.QPAxisY.Visibility = isHaveCurveQP ? DefaultBoolean.True : DefaultBoolean.False;
|
this.NPSHAxisY.Visibility = isHaveCurveNPSH ? DefaultBoolean.True : DefaultBoolean.False;
|
|
if (!isHaveCurveQE)
|
this.QEAxisY.GridLines.Visible = false;
|
if (!isHaveCurveQP)
|
this.QPAxisY.GridLines.Visible = false;
|
if (!isHaveCurveNPSH)
|
this.NPSHAxisY.GridLines.Visible = false;
|
|
if (_chartPanelStyle == TProduct.Model.eChartDiagramPanelStyle.Whole)
|
{
|
this.bottomChartDiagram.Visibility = ChartElementVisibility.Hidden;
|
|
this.QPAxisY.Title.Alignment = StringAlignment.Near;
|
this.NPSHAxisY.Title.Alignment = StringAlignment.Near;
|
|
this.QHAxisY.GridLines.Visible = false;
|
this.QEAxisY.GridLines.Visible = false;
|
this.QPAxisY.GridLines.Visible = false;
|
this.NPSHAxisY.GridLines.Visible = false;
|
}
|
else
|
{
|
this.QHAxisY.GridLines.Visible = true;
|
this.QPAxisY.Title.Alignment = StringAlignment.Center;
|
this.NPSHAxisY.Title.Alignment = StringAlignment.Center;
|
this.QEAxisY.GridLines.Visible = isHaveCurveQE;
|
|
if (isHaveCurveQP || isHaveCurveNPSH)
|
{
|
this.QPAxisY.GridLines.Visible = isHaveCurveQP;
|
this.NPSHAxisY.GridLines.Visible = isHaveCurveNPSH;
|
this.bottomChartDiagram.Visibility = ChartElementVisibility.Visible;
|
}
|
else
|
{
|
this.QPAxisY.Visibility = DefaultBoolean.False;
|
this.NPSHAxisY.Visibility = DefaultBoolean.False;
|
this.bottomChartDiagram.Visibility = ChartElementVisibility.Hidden;
|
}
|
}
|
|
if (_coordinateParas == null)
|
return;
|
|
if (_chartPanelStyle == TProduct.Model.eChartDiagramPanelStyle.Whole)
|
{
|
#region 整个
|
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QHAxisY,
|
_coordinateParas.CoordMinH + _coordinateParas.StartLineNoH * _coordinateParas.CoordSpaceH,
|
_coordinateParas.CoordMinH + _coordinateParas.EndLineNoH * _coordinateParas.CoordSpaceH);
|
|
if (this._coordinate_unitH == Eventech.Model.UnitH.Psi)
|
{
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QHAxisY,
|
_coordinateParas.CoordMinH - 0.01,
|
_coordinateParas.CoordMinH + _coordinateParas.GridNumberY * _coordinateParas.CoordSpaceH + 0.01);
|
}
|
else
|
{
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QHAxisY,
|
_coordinateParas.CoordMinH,
|
_coordinateParas.CoordMinH + _coordinateParas.GridNumberY * _coordinateParas.CoordSpaceH);
|
}
|
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QEAxisY, _coordinateParas.CoordMinE,
|
_coordinateParas.CoordMinE + _coordinateParas.GridNumberY * _coordinateParas.CoordSpaceE);
|
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QPAxisY, _coordinateParas.CoordMinP,
|
_coordinateParas.CoordMinP + _coordinateParas.GridNumberY * _coordinateParas.CoordSpaceP);
|
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(NPSHAxisY, _coordinateParas.CoordMinNPSH,
|
_coordinateParas.CoordMinNPSH + _coordinateParas.GridNumberY * _coordinateParas.CoordSpaceNPSH);
|
|
#endregion 整个
|
}
|
else
|
{
|
#region 上面是扬程,效率, 下面是功率汽蚀
|
|
if (isHaveCurveQE)
|
{
|
var grid_num_h = _coordinateParas.EndLineNoH - _coordinateParas.StartLineNoH;
|
var grid_num_e = _coordinateParas.EndLineNoE - _coordinateParas.StartLineNoE;
|
|
int grid_num_up = Math.Max(grid_num_h, grid_num_e) + _coordinateParas.DislocationNumUp;//多两条
|
|
var max_coor_h = _coordinateParas.CoordMinH + _coordinateParas.EndLineNoH * _coordinateParas.CoordSpaceH;
|
var min_coor_h = max_coor_h - grid_num_up * _coordinateParas.CoordSpaceH;
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QHAxisY, min_coor_h, max_coor_h);
|
|
var min_coor_e = _coordinateParas.CoordMinE + _coordinateParas.StartLineNoE * _coordinateParas.CoordSpaceE;
|
var max_coor_e = min_coor_e + grid_num_up * _coordinateParas.CoordSpaceE;
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QEAxisY, min_coor_e, max_coor_e);
|
|
QEAxisY.Alignment = AxisAlignment.Far;
|
}
|
else
|
{
|
var grid_num_h = _coordinateParas.EndLineNoH - _coordinateParas.StartLineNoH;
|
var grid_num_e = _coordinateParas.EndLineNoE - _coordinateParas.StartLineNoE;
|
|
int grid_num_up = Math.Max(grid_num_h, grid_num_e);//多两条
|
|
var max_coor_h = _coordinateParas.CoordMinH + _coordinateParas.EndLineNoH * _coordinateParas.CoordSpaceH;
|
var min_coor_h = max_coor_h - grid_num_up * _coordinateParas.CoordSpaceH;
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QHAxisY, min_coor_h, max_coor_h);
|
|
var min_coor_e = _coordinateParas.CoordMinE + _coordinateParas.StartLineNoE * _coordinateParas.CoordSpaceE;
|
var max_coor_e = min_coor_e + grid_num_up * _coordinateParas.CoordSpaceE;
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QEAxisY, min_coor_e, max_coor_e);
|
|
QEAxisY.Alignment = AxisAlignment.Far;
|
}
|
|
if (isHaveCurveNPSH)
|
{
|
var grid_num_NPSH = _coordinateParas.EndLineNoNPSH - _coordinateParas.StartLineNoNPSH;
|
var grid_num_p = _coordinateParas.EndLineNoP - _coordinateParas.StartLineNoP;
|
int grid_num_down = Math.Max(grid_num_NPSH, grid_num_p) + 2;
|
|
var max_coor_p = _coordinateParas.CoordMinP + _coordinateParas.EndLineNoP * _coordinateParas.CoordSpaceP;
|
var min_coor_p = max_coor_p - grid_num_down * _coordinateParas.CoordSpaceP;
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QPAxisY, min_coor_p, max_coor_p);
|
|
var min_coor_NPSH = _coordinateParas.CoordMinNPSH + _coordinateParas.StartLineNoNPSH * _coordinateParas.CoordSpaceNPSH;
|
var max_coor_NPSH = min_coor_NPSH + grid_num_down * _coordinateParas.CoordSpaceNPSH;
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(NPSHAxisY, min_coor_NPSH, max_coor_NPSH);
|
}
|
else
|
{
|
var grid_num_NPSH = _coordinateParas.EndLineNoNPSH - _coordinateParas.StartLineNoNPSH;
|
var grid_num_p = _coordinateParas.EndLineNoP - _coordinateParas.StartLineNoP;
|
int grid_num_down = Math.Max(grid_num_NPSH, grid_num_p);
|
|
var min_coor_p = _coordinateParas.CoordMinP + _coordinateParas.StartLineNoP * _coordinateParas.CoordSpaceP;
|
var max_coor_p = min_coor_p + grid_num_down * _coordinateParas.CoordSpaceP;
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(QPAxisY, min_coor_p, max_coor_p);
|
|
var min_coor_NPSH = _coordinateParas.CoordMinNPSH + _coordinateParas.StartLineNoNPSH * _coordinateParas.CoordSpaceNPSH;
|
var max_coor_NPSH = min_coor_NPSH + grid_num_down * _coordinateParas.CoordSpaceNPSH;
|
TProduct.WinFrmUI.TPump.XtraChartHelper.SetAxisRange(NPSHAxisY, min_coor_NPSH, max_coor_NPSH);
|
}
|
|
NPSHAxisY.Alignment = AxisAlignment.Far;
|
QPAxisY.Alignment = AxisAlignment.Near;
|
|
#endregion 上面是扬程,效率, 下面是功率汽蚀
|
}
|
}
|
|
#endregion 曲线分开放菜单
|
|
#region 设置曲线显示
|
|
//是否显示
|
private void DispCurveMenuItem_Click(object sender, EventArgs e)
|
{
|
var senderMenu = sender as ToolStripMenuItem;
|
if (senderMenu == null)
|
return;
|
bool isDispCurve = !senderMenu.Checked;
|
var tag = senderMenu.Tag;
|
if (tag == null)
|
return;
|
senderMenu.Checked = isDispCurve;
|
switch (tag.ToString())
|
{
|
case "FeatCurveQH":
|
for (int iExcelCol = this.chartControl1.SeriesSerializable.Count() - 1; iExcelCol > 0; iExcelCol--)
|
{
|
var modelSeries = this.chartControl1.Series[iExcelCol];
|
if (modelSeries.Name.StartsWith("SeriesQH"))
|
{
|
//var viewQHsimu = modelSeries.View as DevExpress.XtraCharts.SplineSeriesView;
|
modelSeries.Visible = isDispCurve;
|
}
|
}
|
break;
|
|
case "FeatCurveQE":
|
if (AllCurveQE == null || AllCurveQE.Count() == 0)
|
return;
|
|
foreach (var c in AllCurveQE)
|
{
|
var series = SeriesGuidDict[c.CurveID];
|
series.Visible = isDispCurve;
|
c.IsDispCurve = isDispCurve;
|
}
|
|
for (int iExcelCol = this.chartControl1.SeriesSerializable.Count() - 1; iExcelCol > 0; iExcelCol--)
|
{
|
var modelSeries = this.chartControl1.Series[iExcelCol];
|
if (modelSeries.Name.StartsWith("SeriesQE"))
|
{
|
if (isDispCurve)
|
this.QEAxisY.Visibility = DefaultBoolean.True;
|
|
//var viewQHsimu = modelSeries.View as DevExpress.XtraCharts.SplineSeriesView;
|
modelSeries.Visible = isDispCurve;
|
}
|
}
|
break;
|
|
case "FeatCurveQP":
|
if (AllCurveQP == null || AllCurveQP.Count() == 0)
|
return;
|
|
foreach (var c in AllCurveQP)
|
{
|
var series = SeriesGuidDict[c.CurveID];
|
series.Visible = isDispCurve;
|
c.IsDispCurve = isDispCurve;
|
}
|
|
for (int iExcelCol = this.chartControl1.SeriesSerializable.Count() - 1; iExcelCol > 0; iExcelCol--)
|
{
|
var modelSeries = this.chartControl1.Series[iExcelCol];
|
if (modelSeries.Name.StartsWith("SeriesQP"))
|
{
|
if (isDispCurve)
|
this.QPAxisY.Visibility = DefaultBoolean.True;
|
//var viewQHsimu = modelSeries.View as DevExpress.XtraCharts.SplineSeriesView;
|
modelSeries.Visible = isDispCurve;
|
}
|
}
|
break;
|
|
case "FeatCurveNPSH":
|
if (this.AllCurveNPSH == null || AllCurveNPSH.Count() == 0)
|
return;
|
|
foreach (var c in AllCurveNPSH)
|
{
|
var series = SeriesGuidDict[c.CurveID];
|
series.Visible = isDispCurve;
|
c.IsDispCurve = isDispCurve;
|
}
|
|
for (int iExcelCol = this.chartControl1.SeriesSerializable.Count() - 1; iExcelCol > 0; iExcelCol--)
|
{
|
var modelSeries = this.chartControl1.Series[iExcelCol];
|
if (modelSeries.Name.StartsWith("SeriesNPSH"))
|
{
|
if (isDispCurve)
|
this.NPSHAxisY.Visibility = DefaultBoolean.True;
|
|
//var viewQHsimu = modelSeries.View as DevExpress.XtraCharts.SplineSeriesView;
|
modelSeries.Visible = isDispCurve;
|
}
|
}
|
break;
|
}
|
|
SetChartCurveStyle();
|
}
|
|
//
|
public void SetCurveDisp(Guid id, bool isDisp)
|
{
|
var curve = (from x in AllCurveQH where x.CurveID == id select x).FirstOrDefault();
|
if (curve != null)
|
{
|
curve.IsDispCurve = isDisp;
|
}
|
|
curve = (from x in AllCurveQE where x.CurveID == id select x).FirstOrDefault();
|
if (curve != null)
|
{
|
curve.IsDispCurve = isDisp;
|
}
|
|
curve = (from x in AllCurveQP where x.CurveID == id select x).FirstOrDefault();
|
if (curve != null)
|
{
|
curve.IsDispCurve = isDisp;
|
}
|
|
curve = (from x in AllCurveNPSH where x.CurveID == id select x).FirstOrDefault();
|
if (curve != null)
|
{
|
curve.IsDispCurve = isDisp;
|
}
|
this.SetChartPanelStyle();
|
this.SetChartCurveStyle();
|
}
|
|
//
|
public void SetCurveDisp(Eventech.Model.eFeatCurveType type, bool isDisp)
|
{
|
switch (type)
|
{
|
case Eventech.Model.eFeatCurveType.QH:
|
return;
|
|
case Eventech.Model.eFeatCurveType.QE:
|
if (AllCurveQE == null)
|
return;
|
foreach (var c in AllCurveQE)
|
{
|
c.IsDispCurve = isDisp;
|
}
|
break;
|
|
case Eventech.Model.eFeatCurveType.QP:
|
if (AllCurveQP == null)
|
return;
|
foreach (var c in AllCurveQP)
|
{
|
c.IsDispCurve = isDisp;
|
}
|
foreach (var c in AnnoGuidDict_QP)
|
{
|
c.Value.Visible = isDisp;
|
}
|
|
break;
|
|
case Eventech.Model.eFeatCurveType.QNPSH:
|
if (AllCurveNPSH == null)
|
return;
|
foreach (var c in AllCurveNPSH)
|
{
|
c.IsDispCurve = isDisp;
|
}
|
break;
|
}
|
|
this.SetChartPanelStyle();
|
this.SetChartCurveStyle();
|
}
|
|
//更新图表视图
|
public void SetChartCurveStyle()
|
{
|
#region 流量扬程曲线
|
|
if (AllCurveQH != null && AllCurveQH.Count > 0)
|
{
|
foreach (var c in AllCurveQH)
|
{
|
if (SeriesGuidDict.ContainsKey(c.CurveID))
|
{
|
SeriesGuidDict[c.CurveID].Visible = c.IsDispCurve;
|
}
|
}
|
}
|
|
#endregion 流量扬程曲线
|
|
#region 流量效率线
|
|
if (AllCurveQE != null && AllCurveQE.Count > 0)
|
{
|
foreach (var c in AllCurveQE)
|
{
|
if (SeriesGuidDict.ContainsKey(c.CurveID))
|
{
|
var series = SeriesGuidDict[c.CurveID];
|
series.Visible = c.IsDispCurve;
|
if (c.IsDispCurve)
|
{
|
var viewSeries = series.View as DevExpress.XtraCharts.SplineSeriesView;
|
viewSeries.Pane = mainChartDiagram.DefaultPane;
|
}
|
}
|
}
|
}
|
|
#endregion 流量效率线
|
|
#region 流量功率线
|
|
if (AllCurveQP != null && AllCurveQP.Count > 0)
|
{
|
foreach (var c in AllCurveQP)
|
{
|
if (SeriesGuidDict.ContainsKey(c.CurveID))
|
{
|
var series = SeriesGuidDict[c.CurveID];
|
series.Visible = c.IsDispCurve;
|
if (c.IsDispCurve)
|
{
|
var viewSeries = series.View as DevExpress.XtraCharts.SplineSeriesView;
|
if (_chartPanelStyle == TProduct.Model.eChartDiagramPanelStyle.Whole)
|
{//
|
viewSeries.Pane = mainChartDiagram.DefaultPane;
|
}
|
else
|
{//分开放
|
viewSeries.Pane = this.bottomChartDiagram;
|
}
|
}
|
}
|
}
|
}
|
|
#endregion 流量功率线
|
|
#region 流量汽蚀线
|
|
if (AllCurveNPSH != null && AllCurveNPSH.Count > 0)
|
{
|
foreach (var c in AllCurveNPSH)
|
{
|
if (SeriesGuidDict.ContainsKey(c.CurveID))
|
{
|
var series = SeriesGuidDict[c.CurveID];
|
series.Visible = c.IsDispCurve;
|
if (c.IsDispCurve)
|
{
|
var viewSeries = series.View as DevExpress.XtraCharts.SplineSeriesView;
|
if (_chartPanelStyle == TProduct.Model.eChartDiagramPanelStyle.Whole)
|
{//
|
viewSeries.Pane = mainChartDiagram.DefaultPane;
|
}
|
else
|
{//分开放
|
viewSeries.Pane = this.bottomChartDiagram;
|
}
|
}
|
}
|
}
|
}
|
|
#endregion 流量汽蚀线
|
}
|
|
#endregion 设置曲线显示
|
}
|
}
|