using DevExpress.Utils;
|
using DevExpress.XtraEditors;
|
using DevExpress.XtraGrid.Views.Grid;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Drawing;
|
using System.Linq;
|
using System.Windows.Forms;
|
|
|
//编辑原始的性能曲线
|
namespace IStation.WinFrmUI.Curve
|
{
|
public partial class FeatCurveByEditCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public FeatCurveByEditCtrl()
|
{
|
InitializeComponent();
|
this.gridView1.OptionsFind.FindNullPrompt = "检索";
|
this.gridView1.OptionsSelection.MultiSelect = false;
|
this.gridView1.OptionsMenu.EnableColumnMenu = true;
|
|
this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
|
this.gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
this.gridView1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
this.gridView1.FocusRectStyle = DrawFocusRectStyle.RowFullFocus;
|
this.gridView1.OptionsCustomization.AllowFilter = true;
|
this.gridView1.OptionsCustomization.AllowSort = true;
|
this.gridView1.OptionsCustomization.AllowQuickHideColumns = false;
|
this.gridView1.OptionsView.ShowAutoFilterRow = false;
|
this.gridView1.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
|
this.gridView1.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
|
this.gridView1.OptionsView.ShowGroupPanel = false;
|
this.gridView1.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
this.gridView1.OptionsBehavior.Editable = true;
|
this.gridView1.OptionsBehavior.ReadOnly = false;
|
|
this.gridView1.OptionsView.EnableAppearanceOddRow = true;
|
this.gridView1.OptionsView.EnableAppearanceEvenRow = true;
|
this.gridView1.Appearance.OddRow.BackColor = Color.White;
|
this.gridView1.Appearance.EvenRow.BackColor = Color.FromArgb(244, 248, 251);
|
|
int height = 30;
|
this.gridView1.RowHeight = height;
|
this.gridView1.ColumnPanelRowHeight = height;
|
this.gridView1.GroupRowHeight = height;
|
this.gridView1.BestFitColumns();
|
|
this.gridView1.OptionsView.ShowIndicator = true;
|
this.gridView1.IndicatorWidth = height;
|
this.gridView1.CustomDrawRowIndicator += (sender, e) =>
|
{
|
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
|
{
|
e.Info.DisplayText = (e.RowHandle + 1).ToString().Trim();
|
e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
|
}
|
};
|
this.gridView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
|
|
this.featCurvesDispCtrl1.ChangeFeatPointEvent += OnChangeFeatPoint;
|
}
|
|
//性能曲线点变换事件
|
private void OnChangeFeatPoint(object sender, EventArgs e)
|
{
|
_featCurvePoints.Clear();
|
switch (_editCurveType)
|
{
|
case Model.eFeatCurveType.QH:
|
{
|
foreach (Model.CurvePoint pt in _qhPoints)
|
_featCurvePoints.Add(new Model.CurvePoint(pt.X, pt.Y));
|
}
|
break;
|
case Model.eFeatCurveType.QE:
|
{
|
foreach (Model.CurvePoint pt in _qePoints)
|
_featCurvePoints.Add(new Model.CurvePoint(pt.X, pt.Y));
|
}
|
break;
|
case Model.eFeatCurveType.QP:
|
{
|
foreach (Model.CurvePoint pt in _qpPoints)
|
_featCurvePoints.Add(new Model.CurvePoint(pt.X, pt.Y));
|
}
|
break;
|
}
|
this.bindingSource1.ResetBindings(false);
|
}
|
|
Model.eCurveFitType _qhFitType = Model.eCurveFitType.CubicCurve;
|
Model.eCurveFitType _qeFitType = Model.eCurveFitType.CubicCurve;
|
Model.eCurveFitType _qpFitType = Model.eCurveFitType.CubicCurve;
|
|
private List<Model.CurvePoint> _qhPoints = null;
|
private List<Model.CurvePoint> _qePoints = null;
|
private List<Model.CurvePoint> _qpPoints = null;
|
|
private List<Model.CurvePoint> _featCurvePoints = null;
|
|
Unit.eUnitQ _unitQ = Unit.eUnitQ.M3H;
|
Unit.eUnitH _unitH = Unit.eUnitH.M;
|
Model.eFeatCurveType _editCurveType = Model.eFeatCurveType.QH;
|
|
/// <summary>
|
/// 初始化数据
|
/// </summary>
|
public void InitialBindingData(List<Model.CurvePoint> qhPoints, List<Model.CurvePoint> qePoints, List<Model.CurvePoint> qpPoints,
|
Model.eCurveFitType qhFitType, Model.eCurveFitType qeFitType, Model.eCurveFitType qpFitType)
|
{
|
_featCurvePoints = new List<Model.CurvePoint>();
|
this.bindingSource1.DataSource = _featCurvePoints;
|
|
_qhPoints = null;
|
_qePoints = null;
|
_qpPoints = null;
|
|
|
if (qhPoints == null || qhPoints.Count < 4)
|
{
|
this.featCurvesDispCtrl1.UpdateChart(false);
|
return;
|
}
|
|
_qhPoints = qhPoints;
|
_qePoints = qePoints;
|
_qpPoints = qpPoints;
|
|
_qhFitType = qhFitType;
|
_qeFitType = qeFitType;
|
_qpFitType = qpFitType;
|
|
|
this.cmbCurveType.Properties.Items.Clear();
|
this.cmbCurveType.Properties.Items.Add("流量扬程曲线");
|
if (_qePoints != null && _qePoints.Count > 3)
|
this.cmbCurveType.Properties.Items.Add("流量效率曲线");
|
if (_qpPoints != null && _qpPoints.Count > 3)
|
this.cmbCurveType.Properties.Items.Add("流量功率曲线");
|
this.cmbCurveType.SelectedIndex = 0;
|
|
//默认修改QHcurve
|
_editCurveType = Model.eFeatCurveType.QH;
|
|
SetBindingData();
|
this.featCurvesDispCtrl1.SetFeatCurvePoint(_qhPoints, _qePoints, _qpPoints, _qhFitType, _qeFitType, _qpFitType);
|
this.featCurvesDispCtrl1.UpdateChart(true);
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
private void SetBindingData()
|
{
|
_featCurvePoints.Clear();
|
switch (_editCurveType)
|
{
|
case Model.eFeatCurveType.QH:
|
{
|
foreach (Model.CurvePoint pt in _qhPoints)
|
_featCurvePoints.Add(new Model.CurvePoint(pt.X, pt.Y));
|
|
this.featCurvesDispCtrl1.IsEditCurve(ChartEditLxpCurveCtrl.eEditCurveType.QHcurve);
|
}
|
break;
|
case Model.eFeatCurveType.QE:
|
{
|
|
foreach (Model.CurvePoint pt in _qePoints)
|
_featCurvePoints.Add(new Model.CurvePoint(pt.X, pt.Y));
|
|
this.featCurvesDispCtrl1.IsEditCurve(ChartEditLxpCurveCtrl.eEditCurveType.QEcurve);
|
}
|
break;
|
case Model.eFeatCurveType.QP:
|
{
|
|
foreach (Model.CurvePoint pt in _qpPoints)
|
_featCurvePoints.Add(new Model.CurvePoint(pt.X, pt.Y));
|
|
this.featCurvesDispCtrl1.IsEditCurve(ChartEditLxpCurveCtrl.eEditCurveType.QPcurve);
|
}
|
break;
|
}
|
this.bindingSource1.ResetBindings(false);
|
}
|
|
/// <summary>
|
/// 绑定坐标
|
/// </summary>
|
public void SetLxpCoordinateParas(Model.CurveCoordinateParas coord)
|
{
|
this.featCurvesDispCtrl1.CoordinateParas = coord;
|
}
|
|
/// <summary>
|
/// 设置曲线坐标
|
/// </summary>
|
public void SetCoordinateByDialog()
|
{
|
this.featCurvesDispCtrl1.SetCoordinateByDialog();
|
}
|
|
//编辑性能曲线类型修改
|
private void cmbCurveType_SelectedIndexChanged(object sender, EventArgs e)
|
{
|
string curveType = cmbCurveType.SelectedItem.ToString();
|
if (string.Equals("流量扬程曲线", curveType))
|
{
|
_editCurveType = Model.eFeatCurveType.QH;
|
featCurvesDispCtrl1.IsEditCurve(ChartEditLxpCurveCtrl.eEditCurveType.QHcurve);
|
}
|
else if (string.Equals("流量效率曲线", curveType))
|
{
|
_editCurveType = Model.eFeatCurveType.QE;
|
featCurvesDispCtrl1.IsEditCurve(ChartEditLxpCurveCtrl.eEditCurveType.QEcurve);
|
}
|
else if (string.Equals("流量功率曲线", curveType))
|
{
|
_editCurveType = Model.eFeatCurveType.QP;
|
featCurvesDispCtrl1.IsEditCurve(ChartEditLxpCurveCtrl.eEditCurveType.QPcurve);
|
}
|
SetBindingData();
|
}
|
|
//单元格修改后触发
|
private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
|
{
|
ReloadChart();
|
}
|
|
//删除点
|
private void DeletePoint()
|
{
|
var row = this.gridView1.GetFocusedRow() as Model.CurvePoint;
|
if (row == null)
|
return;
|
if (XtraMessageBox.Show("是否删除此点?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes)
|
return;
|
_featCurvePoints.Remove(row);
|
this.bindingSource1.ResetBindings(false);
|
UpdateCurveChart(GetCurrentCurvePoints());
|
}
|
|
//获取当前编辑曲线点
|
public List<Model.CurvePoint> GetCurrentCurvePoints()
|
{
|
var points = new List<Model.CurvePoint>();
|
if (_featCurvePoints != null && _featCurvePoints.Any())
|
{
|
if (_editCurveType == Model.eFeatCurveType.QH && _unitH == Unit.eUnitH.MPa)
|
{
|
_featCurvePoints.ForEach(curvePoint =>
|
{
|
var x = Unit.UnitQHelper.Convert(_unitQ, Unit.eUnitQ.M3H, curvePoint.X);
|
var y = 100 * curvePoint.Y;
|
var point = new Model.CurvePoint(x, y);
|
points.Add(point);
|
});
|
}
|
else
|
{
|
_featCurvePoints.ForEach(curvePoint =>
|
{
|
var x = Unit.UnitQHelper.Convert(_unitQ, Unit.eUnitQ.M3H, curvePoint.X);
|
var y = curvePoint.Y;
|
var point = new Model.CurvePoint(x, y);
|
points.Add(point);
|
});
|
}
|
}
|
return points;
|
}
|
|
//更新图表
|
private void UpdateCurveChart(List<Model.CurvePoint> points)
|
{
|
if (_editCurveType == Model.eFeatCurveType.QH)
|
{
|
_qhPoints = points;
|
}
|
else if (_editCurveType == Model.eFeatCurveType.QE)
|
{
|
_qePoints = points;
|
}
|
else if (_editCurveType == Model.eFeatCurveType.QP)
|
{
|
_qpPoints = points;
|
}
|
this.featCurvesDispCtrl1.SetEditPoint(points);
|
}
|
|
|
//插入点
|
private void InsertPoint()
|
{
|
var dlg = new Curve.InputXYDialog();
|
List<Model.CurvePoint> points = null;
|
switch (_editCurveType)
|
{
|
case Model.eFeatCurveType.QH:
|
{
|
dlg.SetLabelX("Q");
|
dlg.SetLabelY("H");
|
points = _qhPoints;
|
}
|
break;
|
case Model.eFeatCurveType.QE:
|
{
|
dlg.SetLabelX("Q");
|
dlg.SetLabelY("E");
|
points = _qePoints;
|
}
|
break;
|
case Model.eFeatCurveType.QP:
|
{
|
dlg.SetLabelX("Q");
|
dlg.SetLabelY("P");
|
points = _qpPoints;
|
}
|
break;
|
}
|
if (dlg.ShowDialog() != DialogResult.OK)
|
return;
|
|
var curvePoint = new Model.CurvePoint(dlg.X, dlg.Y);
|
points.Add(curvePoint);
|
|
SetBindingData();
|
this.featCurvesDispCtrl1.SetEditPoint(points);
|
|
}
|
|
//重新计算
|
private void ReloadCalcu()
|
{
|
if (_featCurvePoints == null)
|
return;
|
bool isFromZero = false;
|
if (_qhPoints.Last().X > 20)
|
{
|
if (_qhPoints.First().X < 1)
|
isFromZero = true;
|
}
|
else
|
{
|
if (_qhPoints.First().X < 0.3)
|
isFromZero = true;
|
}
|
if (_editCurveType == Model.eFeatCurveType.QE)
|
{
|
_qePoints = LxpFeatCurveHelper.CalculateE_AlignPointP(_qhFitType, _qpFitType, _qhPoints, _qpPoints, IStation.Formula.ConstantParas.WaterDensity, isFromZero);
|
this.featCurvesDispCtrl1.SetEditPoint(_qePoints);
|
}
|
else if (_editCurveType == Model.eFeatCurveType.QP)
|
{
|
|
double ref_zero_power = -1;
|
if (_qpPoints != null && _qePoints.Count > 0)
|
{
|
ref_zero_power = _qpPoints.First().Y;
|
}
|
_qpPoints = LxpFeatCurveHelper.CalculateP_AlignPointE(_qhFitType, _qeFitType, _qhPoints, _qePoints, IStation.Formula.ConstantParas.WaterDensity, ref_zero_power, isFromZero);
|
this.featCurvesDispCtrl1.SetEditPoint(_qpPoints);
|
}
|
SetBindingData();
|
this.featCurvesDispCtrl1.UpdateChart(true);
|
}
|
|
//刷新图表
|
private void ReloadChart()
|
{
|
//更新曲线,暂时有问题,应该P跟着其余曲线变化,暂时未处理
|
var points = _featCurvePoints?.Select(x => new Model.CurvePoint(x)).ToList();
|
switch (_editCurveType)
|
{
|
case Model.eFeatCurveType.QH:
|
{
|
_qhPoints = points;
|
}
|
break;
|
case Model.eFeatCurveType.QE:
|
{
|
|
_qePoints = points;
|
}
|
break;
|
case Model.eFeatCurveType.QP:
|
{
|
|
_qpPoints = points;
|
}
|
break;
|
}
|
this.featCurvesDispCtrl1.SetEditPoint(points);
|
}
|
|
//按钮点击事件
|
private void buttonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
|
{
|
if (e.Button.Tag == null)
|
return;
|
var tag = e.Button.Tag.ToString();
|
switch (tag)
|
{
|
case "Delete": DeletePoint(); break;
|
case "InsertPoint": InsertPoint(); break;
|
case "ReloadCalcu": ReloadCalcu(); break;
|
case "Refresh": ReloadChart(); break;
|
case "Extend": XtraMessageBox.Show("待补充"); break;
|
}
|
}
|
|
#region Get
|
public bool GetPointListInfo(out List<Model.CurvePoint> pointsQH, out List<Model.CurvePoint> pointsQE, out List<Model.CurvePoint> pointsQP)
|
{
|
if (_qhPoints != null)
|
pointsQH = _qhPoints.ToList();
|
else
|
pointsQH = null;
|
|
if (_qePoints != null)
|
pointsQE = _qePoints.ToList();
|
else
|
pointsQE = null;
|
|
if (_qpPoints != null)
|
pointsQP = _qpPoints.ToList();
|
else
|
pointsQP = null;
|
|
return true;
|
}
|
public Model.CurveCoordinateParas GetLxpCoordinateParas()
|
{
|
return this.featCurvesDispCtrl1.CoordinateParas;
|
}
|
#endregion
|
|
|
}
|
}
|