using DevExpress.Utils;
|
using DevExpress.XtraCharts;
|
|
namespace Yw.WinFrmUI.Phart
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public partial class PumpEditChart : DevExpress.XtraEditors.XtraUserControl
|
{
|
public PumpEditChart()
|
{
|
InitializeComponent();
|
InitialChart();
|
this.chartControl1.RuntimeHitTesting = true;
|
}
|
|
#region Private Variable
|
|
private XYDiagram _diagram;
|
private AxisX _axis_x_flow;
|
private AxisY _axis_y_head;
|
private SecondaryAxisY _axis_y_eff, _axis_y_power;
|
|
private Series _series_head, _series_eff, _series_power;
|
private Series _series_head_pt, _series_eff_pt, _series_power_pt;
|
|
|
private List<Yw.Geometry.Point2d> _def_qh_pt_list;
|
private List<Yw.Geometry.Point2d> _def_qe_pt_list;
|
private List<Yw.Geometry.Point2d> _def_qp_pt_list;
|
|
|
private List<Yw.Geometry.Point2d> _qh_pt_list;
|
private List<Yw.Geometry.Point2d> _qe_pt_list;
|
private List<Yw.Geometry.Point2d> _qp_pt_list;
|
|
private PumpCoordinate _coordinate;
|
private bool _initial_data = false;
|
|
private Yw.Pump.eCurveType _edit_curve_type = Yw.Pump.eCurveType.QH;
|
|
#endregion
|
|
#region Public Evnet
|
|
public event Action<PumpCoordinate> OnCurveCoordinateChanged;
|
|
public event Action<Yw.Pump.eCurveType, List<Yw.Geometry.Point2d>> OnDefinePointChanged;
|
|
#endregion
|
|
#region Initial
|
|
/// <summary>
|
/// 初始化图表
|
/// </summary>
|
private void InitialChart()
|
{
|
this.chartControl1.SetChartDisplay();
|
this.chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
this.chartControl1.SeriesSelectionMode = SeriesSelectionMode.Point;
|
this.chartControl1.SelectionMode = ElementSelectionMode.Single;
|
|
_diagram = (XYDiagram)chartControl1.Diagram;
|
|
|
_axis_x_flow = _diagram.AxisX;
|
_axis_x_flow.SetAxisXQDisplay();
|
_axis_y_head = _diagram.AxisY;
|
_axis_y_head.SetAxisYQHDisplay();
|
_axis_y_eff = _diagram.SecondaryAxesY.GetAxisByName("AxisYQE");
|
_axis_y_eff.SetSecondaryAxisYQEDisplay();
|
_axis_y_power = _diagram.SecondaryAxesY.GetAxisByName("AxisYQP");
|
_axis_y_power.SetSecondaryAxisYQPDisplay();
|
|
|
_series_head = this.chartControl1.GetSeriesByName("SeriesCurveQH");
|
_series_head.SetCurveQHDisplay();
|
_series_head.Tag = (int)Yw.Pump.eCurveType.QH;
|
|
_series_eff = this.chartControl1.GetSeriesByName("SeriesCurveQE");
|
_series_eff.SetCurveQEDisplay();
|
_series_eff.Tag = (int)Yw.Pump.eCurveType.QE;
|
|
_series_power = this.chartControl1.GetSeriesByName("SeriesCurveQP");
|
_series_power.SetCurveQPDisplay();
|
_series_power.Tag = (int)Yw.Pump.eCurveType.QP;
|
|
|
_series_head_pt = this.chartControl1.GetSeriesByName("SeriesPointQH");
|
_series_head_pt.SetPointQHDisplay();
|
_series_head_pt.Tag = (int)Yw.Pump.eCurveType.QH;
|
|
_series_eff_pt = this.chartControl1.GetSeriesByName("SeriesPointQE");
|
_series_eff_pt.SetPointQEDisplay();
|
_series_eff_pt.Tag = (int)Yw.Pump.eCurveType.QE;
|
|
_series_power_pt = this.chartControl1.GetSeriesByName("SeriesPointQP");
|
_series_power_pt.SetPointQPDisplay();
|
_series_power_pt.Tag = (int)Yw.Pump.eCurveType.QP;
|
|
|
_axis_x_flow.Visibility = DefaultBoolean.False;
|
_axis_x_flow.GridLines.Visible = false;
|
_axis_y_head.Visibility = DefaultBoolean.False;
|
_axis_y_head.GridLines.Visible = false;
|
_axis_y_eff.Visibility = DefaultBoolean.False;
|
_axis_y_eff.GridLines.Visible = false;
|
_axis_y_power.Visibility = DefaultBoolean.False;
|
_axis_y_power.GridLines.Visible = false;
|
|
|
_series_head_pt.Visible = false;
|
_series_eff_pt.Visible = false;
|
_series_power_pt.Visible = false;
|
|
|
this.chartControl1.SetChartMonoColorDisplay();
|
|
|
this.chartControl1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseMove);
|
this.chartControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseUp);
|
this.chartControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseDown);
|
this.chartControl1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.chartControl1_KeyUp);
|
}
|
|
|
|
/// <summary>
|
/// 初始化图表数据
|
/// </summary>
|
public void InitialChartData()
|
{
|
_initial_data = false;
|
|
_qh_pt_list = null;
|
_qe_pt_list = null;
|
_qp_pt_list = null;
|
|
_def_qh_pt_list = null;
|
_def_qe_pt_list = null;
|
_def_qp_pt_list = null;
|
|
_coordinate = null;
|
|
UpdateChart(false);
|
}
|
|
#endregion
|
|
#region SetBindingData
|
|
/// <summary>
|
/// 绑定数据(目前没有定义点)
|
/// </summary>
|
/// <param name="qh"></param>
|
/// <param name="qe"></param>
|
/// <param name="qp"></param>
|
/// <param name="calc_coordinate"></param>
|
public void SetBindingData(Yw.Geometry.CubicSpline2d qh,
|
Yw.Geometry.CubicSpline2d qe,
|
Yw.Geometry.CubicSpline2d qp,
|
string coordinate_paras = null,
|
bool calc_coordinate = false)
|
{
|
if (qh == null)
|
{
|
InitialChartData();
|
return;
|
}
|
|
List<Yw.Geometry.Point2d> qh_pt_list, qe_pt_list = null, qp_pt_list = null;
|
|
qh_pt_list = qh.GetPointList(100);
|
|
if (qe != null)
|
qe_pt_list = qe.GetPointList(100);
|
|
if (qp != null)
|
qp_pt_list = qp.GetPointList(100);
|
|
|
SetBindingData(qh_pt_list, qe_pt_list, qp_pt_list, qh_pt_list, qe_pt_list, qp_pt_list, coordinate_paras, calc_coordinate);
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
/// <param name="def_qh_pt_list"></param>
|
/// <param name="def_qe_pt_list"></param>
|
/// <param name="def_qp_pt_list"></param>
|
/// <param name="coordinate_paras"></param>
|
/// <param name="calc_coordinate"></param>
|
public void SetBindingData(
|
List<Yw.Geometry.Point2d> qh_pt_list,
|
List<Yw.Geometry.Point2d> qe_pt_list,
|
List<Yw.Geometry.Point2d> qp_pt_list,
|
List<Yw.Geometry.Point2d> def_qh_pt_list,
|
List<Yw.Geometry.Point2d> def_qe_pt_list,
|
List<Yw.Geometry.Point2d> def_qp_pt_list,
|
string coordinate_paras = null,
|
bool calc_coordinate = false)
|
{
|
if (qh_pt_list == null || !qh_pt_list.Any())
|
{
|
InitialChartData();
|
return;
|
}
|
_initial_data = true;
|
|
|
_qh_pt_list = qh_pt_list;
|
_qe_pt_list = qe_pt_list;
|
_qp_pt_list = qp_pt_list;
|
|
_def_qh_pt_list = def_qh_pt_list;
|
_def_qe_pt_list = def_qe_pt_list;
|
_def_qp_pt_list = def_qp_pt_list;
|
|
_coordinate = PumpCoordinate.ToModel(coordinate_paras);
|
|
UpdateChart(calc_coordinate);
|
}
|
|
#endregion
|
|
#region Update
|
|
|
/// <summary>
|
/// 更新曲线
|
/// </summary>
|
/// <param name="curve_type"></param>
|
/// <param name="fit_point_list"></param>
|
public void UpdateCurve(Yw.Pump.eCurveType curve_type, List<Yw.Geometry.Point2d> fit_point_list)
|
{
|
if (fit_point_list == null || !fit_point_list.Any())
|
return;
|
_edit_curve_type = curve_type;
|
switch (_edit_curve_type)
|
{
|
case Yw.Pump.eCurveType.QH:
|
{
|
_def_qh_pt_list = fit_point_list;
|
_qh_pt_list = fit_point_list.GetFitPointList();
|
_axis_y_head.SetAxisYQHColorDisplay(_series_head, _series_head_pt, true);
|
_axis_y_eff.SetSecondaryAxisYQEColorDisplay(_series_eff, _series_eff_pt, false);
|
_axis_y_power.SetSecondaryAxisYQPColorDisplay(_series_power, _series_power_pt, false);
|
}
|
break;
|
case Yw.Pump.eCurveType.QE:
|
{
|
_def_qe_pt_list = fit_point_list;
|
_qe_pt_list = fit_point_list.GetFitPointList();
|
_axis_y_head.SetAxisYQHColorDisplay(_series_head, _series_head_pt, false);
|
_axis_y_eff.SetSecondaryAxisYQEColorDisplay(_series_eff, _series_eff_pt, true);
|
_axis_y_power.SetSecondaryAxisYQPColorDisplay(_series_power, _series_power_pt, false);
|
}
|
break;
|
case Yw.Pump.eCurveType.QP:
|
{
|
_def_qp_pt_list = fit_point_list;
|
_qp_pt_list = fit_point_list.GetFitPointList();
|
_axis_y_head.SetAxisYQHColorDisplay(_series_head, _series_head_pt, false);
|
_axis_y_eff.SetSecondaryAxisYQEColorDisplay(_series_eff, _series_eff_pt, false);
|
_axis_y_power.SetSecondaryAxisYQPColorDisplay(_series_power, _series_power_pt, true);
|
}
|
break;
|
default:
|
break;
|
}
|
|
UpdateChart(true);
|
}
|
|
/// <summary>
|
/// 更新图表
|
/// </summary>
|
/// <param name="calc_coordinate">计算坐标</param>
|
public void UpdateChart(bool calc_coordinate = false)
|
{
|
if (calc_coordinate || _coordinate == null)
|
{
|
//不强迫计算,就用上次更新的坐标系
|
CalcCoordinate();
|
}
|
|
CalcChartAxis();
|
|
CalcSeries();
|
}
|
|
#endregion
|
|
#region Calc
|
|
/// <summary>
|
/// 计算坐标
|
/// </summary>
|
public void CalcCoordinate()
|
{
|
if (_qh_pt_list == null || _qh_pt_list.Count < 4)
|
{
|
//设置成白板坐标
|
_coordinate = new PumpCoordinate();
|
_coordinate.GridNumberX = 30;
|
_coordinate.GridNumberY = 16;
|
//显示的坐标线号
|
_coordinate.StartLineNoH = 10;
|
_coordinate.EndLineNoH = 15;
|
_coordinate.StartLineNoE = 0;
|
_coordinate.EndLineNoE = 10;
|
_coordinate.StartLineNoP = 2;
|
_coordinate.EndLineNoP = 9;
|
//坐标最小值和间隔
|
_coordinate.CoordMinQ = 0; _coordinate.CoordSpaceQ = 1000;
|
_coordinate.CoordMinH = 10; _coordinate.CoordSpaceH = 100;
|
_coordinate.CoordMinE = 0; _coordinate.CoordSpaceE = 100;
|
_coordinate.CoordMinP = 10; _coordinate.CoordSpaceP = 100;
|
return;
|
}
|
|
_coordinate = PumpCoordinate.CalcCoordinate(_qh_pt_list, _qe_pt_list, _qp_pt_list);
|
}
|
|
/// <summary>
|
/// 计算图表轴
|
/// </summary>
|
public void CalcChartAxis()
|
{
|
if (_coordinate == null)
|
{
|
_axis_x_flow.Visibility = DefaultBoolean.False;
|
_axis_x_flow.GridLines.Visible = false;
|
_axis_y_head.Visibility = DefaultBoolean.False;
|
_axis_y_head.GridLines.Visible = false;
|
_axis_y_eff.Visibility = DefaultBoolean.False;
|
_axis_y_eff.GridLines.Visible = false;
|
_axis_y_power.Visibility = DefaultBoolean.False;
|
_axis_y_power.GridLines.Visible = false;
|
return;
|
}
|
|
//流量
|
if (_qh_pt_list != null)
|
{
|
//计算刻度
|
var labels = new List<CustomAxisLabel>();
|
var disQ = _coordinate.CoordMinQ;
|
for (int i = 0; i < _coordinate.GridNumberX + 1; i++)
|
{
|
labels.Add(new CustomAxisLabel(disQ.ToString("N0"), disQ));
|
disQ = disQ + _coordinate.CoordSpaceQ;
|
}
|
|
//坐标刻度
|
_axis_x_flow.CustomLabels.Clear();
|
_axis_x_flow.CustomLabels.AddRange(labels.ToArray());
|
_axis_x_flow.Visibility = DefaultBoolean.True;
|
_axis_x_flow.GridLines.Visible = true;
|
_axis_x_flow.SetAxisRange(_coordinate.CoordMinQ, _coordinate.CoordMinQ + _coordinate.GridNumberX * _coordinate.CoordSpaceQ);
|
}
|
|
//扬程
|
if (_qh_pt_list != null)
|
{
|
//计算刻度
|
var labels = new List<CustomAxisLabel>();
|
var display_head = _coordinate.CoordMinH + _coordinate.CoordSpaceH * _coordinate.StartLineNoH;
|
for (int i = _coordinate.StartLineNoH; i < _coordinate.EndLineNoH + 1; i++)
|
{
|
labels.Add(new CustomAxisLabel(display_head.ToString(), display_head));
|
display_head = display_head + _coordinate.CoordSpaceH;
|
}
|
|
_axis_y_head.CustomLabels.Clear();
|
_axis_y_head.CustomLabels.AddRange(labels.ToArray());
|
_axis_y_head.Visibility = DefaultBoolean.True;
|
_axis_y_head.GridLines.Visible = true;
|
}
|
|
//效率
|
if (_qe_pt_list != null)
|
{
|
//计算刻度
|
var labels = new List<CustomAxisLabel>();
|
var display_eff = _coordinate.CoordMinE + _coordinate.CoordSpaceE * _coordinate.StartLineNoE;
|
for (int i = _coordinate.StartLineNoE; i < _coordinate.EndLineNoE + 1; i++)
|
{
|
labels.Add(new CustomAxisLabel(display_eff.ToString(), display_eff));
|
display_eff = display_eff + _coordinate.CoordSpaceE;
|
}
|
|
_axis_y_eff.CustomLabels.Clear();
|
_axis_y_eff.CustomLabels.AddRange(labels.ToArray());
|
_axis_y_eff.Visibility = DefaultBoolean.True;
|
_axis_y_eff.GridLines.Visible = true;
|
}
|
|
//功率
|
if (_qp_pt_list != null)
|
{
|
//计算刻度
|
var labels = new List<CustomAxisLabel>();
|
double display_power = _coordinate.CoordMinP + _coordinate.CoordSpaceP * _coordinate.StartLineNoP;
|
for (int i = _coordinate.StartLineNoP; i < _coordinate.EndLineNoP + 1; i++)
|
{
|
labels.Add(new CustomAxisLabel(display_power.ToString(), display_power));
|
display_power = display_power + _coordinate.CoordSpaceP;
|
}
|
|
_axis_y_power.CustomLabels.Clear();
|
_axis_y_power.CustomLabels.AddRange(labels.ToArray());
|
_axis_y_power.Visibility = DefaultBoolean.True;
|
_axis_y_power.GridLines.Visible = true;
|
}
|
|
|
_axis_x_flow.SetAxisRange(_coordinate.CoordMinQ, _coordinate.CoordMinQ + _coordinate.GridNumberX * _coordinate.CoordSpaceQ);
|
if (_qe_pt_list == null && _qp_pt_list == null)
|
{
|
_axis_y_head.SetAxisRange(_coordinate.DispMinH(), _coordinate.DispMaxH());
|
}
|
else
|
{
|
_axis_y_head.SetAxisRange(_coordinate.CoordMinH, _coordinate.CoordMinH + _coordinate.GridNumberY * _coordinate.CoordSpaceH);
|
}
|
_axis_y_eff.SetAxisRange(_coordinate.CoordMinE, _coordinate.CoordMinE + _coordinate.GridNumberY * _coordinate.CoordSpaceE);
|
_axis_y_power.SetAxisRange(_coordinate.CoordMinP, _coordinate.CoordMinP + _coordinate.GridNumberY * _coordinate.CoordSpaceP);
|
//_axisYQE.SetAxisRange(_coordinate.CoordMinE-_coordinate.CoordMinP, _coordinate.CoordMinE + _coordinate.GridNumberY * _coordinate.CoordSpaceE);
|
//_axisYQP.SetAxisRange(_coordinate.DispMinP(), _coordinate.CoordMinP + _coordinate.GridNumberY * _coordinate.CoordSpaceP);
|
}
|
|
/// <summary>
|
/// 计算系列
|
/// </summary>
|
public void CalcSeries()
|
{
|
if (_qh_pt_list != null && _qh_pt_list.Count > 3)
|
{
|
_series_head.Visible = true;
|
_series_head.Points.Clear();
|
foreach (var curvePoint in _qh_pt_list)
|
{
|
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
|
_series_head.Points.Add(seriesPoint);
|
}
|
}
|
else
|
{
|
_series_head.Points.Clear();
|
_series_head.Visible = false;
|
}
|
|
if (_qe_pt_list != null && _qe_pt_list.Count > 3)
|
{
|
_series_eff.Visible = true;
|
_series_eff.Points.Clear();
|
foreach (var curvePoint in _qe_pt_list)
|
{
|
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
|
_series_eff.Points.Add(seriesPoint);
|
}
|
}
|
else
|
{
|
_series_eff.Points.Clear();
|
_series_eff.Visible = false;
|
}
|
|
if (_qp_pt_list != null && _qp_pt_list.Count > 3)
|
{
|
_series_power.Visible = true;
|
_series_power.Points.Clear();
|
foreach (var curvePoint in _qp_pt_list)
|
{
|
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
|
_series_power.Points.Add(seriesPoint);
|
}
|
}
|
else
|
{
|
_series_power.Points.Clear();
|
_series_power.Visible = false;
|
}
|
|
if (_def_qh_pt_list != null && _def_qh_pt_list.Any())
|
{
|
_series_head_pt.Points.Clear();
|
for (int i = 0; i < _def_qh_pt_list.Count; i++)
|
{
|
var definePoint = _def_qh_pt_list[i];
|
var seriesPoint = new SeriesPoint(definePoint.X, definePoint.Y);
|
seriesPoint.Tag = i;
|
_series_head_pt.Points.Add(seriesPoint);
|
}
|
_series_head_pt.Visible = true;
|
}
|
else
|
{
|
_series_head_pt.Visible = false;
|
}
|
|
if (_def_qe_pt_list != null && _def_qe_pt_list.Any())
|
{
|
_series_eff_pt.Points.Clear();
|
for (int i = 0; i < _def_qe_pt_list.Count; i++)
|
{
|
var definePoint = _def_qe_pt_list[i];
|
var seriesPoint = new SeriesPoint(definePoint.X, definePoint.Y);
|
seriesPoint.Tag = i;
|
_series_eff_pt.Points.Add(seriesPoint);
|
}
|
_series_eff_pt.Visible = true;
|
}
|
else
|
{
|
_series_eff_pt.Visible = false;
|
}
|
|
if (_def_qp_pt_list != null && _def_qp_pt_list.Any())
|
{
|
_series_power_pt.Points.Clear();
|
for (int i = 0; i < _def_qp_pt_list.Count; i++)
|
{
|
var definePoint = _def_qp_pt_list[i];
|
var seriesPoint = new SeriesPoint(definePoint.X, definePoint.Y);
|
seriesPoint.Tag = i;
|
_series_power_pt.Points.Add(seriesPoint);
|
}
|
_series_power_pt.Visible = true;
|
}
|
else
|
{
|
_series_power_pt.Visible = false;
|
}
|
}
|
|
#endregion
|
|
#region ChartEvent
|
|
private bool _mouseMode = false;//鼠标模式
|
private SeriesPoint _pickPoint = null;// 选中点
|
private void chartControl1_MouseDown(object sender, MouseEventArgs e)
|
{
|
if (!_initial_data)
|
return;
|
var hitInfo = chartControl1.CalcHitInfo(e.Location);
|
if (e.Button == MouseButtons.Left)
|
{
|
if (hitInfo.InSeriesPoint)
|
{
|
if ((int)hitInfo.Series.Tag != (int)_edit_curve_type)
|
{
|
_pickPoint = null;
|
return;
|
}
|
_pickPoint = hitInfo.SeriesPoint;
|
}
|
else
|
{
|
_pickPoint = null;
|
}
|
}
|
else if (e.Button == MouseButtons.Right)
|
{
|
_pickPoint = null;
|
this.popMenuChart.ShowPopup(MousePosition);
|
}
|
}
|
private void chartControl1_MouseMove(object sender, MouseEventArgs e)
|
{
|
if (!_initial_data)
|
return;
|
if (!_mouseMode)
|
return;
|
if (_pickPoint == null)
|
return;
|
var diagramCoordinates = _diagram.PointToDiagram(e.Location);
|
switch (_edit_curve_type)
|
{
|
case Yw.Pump.eCurveType.QH:
|
{
|
var axisValue = diagramCoordinates.GetAxisValue(_axis_y_head);
|
if (axisValue == null)
|
return;
|
_pickPoint.Values[0] = axisValue.NumericalValue;
|
_pickPoint.NumericalArgument = diagramCoordinates.NumericalArgument;
|
}
|
break;
|
case Yw.Pump.eCurveType.QE:
|
{
|
var axisValue = diagramCoordinates.GetAxisValue(_axis_y_eff);
|
if (axisValue == null)
|
return;
|
_pickPoint.Values[0] = axisValue.NumericalValue;
|
_pickPoint.NumericalArgument = diagramCoordinates.NumericalArgument;
|
}
|
break;
|
case Yw.Pump.eCurveType.QP:
|
{
|
var axisValue = diagramCoordinates.GetAxisValue(_axis_y_power);
|
if (axisValue == null)
|
return;
|
_pickPoint.Values[0] = axisValue.NumericalValue;
|
_pickPoint.NumericalArgument = diagramCoordinates.NumericalArgument;
|
}
|
break;
|
}
|
}
|
private void chartControl1_MouseUp(object sender, MouseEventArgs e)
|
{
|
if (!_initial_data)
|
return;
|
if (_mouseMode)
|
{
|
_pickPoint = null;
|
ChartUpdateCurve();
|
}
|
}
|
private void chartControl1_KeyUp(object sender, KeyEventArgs e)
|
{
|
if (!_initial_data)
|
return;
|
if (_pickPoint == null)
|
return;
|
double spaceX = _coordinate.CoordSpaceQ / 50;
|
double spaceY = 0;
|
switch (_edit_curve_type)
|
{
|
case Yw.Pump.eCurveType.QH:
|
{
|
spaceY = _coordinate.CoordSpaceH / 50;
|
}
|
break;
|
case Yw.Pump.eCurveType.QE:
|
{
|
spaceY = _coordinate.CoordSpaceE / 50;
|
}
|
break;
|
case Yw.Pump.eCurveType.QP:
|
{
|
spaceY = _coordinate.CoordSpaceP / 50;
|
}
|
break;
|
default:
|
break;
|
}
|
double x = _pickPoint.NumericalArgument;
|
double y = _pickPoint.Values[0];
|
if (e.KeyCode == Keys.Up)
|
{
|
y += spaceY;
|
}
|
else if (e.KeyCode == Keys.Down)
|
{
|
y -= spaceY;
|
}
|
else if (e.KeyCode == Keys.Left)
|
{
|
x -= spaceX;
|
}
|
else if (e.KeyCode == Keys.Right)
|
{
|
x += spaceX;
|
}
|
_pickPoint.Values[0] = y;
|
_pickPoint.NumericalArgument = x;
|
ChartUpdateCurve();
|
}
|
|
/// <summary>
|
/// 更新曲线
|
/// </summary>
|
private void ChartUpdateCurve()
|
{
|
switch (_edit_curve_type)
|
{
|
case Yw.Pump.eCurveType.QH:
|
{
|
_def_qh_pt_list = _series_head_pt.Points.Select(x => new Yw.Geometry.Point2d(x.ArgumentX.NumericalArgument, x.NumericalValue)).ToList();
|
_qh_pt_list = _def_qh_pt_list.GetFitPointList();
|
|
_series_head.Points.Clear();
|
foreach (var curvePoint in _qh_pt_list)
|
{
|
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
|
_series_head.Points.Add(seriesPoint);
|
}
|
OnDefinePointChanged?.Invoke(_edit_curve_type, _def_qh_pt_list);
|
}
|
break;
|
case Yw.Pump.eCurveType.QE:
|
{
|
_def_qe_pt_list = _series_eff_pt.Points.Select(x => new Yw.Geometry.Point2d(x.ArgumentX.NumericalArgument, x.NumericalValue)).ToList();
|
_qe_pt_list = _def_qe_pt_list.GetFitPointList();
|
|
_series_eff.Points.Clear();
|
foreach (var curvePoint in _qe_pt_list)
|
{
|
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
|
_series_eff.Points.Add(seriesPoint);
|
}
|
OnDefinePointChanged?.Invoke(_edit_curve_type, _def_qe_pt_list);
|
}
|
break;
|
case Yw.Pump.eCurveType.QP:
|
{
|
_def_qp_pt_list = _series_power_pt.Points.Select(x => new Yw.Geometry.Point2d(x.ArgumentX.NumericalArgument, x.NumericalValue)).ToList();
|
_qp_pt_list = _def_qp_pt_list.GetFitPointList();
|
|
_series_power.Points.Clear();
|
foreach (var curvePoint in _qp_pt_list)
|
{
|
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
|
_series_power.Points.Add(seriesPoint);
|
}
|
OnDefinePointChanged?.Invoke(_edit_curve_type, _def_qp_pt_list);
|
}
|
break;
|
}
|
|
CalcChartAxis();
|
}
|
|
#endregion
|
|
#region Right Click Menu
|
|
#region Event
|
|
|
private void barCekChartEditMode_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
_mouseMode = this.barCekChartEditMode.Checked;
|
var text = "修改模式:鼠标 / 键盘☑";
|
if (_mouseMode)
|
{
|
text = "修改模式:鼠标☑ / 键盘";
|
}
|
_diagram.DefaultPane.Title.Text = text;
|
}
|
|
private void BarBtnCalcCoordinate_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
CalcCoordinate();
|
CalcChartAxis();
|
}
|
private void barCekLegendVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
SetLegendVisible(this.barCekLegendVisible.Checked);
|
}
|
|
private void barCekSetAxisNameVisible_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
SetAxisNameVisible(this.barCekSetAxisNameVisible.Checked);
|
}
|
|
|
|
private void barBtnSetChartAxis_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
SetChartAxis();
|
}
|
|
#endregion
|
|
|
/// <summary>
|
/// 设置图例显示
|
/// </summary>
|
public void SetLegendVisible(bool visible)
|
{
|
this.chartControl1.Legend.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
|
}
|
|
/// <summary>
|
/// 设置轴名称显示
|
/// </summary>
|
public void SetAxisNameVisible(bool visible)
|
{
|
_axis_x_flow.Title.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
|
_axis_y_head.Title.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
|
_axis_y_eff.Title.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
|
_axis_y_power.Title.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
|
}
|
|
|
/// <summary>
|
/// 设置坐标轴
|
/// </summary>
|
public void SetChartAxis()
|
{
|
var dlg = new PumpChartCoordinateDlg();
|
var onlyQH = _qe_pt_list == null && _qp_pt_list == null;
|
dlg.SetBindingData(_coordinate, onlyQH);
|
dlg.OnChangedCoord += (rhs) =>
|
{
|
_coordinate = rhs;
|
CalcChartAxis();
|
this.OnCurveCoordinateChanged?.Invoke(_coordinate);
|
};
|
dlg.ShowDialog();
|
}
|
|
|
#endregion
|
}
|
}
|