using DevExpress.Utils;
using DevExpress.XtraCharts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace IStation.WinFrmUI.Curve
{
///
///
///
public partial class CurveExpressEditChart : DevExpress.XtraEditors.XtraUserControl
{
public CurveExpressEditChart()
{
InitializeComponent();
InitialChart();
this.chartControl1.RuntimeHitTesting = true;
}
#region Private Variable
private XYDiagram _mainChartDiagram;
private AxisX _axisXQ;
private AxisY _axisYQH;
private SecondaryAxisY _axisYQE, _axisYQP;
private Series _seriesCurveQH, _seriesCurveQE, _seriesCurveQP;
private Series _seriesPointQH, _seriesPointQE, _seriesPointQP;
Model.eCurveFitType _fitTypeQH = Model.eCurveFitType.CubicCurve;
Model.eCurveFitType _fitTypeQE = Model.eCurveFitType.CubicCurve;
Model.eCurveFitType _fitTypeQP = Model.eCurveFitType.CubicCurve;
private List _definePointsQH;
private List _definePointsQE;
private List _definePointsQP;
private List _curvePointsQH;
private List _curvePointsQE;
private List _curvePointsQP;
private Model.CurveCoordinateParas _coordinateParas;
private bool _initialData = false;
private Model.eFeatCurveType _editCurveType = Model.eFeatCurveType.QH;
#endregion
#region Public Evnet
public event Action OnCurveCoordinateParasChanged;
public event Action> OnDefinePointChanged;
#endregion
#region Initial
///
/// 初始化图表
///
private void InitialChart()
{
this.chartControl1.SetChartDisplay();
this.chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
this.chartControl1.SeriesSelectionMode = SeriesSelectionMode.Point;
this.chartControl1.SelectionMode = ElementSelectionMode.Single;
_mainChartDiagram = (XYDiagram)chartControl1.Diagram;
_axisXQ = _mainChartDiagram.AxisX;
_axisXQ.SetAxisXQDisplay();
_axisYQH = _mainChartDiagram.AxisY;
_axisYQH.SetAxisYQHDisplay();
_axisYQE = _mainChartDiagram.SecondaryAxesY.GetAxisByName("AxisYQE");
_axisYQE.SetSecondaryAxisYQEDisplay();
_axisYQP = _mainChartDiagram.SecondaryAxesY.GetAxisByName("AxisYQP");
_axisYQP.SetSecondaryAxisYQPDisplay();
_seriesCurveQH = this.chartControl1.GetSeriesByName("SeriesCurveQH");
_seriesCurveQH.SetCurveQHDisplay();
_seriesCurveQH.Tag = (int)Model.eFeatCurveType.QH;
_seriesCurveQE = this.chartControl1.GetSeriesByName("SeriesCurveQE");
_seriesCurveQE.SetCurveQEDisplay();
_seriesCurveQE.Tag = (int)Model.eFeatCurveType.QE;
_seriesCurveQP = this.chartControl1.GetSeriesByName("SeriesCurveQP");
_seriesCurveQP.SetCurveQPDisplay();
_seriesCurveQP.Tag = (int)Model.eFeatCurveType.QP;
_seriesPointQH = this.chartControl1.GetSeriesByName("SeriesPointQH");
_seriesPointQH.SetPointQHDisplay();
_seriesPointQH.Tag = (int)Model.eFeatCurveType.QH;
_seriesPointQE = this.chartControl1.GetSeriesByName("SeriesPointQE");
_seriesPointQE.SetPointQEDisplay();
_seriesPointQE.Tag = (int)Model.eFeatCurveType.QE;
_seriesPointQP = this.chartControl1.GetSeriesByName("SeriesPointQP");
_seriesPointQP.SetPointQPDisplay();
_seriesPointQP.Tag = (int)Model.eFeatCurveType.QP;
_axisXQ.Visibility = DefaultBoolean.False;
_axisXQ.GridLines.Visible = false;
_axisYQH.Visibility = DefaultBoolean.False;
_axisYQH.GridLines.Visible = false;
_axisYQE.Visibility = DefaultBoolean.False;
_axisYQE.GridLines.Visible = false;
_axisYQP.Visibility = DefaultBoolean.False;
_axisYQP.GridLines.Visible = false;
_seriesPointQH.Visible = false;
_seriesPointQE.Visible = false;
_seriesPointQP.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);
}
///
/// 初始化图表数据
///
public void InitialChartData()
{
_initialData = false;
_curvePointsQH = null;
_curvePointsQE = null;
_curvePointsQP = null;
_definePointsQH = null;
_definePointsQE = null;
_definePointsQP = null;
_coordinateParas = null;
UpdateChart(false);
}
#endregion
#region SetBindingData
///
/// 绑定数据
///
///
///
///
///
public void SetBindingData(Model.CurveExpress curveQH,
Model.CurveExpress curveQE,
Model.CurveExpress curveQP,
Model.CurveCoordinateParas coordinateParas = null,
bool calcCoordinate = false)
{
if (curveQH == null)
{
InitialChartData();
return;
}
Model.eCurveFitType fitTypeQH = curveQH.FitType,
fitTypeQE = Model.eCurveFitType.CubicCurve,
fitTypeQP = Model.eCurveFitType.CubicCurve;
List qhPoints, qePoints = null, qpPoints = null;
if (curveQH.DefinePoints != null)
qhPoints = curveQH.DefinePoints;
else
qhPoints = curveQH.GetFitPoints(12);
if (curveQE != null)
{
fitTypeQE = curveQE.FitType;
if (curveQE.DefinePoints != null)
qePoints = curveQE.DefinePoints;
else
qePoints = curveQE.GetFitPoints(12);
}
if (curveQP != null)
{
fitTypeQP = curveQP.FitType;
if (curveQP?.DefinePoints != null)
qpPoints = curveQP.DefinePoints;
else
qpPoints = curveQP.GetFitPoints(12);
}
SetBindingData(qhPoints, qePoints, qpPoints, fitTypeQH, fitTypeQE, fitTypeQP, coordinateParas, calcCoordinate);
}
///
/// 绑定数据
///
///
///
///
///
///
public void SetBindingData(List definePointsQH,
List definePointsQE,
List definePointsQP,
Model.eCurveFitType fitTypeQH,
Model.eCurveFitType fitTypeQE,
Model.eCurveFitType fitTypeQP,
Model.CurveCoordinateParas coordinateParas = null,
bool calcCoordinate = false)
{
if (definePointsQH == null)
{
InitialChartData();
return;
}
_initialData = true;
_fitTypeQH = fitTypeQH;
_fitTypeQE = fitTypeQE;
_fitTypeQP = fitTypeQP;
_definePointsQH = definePointsQH;
_definePointsQE = definePointsQE;
_definePointsQP = definePointsQP;
_curvePointsQH = Model.FitCurveHelper.GetFitPoints(definePointsQH, _fitTypeQH);
_curvePointsQE = Model.FitCurveHelper.GetFitPoints(definePointsQE, _fitTypeQE);
_curvePointsQP = Model.FitCurveHelper.GetFitPoints(definePointsQP, _fitTypeQP);
_coordinateParas = coordinateParas;
UpdateChart(calcCoordinate);
}
#endregion
#region Update
///
/// 更新曲线
///
///
///
public void UpdateCurve(Model.eFeatCurveType curveType, List curvePoints)
{
if (curvePoints == null || !curvePoints.Any())
return;
_editCurveType = curveType;
switch (_editCurveType)
{
case Model.eFeatCurveType.QH: UpdateCurve(curveType, _fitTypeQH, curvePoints); break;
case Model.eFeatCurveType.QE: UpdateCurve(curveType, _fitTypeQE, curvePoints); break;
case Model.eFeatCurveType.QP: UpdateCurve(curveType, _fitTypeQP, curvePoints); break;
default:
break;
}
}
///
/// 更新曲线
///
///
///
///
public void UpdateCurve(Model.eFeatCurveType curveType, Model.eCurveFitType fitType, List curvePoints)
{
if (curvePoints == null || !curvePoints.Any())
return;
_editCurveType = curveType;
switch (_editCurveType)
{
case Model.eFeatCurveType.QH:
{
_fitTypeQH = fitType;
_definePointsQH = curvePoints;
_curvePointsQH = Model.FitCurveHelper.GetFitPoints(curvePoints, fitType);
_axisYQH.SetAxisYQHColorDisplay(_seriesCurveQH, _seriesPointQH, true);
_axisYQE.SetSecondaryAxisYQEColorDisplay(_seriesCurveQE, _seriesPointQE, false);
_axisYQP.SetSecondaryAxisYQPColorDisplay(_seriesCurveQP, _seriesPointQP, false);
}
break;
case Model.eFeatCurveType.QE:
{
_fitTypeQE = fitType;
_definePointsQE = curvePoints;
_curvePointsQE = Model.FitCurveHelper.GetFitPoints(curvePoints, fitType);
_axisYQH.SetAxisYQHColorDisplay(_seriesCurveQH, _seriesPointQH, false);
_axisYQE.SetSecondaryAxisYQEColorDisplay(_seriesCurveQE, _seriesPointQE, true);
_axisYQP.SetSecondaryAxisYQPColorDisplay(_seriesCurveQP, _seriesPointQP, false);
}
break;
case Model.eFeatCurveType.QP:
{
_fitTypeQP = fitType;
_definePointsQP = curvePoints;
_curvePointsQP = Model.FitCurveHelper.GetFitPoints(curvePoints, fitType);
_axisYQH.SetAxisYQHColorDisplay(_seriesCurveQH, _seriesPointQH, false);
_axisYQE.SetSecondaryAxisYQEColorDisplay(_seriesCurveQE, _seriesPointQE, false);
_axisYQP.SetSecondaryAxisYQPColorDisplay(_seriesCurveQP, _seriesPointQP, true);
}
break;
default:
break;
}
UpdateChart(true);
}
///
/// 更新图表
///
/// 计算坐标
public void UpdateChart(bool calcCoordinate = false)
{
if (calcCoordinate || _coordinateParas == null)
{
//不强迫计算,就用上次更新的坐标系
CalcCoordinate();
}
CalcChartAxis();
CalcSeries();
}
#endregion
#region Calc
///
/// 计算坐标
///
public void CalcCoordinate()
{
if (_curvePointsQH == null || _curvePointsQH.Count < 4)
{
//设置成白板坐标
_coordinateParas = new Model.CurveCoordinateParas();
_coordinateParas.GridNumberX = 30;
_coordinateParas.GridNumberY = 16;
//显示的坐标线号
_coordinateParas.StartLineNoH = 10;
_coordinateParas.EndLineNoH = 15;
_coordinateParas.StartLineNoE = 0;
_coordinateParas.EndLineNoE = 10;
_coordinateParas.StartLineNoP = 2;
_coordinateParas.EndLineNoP = 9;
//坐标最小值和间隔
_coordinateParas.CoordMinQ = 0; _coordinateParas.CoordSpaceQ = 1000;
_coordinateParas.CoordMinH = 10; _coordinateParas.CoordSpaceH = 100;
_coordinateParas.CoordMinE = 0; _coordinateParas.CoordSpaceE = 100;
_coordinateParas.CoordMinP = 10; _coordinateParas.CoordSpaceP = 100;
return;
}
_coordinateParas = Model.CurveCoordinateParas.CalcCoordinate(_curvePointsQH, _curvePointsQE, _curvePointsQP);
}
///
/// 计算图表轴
///
public void CalcChartAxis()
{
if (_coordinateParas == null)
{
_axisXQ.Visibility = DefaultBoolean.False;
_axisXQ.GridLines.Visible = false;
_axisYQH.Visibility = DefaultBoolean.False;
_axisYQH.GridLines.Visible = false;
_axisYQE.Visibility = DefaultBoolean.False;
_axisYQE.GridLines.Visible = false;
_axisYQP.Visibility = DefaultBoolean.False;
_axisYQP.GridLines.Visible = false;
return;
}
//流量
if (_curvePointsQH != null)
{
//计算刻度
var labels = new List();
var disQ = _coordinateParas.CoordMinQ;
for (int i = 0; i < _coordinateParas.GridNumberX + 1; i++)
{
labels.Add(new CustomAxisLabel(disQ.ToString("N0"), disQ));
disQ = disQ + _coordinateParas.CoordSpaceQ;
}
//坐标刻度
_axisXQ.CustomLabels.Clear();
_axisXQ.CustomLabels.AddRange(labels.ToArray());
_axisXQ.Visibility = DefaultBoolean.True;
_axisXQ.GridLines.Visible = true;
_axisXQ.SetAxisRange(_coordinateParas.CoordMinQ, _coordinateParas.CoordMinQ + _coordinateParas.GridNumberX * _coordinateParas.CoordSpaceQ);
}
//扬程
if (_curvePointsQH != null)
{
//计算刻度
var labels = new List();
var disH = _coordinateParas.CoordMinH + _coordinateParas.CoordSpaceH * _coordinateParas.StartLineNoH;
for (int i = _coordinateParas.StartLineNoH; i < _coordinateParas.EndLineNoH + 1; i++)
{
labels.Add(new CustomAxisLabel(disH.ToString(), disH));
disH = disH + _coordinateParas.CoordSpaceH;
}
_axisYQH.CustomLabels.Clear();
_axisYQH.CustomLabels.AddRange(labels.ToArray());
_axisYQH.Visibility = DefaultBoolean.True;
_axisYQH.GridLines.Visible = true;
}
//效率
if (_curvePointsQE != null)
{
//计算刻度
var labels = new List();
var disE = _coordinateParas.CoordMinE + _coordinateParas.CoordSpaceE * _coordinateParas.StartLineNoE;
for (int i = _coordinateParas.StartLineNoE; i < _coordinateParas.EndLineNoE + 1; i++)
{
labels.Add(new CustomAxisLabel(disE.ToString(), disE));
disE = disE + _coordinateParas.CoordSpaceE;
}
_axisYQE.CustomLabels.Clear();
_axisYQE.CustomLabels.AddRange(labels.ToArray());
_axisYQE.Visibility = DefaultBoolean.True;
_axisYQE.GridLines.Visible = true;
}
//功率
if (_curvePointsQP != null)
{
//计算刻度
var labels = new List();
double disP = _coordinateParas.CoordMinP + _coordinateParas.CoordSpaceP * _coordinateParas.StartLineNoP;
for (int i = _coordinateParas.StartLineNoP; i < _coordinateParas.EndLineNoP + 1; i++)
{
labels.Add(new CustomAxisLabel(disP.ToString(), disP));
disP = disP + _coordinateParas.CoordSpaceP;
}
_axisYQP.CustomLabels.Clear();
_axisYQP.CustomLabels.AddRange(labels.ToArray());
_axisYQP.Visibility = DefaultBoolean.True;
_axisYQP.GridLines.Visible = true;
}
_axisXQ.SetAxisRange(_coordinateParas.CoordMinQ, _coordinateParas.CoordMinQ + _coordinateParas.GridNumberX * _coordinateParas.CoordSpaceQ);
if (_curvePointsQE == null && _curvePointsQP == null)
{
_axisYQH.SetAxisRange(_coordinateParas.DispMinH(), _coordinateParas.DispMaxH());
}
else
{
_axisYQH.SetAxisRange(_coordinateParas.CoordMinH, _coordinateParas.CoordMinH + _coordinateParas.GridNumberY * _coordinateParas.CoordSpaceH);
}
_axisYQE.SetAxisRange(_coordinateParas.CoordMinE, _coordinateParas.CoordMinE + _coordinateParas.GridNumberY * _coordinateParas.CoordSpaceE);
_axisYQP.SetAxisRange(_coordinateParas.CoordMinP, _coordinateParas.CoordMinP + _coordinateParas.GridNumberY * _coordinateParas.CoordSpaceP);
}
///
/// 计算系列
///
public void CalcSeries()
{
if (_curvePointsQH != null && _curvePointsQH.Count > 3)
{
_seriesCurveQH.Visible = true;
_seriesCurveQH.Points.Clear();
foreach (var curvePoint in _curvePointsQH)
{
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
_seriesCurveQH.Points.Add(seriesPoint);
}
}
else
{
_seriesCurveQH.Points.Clear();
_seriesCurveQH.Visible = false;
}
if (_curvePointsQE != null && _curvePointsQE.Count > 3)
{
_seriesCurveQE.Visible = true;
_seriesCurveQE.Points.Clear();
foreach (var curvePoint in _curvePointsQE)
{
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
_seriesCurveQE.Points.Add(seriesPoint);
}
}
else
{
_seriesCurveQE.Points.Clear();
_seriesCurveQE.Visible = false;
}
if (_curvePointsQP != null && _curvePointsQP.Count > 3)
{
_seriesCurveQP.Visible = true;
_seriesCurveQP.Points.Clear();
foreach (var curvePoint in _curvePointsQP)
{
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
_seriesCurveQP.Points.Add(seriesPoint);
}
}
else
{
_seriesCurveQP.Points.Clear();
_seriesCurveQP.Visible = false;
}
if (_definePointsQH != null && _definePointsQH.Any())
{
_seriesPointQH.Points.Clear();
for (int i = 0; i < _definePointsQH.Count; i++)
{
var definePoint = _definePointsQH[i];
var seriesPoint = new SeriesPoint(definePoint.X, definePoint.Y);
seriesPoint.Tag = i;
_seriesPointQH.Points.Add(seriesPoint);
}
_seriesPointQH.Visible = true;
}
else
{
_seriesPointQH.Visible = false;
}
if (_definePointsQE != null && _definePointsQE.Any())
{
_seriesPointQE.Points.Clear();
for (int i = 0; i < _definePointsQE.Count; i++)
{
var definePoint = _definePointsQE[i];
var seriesPoint = new SeriesPoint(definePoint.X, definePoint.Y);
seriesPoint.Tag = i;
_seriesPointQE.Points.Add(seriesPoint);
}
_seriesPointQE.Visible = true;
}
else
{
_seriesPointQE.Visible = false;
}
if (_definePointsQP != null && _definePointsQP.Any())
{
_seriesPointQP.Points.Clear();
for (int i = 0; i < _definePointsQP.Count; i++)
{
var definePoint = _definePointsQP[i];
var seriesPoint = new SeriesPoint(definePoint.X, definePoint.Y);
seriesPoint.Tag = i;
_seriesPointQP.Points.Add(seriesPoint);
}
_seriesPointQP.Visible = true;
}
else
{
_seriesPointQP.Visible = false;
}
}
#endregion
#region ChartEvent
private bool _mouseMode = false;//鼠标模式
private SeriesPoint _pickPoint = null;// 选中点
private void chartControl1_MouseDown(object sender, MouseEventArgs e)
{
if (!_initialData)
return;
var hitInfo = chartControl1.CalcHitInfo(e.Location);
if (e.Button == MouseButtons.Left)
{
if (hitInfo.InSeriesPoint)
{
if ((int)hitInfo.Series.Tag != (int)_editCurveType)
{
_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 (!_initialData)
return;
if (!_mouseMode)
return;
if (_pickPoint == null)
return;
var diagramCoordinates = _mainChartDiagram.PointToDiagram(e.Location);
switch (_editCurveType)
{
case Model.eFeatCurveType.QH:
{
var axisValue = diagramCoordinates.GetAxisValue(_axisYQH);
if (axisValue == null)
return;
_pickPoint.Values[0] = axisValue.NumericalValue;
_pickPoint.NumericalArgument = diagramCoordinates.NumericalArgument;
}
break;
case Model.eFeatCurveType.QE:
{
var axisValue = diagramCoordinates.GetAxisValue(_axisYQE);
if (axisValue == null)
return;
_pickPoint.Values[0] = axisValue.NumericalValue;
_pickPoint.NumericalArgument = diagramCoordinates.NumericalArgument;
}
break;
case Model.eFeatCurveType.QP:
{
var axisValue = diagramCoordinates.GetAxisValue(_axisYQP);
if (axisValue == null)
return;
_pickPoint.Values[0] = axisValue.NumericalValue;
_pickPoint.NumericalArgument = diagramCoordinates.NumericalArgument;
}
break;
}
}
private void chartControl1_MouseUp(object sender, MouseEventArgs e)
{
if (!_initialData)
return;
if (_mouseMode)
{
_pickPoint = null;
ChartUpdateCurve();
}
}
private void chartControl1_KeyUp(object sender, KeyEventArgs e)
{
if (!_initialData)
return;
if (_pickPoint == null)
return;
double spaceX = _coordinateParas.CoordSpaceQ / 50;
double spaceY = 0;
switch (_editCurveType)
{
case Model.eFeatCurveType.QH:
{
spaceY = _coordinateParas.CoordSpaceH / 50;
}
break;
case Model.eFeatCurveType.QE:
{
spaceY = _coordinateParas.CoordSpaceE / 50;
}
break;
case Model.eFeatCurveType.QP:
{
spaceY = _coordinateParas.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();
}
///
/// 更新曲线
///
private void ChartUpdateCurve()
{
switch (_editCurveType)
{
case Model.eFeatCurveType.QH:
{
_definePointsQH = _seriesPointQH.Points.Select(x => new Model.CurvePoint(x.ArgumentX.NumericalArgument, x.NumericalValue)).ToList();
_curvePointsQH = Model.FitCurveHelper.GetFitPoints(_definePointsQH, _fitTypeQH);
_seriesCurveQH.Points.Clear();
foreach (var curvePoint in _curvePointsQH)
{
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
_seriesCurveQH.Points.Add(seriesPoint);
}
OnDefinePointChanged?.Invoke(_editCurveType, _definePointsQH);
}
break;
case Model.eFeatCurveType.QE:
{
_definePointsQE = _seriesPointQE.Points.Select(x => new Model.CurvePoint(x.ArgumentX.NumericalArgument, x.NumericalValue)).ToList();
_curvePointsQE = Model.FitCurveHelper.GetFitPoints(_definePointsQE, _fitTypeQE);
_seriesCurveQE.Points.Clear();
foreach (var curvePoint in _curvePointsQE)
{
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
_seriesCurveQE.Points.Add(seriesPoint);
}
OnDefinePointChanged?.Invoke(_editCurveType, _definePointsQE);
}
break;
case Model.eFeatCurveType.QP:
{
_definePointsQP = _seriesPointQP.Points.Select(x => new Model.CurvePoint(x.ArgumentX.NumericalArgument, x.NumericalValue)).ToList();
_curvePointsQP = Model.FitCurveHelper.GetFitPoints(_definePointsQP, _fitTypeQP);
_seriesCurveQP.Points.Clear();
foreach (var curvePoint in _curvePointsQP)
{
var seriesPoint = new SeriesPoint(curvePoint.X, curvePoint.Y);
_seriesCurveQP.Points.Add(seriesPoint);
}
OnDefinePointChanged?.Invoke(_editCurveType, _definePointsQP);
}
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 = "修改模式:鼠标☑ / 键盘";
}
_mainChartDiagram.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
///
/// 设置图例显示
///
public void SetLegendVisible(bool visible)
{
this.chartControl1.Legend.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
}
///
/// 设置轴名称显示
///
public void SetAxisNameVisible(bool visible)
{
_axisXQ.Title.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
_axisYQH.Title.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
_axisYQE.Title.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
_axisYQP.Title.Visibility = visible ? DefaultBoolean.True : DefaultBoolean.False;
}
///
/// 设置坐标轴
///
public void SetChartAxis()
{
var dlg = new ChartCoordinateDlg();
var onlyQH = _curvePointsQE == null && _curvePointsQP == null;
dlg.SetBindingData(_coordinateParas, onlyQH);
dlg.OnChangedCoord += (rhs) =>
{
_coordinateParas = rhs;
CalcChartAxis();
this.OnCurveCoordinateParasChanged?.Invoke(_coordinateParas);
};
dlg.ShowDialog();
}
#endregion
}
}