using DevExpress.XtraCharts;
using DevExpress.XtraEditors;
using IStation.Model;
using IStation.WinFrmUI.Curve;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Runtime;
using System.Windows.Forms;
namespace IStation.WinFrmUI.Monitor
{
///
/// 单泵分析步骤图表控件
///
public partial class AnaSingleStepMgrPage : DocumentPage
{
public AnaSingleStepMgrPage()
{
InitializeComponent();
bci结束手动打点.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
bbi结束框选拟合.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
bbi计算曲线.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
this.chartControl1.OnCompleteRectSelect += ChartBoxSelHelper_BoxSelCompletedEvent;
}
public AnaSingleStepMgrPage(SurfaceGuid sguid, string pageCaption) : this()
{
this.SurfaceGuid = sguid;
this.PageTitle.Caption = pageCaption;
this.ribbonControl1.Pages[0].Text = pageCaption;
}
private long _projectId, _sceneId;
private Model.CurveAnaStep _analyStep;
private Model.CurveAnaStepResult _analyStepResult;
private List _allAnaPoints = null;
private Model.eFeatCurveType _currentCurveType = eFeatCurveType.QH;
private FeatCurveExpressGroupEx _curveFitCurveInfo = null;
private Model.FeatCurveExMapping _referenceCurve = null;
private class FeatCurveExpressGroupEx : Model.FeatCurveExpressGroup
{
public FeatCurveExpressGroupEx() { }
public FeatCurveExpressGroupEx(string dsString) : base(dsString)
{
if (this.CurveQH != null)
FitTypeQH = this.CurveQH.FitType;
if (this.CurveQE != null)
FitTypeQE = this.CurveQE.FitType;
if (this.CurveQP != null)
FitTypeQP = this.CurveQP.FitType;
}
public IStation.Model.eCurveFitType FitTypeQH = eCurveFitType.CubicCurve;
public IStation.Model.eCurveFitType FitTypeQE = eCurveFitType.CubicCurve;
public IStation.Model.eCurveFitType FitTypeQP = eCurveFitType.CubicCurve;
public void SetPickSelPoint(Model.eFeatCurveType currentCurveType, List points)
{
if (currentCurveType == eFeatCurveType.QH)
{
this.CurveQH = new CurveExpress(points, FitTypeQH, true);
this.PointMethodQH = eCurveFitPointMethod.ManuPick;
}
if (currentCurveType == eFeatCurveType.QE)
{
this.CurveQE = new CurveExpress(points, FitTypeQE, true);
this.PointMethodQE = eCurveFitPointMethod.ManuPick;
}
if (currentCurveType == eFeatCurveType.QP)
{
this.CurveQP = new CurveExpress(points, FitTypeQP, true);
this.PointMethodQP = eCurveFitPointMethod.ManuPick;
}
}
public void SetBoxSelPoint(Model.eFeatCurveType currentCurveType, List points)
{
if (currentCurveType == eFeatCurveType.QH)
{
this.CurveQH = new CurveExpress(points, FitTypeQH, true);
this.PointMethodQH = eCurveFitPointMethod.ManuBox;
}
if (currentCurveType == eFeatCurveType.QE)
{
this.CurveQE = new CurveExpress(points, FitTypeQE, true);
this.PointMethodQE = eCurveFitPointMethod.ManuBox;
}
if (currentCurveType == eFeatCurveType.QP)
{
this.CurveQP = new CurveExpress(points, FitTypeQP, true);
this.PointMethodQP = eCurveFitPointMethod.ManuBox;
}
}
//拟合线
public List GetFitCurvePointInfo(Model.eFeatCurveType currentCurveType, List _allAnaPoints)
{
if (_allAnaPoints == null || _allAnaPoints.Count < 4)
return null;
switch (currentCurveType)
{
case eFeatCurveType.QH:
{
if (this.CurveQH != null && this.CurveQH.DefinePoints != null)
{
if (this.PointMethodQH == eCurveFitPointMethod.ManuPick || this.PointMethodQH == eCurveFitPointMethod.ManuBox)
return FitCurveHelper.GetFitPoints(this.CurveQH.DefinePoints, this.FitTypeQH, 10);
}
var allPoints = _allAnaPoints.Select(x => new Model.CurvePoint(x.Qa, x.Ha)).ToList();
var points = FitCurveHelper.GetFitPoints(allPoints, this.FitTypeQH, 10);
this.CurveQH = new CurveExpress(points, this.FitTypeQH);
return points;
}
case eFeatCurveType.QE:
{
if (this.CurveQE != null && this.CurveQE.DefinePoints != null)
{
if (this.PointMethodQE == eCurveFitPointMethod.ManuPick || this.PointMethodQE == eCurveFitPointMethod.ManuBox)
return FitCurveHelper.GetFitPoints(this.CurveQE.DefinePoints, this.FitTypeQE, 10);
if (this.PointMethodQE == eCurveFitPointMethod.QHEP)
return FitCurveHelper.GetFitPoints(this.CurveQE.DefinePoints, this.FitTypeQE, 10);
}
var allPoints = _allAnaPoints.Select(x => new Model.CurvePoint(x.Qa, x.Ea)).ToList();
var points = FitCurveHelper.GetFitPoints(allPoints, this.FitTypeQE, 10);
this.CurveQE = new CurveExpress(points, this.FitTypeQE);
return points;
}
case eFeatCurveType.QP:
{
if (this.CurveQP != null && this.CurveQP.DefinePoints != null)
{
if (this.PointMethodQP == eCurveFitPointMethod.ManuPick || this.PointMethodQP == eCurveFitPointMethod.ManuBox)
return FitCurveHelper.GetFitPoints(this.CurveQP.DefinePoints, this.FitTypeQP, 10);
if (this.PointMethodQP == eCurveFitPointMethod.QHEP)
return FitCurveHelper.GetFitPoints(this.CurveQP.DefinePoints, this.FitTypeQP, 10);
}
var allPoints = _allAnaPoints.Select(x => new Model.CurvePoint(x.Qa, x.Pa)).ToList();
var points = FitCurveHelper.GetFitPoints(allPoints, this.FitTypeQP, 10);
this.CurveQP = new CurveExpress(points, this.FitTypeQP);
return points;
}
}
return null;
}
}
///
/// 初始化数据
///
public void SetBindingData(long projectId, long seneId, Model.CurveAnaStep analyStep)
{
if (analyStep == null)
return;
WaitFrmHelper.ShowWaitForm();
_projectId = projectId;
_sceneId = seneId;
_analyStep = analyStep;
_analyStepResult = new BLL.CurveAnaStepResult().GetByAnaStepId(_projectId, _sceneId,
_analyStep.AnaSchemeId, _analyStep.Id);
if (_analyStepResult == null)
{
_analyStepResult = new Model.CurveAnaStepResult();
_analyStepResult.Caption = _analyStep.Name;
_curveFitCurveInfo = new FeatCurveExpressGroupEx();
}
else
{
_curveFitCurveInfo = new FeatCurveExpressGroupEx(_analyStepResult.CurveInfo);
if (_curveFitCurveInfo.CurveQE == null)
{
this.barCekQE.Checked = true;
}
if (_curveFitCurveInfo.CurveQP == null)
{
this.barCekQP.Checked = true;
}
}
if (_curveFitCurveInfo != null)
{
this.barCekFitCurveShow.Checked = true;
}
InitialPoints();
InitialFeatCurveType(Model.eFeatCurveType.QH);
WaitFrmHelper.HideWaitForm();
this.barCekQP.Checked = false;
this.barCekQH.Checked = true;
this.barCekQE.Checked = false;
}
#region 删除
//清除负值
private void barBtnClearNegative_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (XtraMessageBox.Show("确认清除所有负值吗?", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
return;
}
var TimeList = _allAnaPoints?.Where(x => x.Qa < 0).Select(x => x.Time).ToList();
if (TimeList == null || TimeList.Count < 1)
{
XtraMessageBox.Show("未检索到负值!");
return;
}
DeleteByTimeList(TimeList);
UpdateCoordinate();
}
//清除零值
private void barBtnClearZero_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (XtraMessageBox.Show("确认清除所有零值吗?", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
return;
}
var TimeList = _allAnaPoints?.Where(x => x.Qa == 0).Select(x => x.Time).ToList();
if (TimeList == null || TimeList.Count < 1)
{
XtraMessageBox.Show("未检索到零值!");
return;
}
DeleteByTimeList(TimeList);
}
private void DeleteByTimeList(List dateTimes)
{
if (dateTimes == null || dateTimes.Count < 1)
{
XtraMessageBox.Show("无数据!");
return;
}
var lays = this.chartControl1.ShowOverlay();
dateTimes = dateTimes.OrderByDescending(x => x).ToList();
var minTime = dateTimes.Min();
var maxTime = dateTimes.Max();
var minIndex = _allAnaPoints.FindIndex(x => x.Time == minTime);
var maxIndex = _allAnaPoints.FindIndex(x => x.Time == maxTime);
var delIndex = 0;
for (int i = maxIndex; i >= minIndex; i--)
{
var item = _allAnaPoints[i];
for (int j = delIndex; j < dateTimes.Count; j++)
{
var delItem = dateTimes[j];
if (item.Time == delItem)
{
_allAnaPoints.RemoveAt(i);
delIndex = j++;
break;
}
}
}
this.chartControl1.RefreshPointInfo(_allAnaPoints);
if (this.barCekFitCurveShow.Checked)
{
RefreshFitCurve();
}
var result = new BLL.CurveAnaRecord().Disabled(_projectId, _sceneId, _analyStep.AnaSchemeId, _analyStep.StructureId, _analyStep.RunningFlag, _analyStep.RunningCount, dateTimes);
if (!result)
{
lays.Close();
XtraMessageBox.Show("数据设置无效失败!");
return;
}
lays.Close();
}
#endregion
#region 拟合曲线
private void bbi计算曲线_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (this._curveFitCurveInfo == null)
return;
if (_curveFitCurveInfo.CurveQP == null || _curveFitCurveInfo.CurveQH == null)
return;
var qe = new Model.CurveExpress();
var min_q = Math.Min(_curveFitCurveInfo.CurveQH.Min, _curveFitCurveInfo.CurveQP.Min);
var max_q = Math.Max(_curveFitCurveInfo.CurveQH.Max, _curveFitCurveInfo.CurveQP.Max);
double space_q = (max_q - min_q) / 9;
if (space_q <= 0.1)
return;
List pts = new List();
for (int i = 0; i < 10; i++)
{
var q = min_q + i * space_q;
var h = IStation.Common.FitCurveHelper.GetFitPointY(_curveFitCurveInfo.CurveQH, q);
var p = IStation.Common.FitCurveHelper.GetFitPointY(_curveFitCurveInfo.CurveQP, q);
var eta = IStation.Common.PumpParaHelper.CalculateE(q, h, p);
if (eta < 100)
{
pts.Add(new CurvePoint(q, eta));
}
}
_curveFitCurveInfo.PointMethodQE = eCurveFitPointMethod.QHEP;
_curveFitCurveInfo.CurveQE = new CurveExpress(pts, _curveFitCurveInfo.FitTypeQE, true);
this.barCekFitCurveShow.Checked = true;
this.chartControl1.SetCustomerPointInfo(pts);
RefreshFitCurve();
}
private void InitialPoints()
{
_allAnaPoints = new List();
var etaRecords = new BLL.CurveAnaRecord().GetUseContentByRunningFlagAndRunningCount(_projectId, _sceneId, _analyStep.AnaSchemeId, _analyStep.RunningFlag, _analyStep.RunningCount, _analyStep.MinTime, _analyStep.MaxTime);
if (etaRecords != null && etaRecords.Count > 0)
{
var single = Model.CurveAnaStep.Single.ToModel(_analyStep.StepConfig);
if (single != null)
{
if (single.MinTime != null)
{
etaRecords = etaRecords.Where(x => x.Time >= single.MinTime).ToList();
}
if (single.MaxTime != null)
{
etaRecords = etaRecords.Where(x => x.Time <= single.MaxTime).ToList();
}
if (single.MinHz != null)
{
etaRecords = etaRecords.Where(x => x.HZ[0] >= single.MinHz.Value).ToList();
}
if (single.MaxHz != null)
{
etaRecords = etaRecords.Where(x => x.HZ[0] <= single.MaxHz.Value).ToList();
}
}
for (int i = 0; i < etaRecords.Count; i++)
{
var record = etaRecords[i];
var analyPoint = CurveAnaPointHelper.GetAnaPoint(record);
_allAnaPoints.Add(analyPoint);
}
}
this.barCekQH.Checked = true;
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect(2, GCCollectionMode.Forced);
GC.WaitForFullGCComplete();
this.chartControl1.InitialPointInfo(_allAnaPoints);
}
private void RefreshFitCurve()
{
var curvePointList = this._curveFitCurveInfo.GetFitCurvePointInfo(this._currentCurveType, this._allAnaPoints);
this.chartControl1.SetCurveInfo(curvePointList);
if (this._currentCurveType == eFeatCurveType.QH)
{
if (this._curveFitCurveInfo.CurveQH != null && _curveFitCurveInfo.PointMethodQH == eCurveFitPointMethod.ManuPick)
{
this.chartControl1.SetCustomerPointInfo(_curveFitCurveInfo.CurveQH.DefinePoints);
}
}
else
if (this._currentCurveType == eFeatCurveType.QE)
{
if (this._curveFitCurveInfo.CurveQE != null && _curveFitCurveInfo.PointMethodQE == eCurveFitPointMethod.ManuPick)
{
this.chartControl1.SetCustomerPointInfo(_curveFitCurveInfo.CurveQE.DefinePoints);
}
}
else
if (this._currentCurveType == eFeatCurveType.QP)
{
if (this._curveFitCurveInfo.CurveQP != null && _curveFitCurveInfo.PointMethodQP == eCurveFitPointMethod.ManuPick)
{
this.chartControl1.SetCustomerPointInfo(_curveFitCurveInfo.CurveQP.DefinePoints);
}
}
if (_referenceCurve != null)
{
var curveInfo = _referenceCurve.CurveInfo;
switch (_currentCurveType)
{
case eFeatCurveType.QH:
this.chartControl1.InitialReferenceCurve(curveInfo?.CurveQH.GetFitPoints());
break;
case eFeatCurveType.QE:
this.chartControl1.InitialReferenceCurve(curveInfo?.CurveQE.GetFitPoints());
break;
case eFeatCurveType.QP:
this.chartControl1.InitialReferenceCurve(curveInfo?.CurveQP.GetFitPoints());
break;
}
}
}
#endregion
///
///
///
///
private void InitialFeatCurveType(Model.eFeatCurveType curveType)
{
this._currentCurveType = curveType;
this.chartControl1.SetCurveType(_currentCurveType);
if (curveType == eFeatCurveType.QH)
{
InitialCurveFitType(curveType, this._curveFitCurveInfo.FitTypeQH, (curveNewFitType) =>
{
this._curveFitCurveInfo.FitTypeQH = curveNewFitType;
this.barCekFitCurveShow.Checked = true;
RefreshFitCurve();
});
if (this.barCekFitCurveShow.Checked)
{
RefreshFitCurve();
}
}
if (curveType == eFeatCurveType.QE)
{
InitialCurveFitType(curveType, this._curveFitCurveInfo.FitTypeQE, (curveNewFitType) =>
{
this._curveFitCurveInfo.FitTypeQE = curveNewFitType;
this.barCekFitCurveShow.Checked = true;
RefreshFitCurve();
});
if (this.barCekFitCurveShow.Checked)
{
RefreshFitCurve();
}
}
if (curveType == eFeatCurveType.QP)
{
InitialCurveFitType(curveType, this._curveFitCurveInfo.FitTypeQP, (curveNewFitType) =>
{
this._curveFitCurveInfo.FitTypeQP = curveNewFitType;
this.barCekFitCurveShow.Checked = true;
RefreshFitCurve();
});
if (this.barCekFitCurveShow.Checked)
{
RefreshFitCurve();
}
}
}
///
/// 初始化曲线拟合方式
///
private void InitialCurveFitType(
Model.eFeatCurveType curveType,
Model.eCurveFitType curveFitType,
Action OnChangeFitType)
{
this.barSubCurveFitType.ClearLinks();
var btn4 = new DevExpress.XtraBars.BarCheckItem();
btn4.Caption = "四次曲线拟合";
btn4.Id = 4;
btn4.Name = $"barBtnCurveFitType{btn4.Id}";
btn4.ItemClick += (object sender, DevExpress.XtraBars.ItemClickEventArgs e) =>
{
foreach (DevExpress.XtraBars.BarCheckItemLink link in barSubCurveFitType.ItemLinks)
{
((DevExpress.XtraBars.BarCheckItem)link.Item).Checked = false;
}
btn4.Checked = true;
OnChangeFitType(eCurveFitType.FourM);
};
btn4.Checked = curveFitType == eCurveFitType.FourM ? true : false;
this.barSubCurveFitType.AddItem(btn4);
var btn3 = new DevExpress.XtraBars.BarCheckItem();
btn3.Caption = "三次曲线拟合";
btn3.Id = 3;
btn3.Name = $"barBtnCurveFitType{btn3.Id}";
btn3.ItemClick += (object sender, DevExpress.XtraBars.ItemClickEventArgs e) =>
{
foreach (DevExpress.XtraBars.BarCheckItemLink link in barSubCurveFitType.ItemLinks)
{
((DevExpress.XtraBars.BarCheckItem)link.Item).Checked = false;
}
btn3.Checked = true;
OnChangeFitType(eCurveFitType.CubicCurve);
};
btn3.Checked = curveFitType == eCurveFitType.CubicCurve ? true : false;
this.barSubCurveFitType.AddItem(btn3);
var btn2 = new DevExpress.XtraBars.BarCheckItem();
btn2.Caption = "二次曲线拟合";
btn2.Id = 2;
btn2.Name = $"barBtnCurveFitType{btn2.Id}";
btn2.ItemClick += (object sender, DevExpress.XtraBars.ItemClickEventArgs e) =>
{
foreach (DevExpress.XtraBars.BarCheckItemLink link in barSubCurveFitType.ItemLinks)
{
((DevExpress.XtraBars.BarCheckItem)link.Item).Checked = false;
}
btn2.Checked = true;
OnChangeFitType(eCurveFitType.ConicCurve);
};
btn2.Checked = curveFitType == eCurveFitType.ConicCurve ? true : false;
this.barSubCurveFitType.AddItem(btn2);
var btn20 = new DevExpress.XtraBars.BarCheckItem();
btn20.Caption = "二次曲线拟合(一次项系数为零)";
btn20.Id = 20;
btn20.Name = $"barBtnCurveFitType{btn2.Id}";
btn20.ItemClick += (object sender, DevExpress.XtraBars.ItemClickEventArgs e) =>
{
foreach (DevExpress.XtraBars.BarCheckItemLink link in barSubCurveFitType.ItemLinks)
{
((DevExpress.XtraBars.BarCheckItem)link.Item).Checked = false;
}
btn20.Checked = true;
OnChangeFitType(eCurveFitType.ConicCurveB0);
};
btn20.Checked = curveFitType == eCurveFitType.ConicCurveB0 ? true : false;
this.barSubCurveFitType.AddItem(btn20);
}
#region 更新坐标
private void UpdateCoordinate()
{
if (_allAnaPoints != null && _allAnaPoints.Count > 0)
{
switch (_currentCurveType)
{
case eFeatCurveType.QH:
{
var MaxValue = _allAnaPoints.Max(x => x.Ha) + 2;
var MinValue = _allAnaPoints.Min(x => x.Ha) - 2;
this.chartControl1.UpdateAxisRangeY(MinValue, MaxValue);
}
break;
case eFeatCurveType.QE:
{
var MaxValue = _allAnaPoints.Max(x => x.Ea) + 2;
var MinValue = _allAnaPoints.Min(x => x.Ea) - 2;
this.chartControl1.UpdateAxisRangeY(MinValue, MaxValue);
}
break;
case eFeatCurveType.QP:
{
var MaxValue = _allAnaPoints.Max(x => x.Pa) + 2;
var MinValue = _allAnaPoints.Min(x => x.Pa) - 2;
this.chartControl1.UpdateAxisRangeY(MinValue, MaxValue);
}
break;
}
}
}
#endregion
#region 保存
private void barBtnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (_allAnaPoints == null || _allAnaPoints.Count < 1)
{
XtraMessageBox.Show("无分析点数据!");
return;
}
if (this._curveFitCurveInfo == null)
{
XtraMessageBox.Show("无流量扬程线数据!");
return;
}
if (this._curveFitCurveInfo.CurveQH == null)
{
var allPoints = _allAnaPoints.Select(x => new Model.CurvePoint(x.Qa, x.Ha)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQH, 10);
this._curveFitCurveInfo.CurveQH = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQH);
}
if (this._curveFitCurveInfo.CurveQP == null)
{
var allPoints = _allAnaPoints.Where(x => x.Pa != IStation.Default.Error).Select(x => new Model.CurvePoint(x.Qa, x.Pa)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQP, 10);
this._curveFitCurveInfo.CurveQP = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQP);
}
if (this._curveFitCurveInfo.CurveQE == null)
{
var allPoints = _allAnaPoints.Where(x => x.Ea != IStation.Default.Error).Select(x => new Model.CurvePoint(x.Qa, x.Ea)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQE, 10);
this._curveFitCurveInfo.CurveQE = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQE);
}
if (this.barCekNotSaveQE.Checked)
{
_curveFitCurveInfo.CurveQE = null;
}
if (this.barCekNotSaveQP.Checked)
{
_curveFitCurveInfo.CurveQP = null;
}
var lays = this.chartControl1.ShowOverlay();
var curvePointGroup = new Model.FeatCurvePointGroup(this._curveFitCurveInfo);
var curveExpressGroup = new Model.FeatCurveExpressGroup(this._curveFitCurveInfo);
var bll = new BLL.CurveAnaStepResult();
_analyStepResult.AnaStepId = _analyStep.Id;
_analyStepResult.AnaPointList = _allAnaPoints;
_analyStepResult.CurveInfo = curveExpressGroup.ToDsString();
_analyStepResult.PointInfo = curvePointGroup.ToDsString();
lays.Close();
var dlg = new SaveAnaStepResultDlg();
dlg.SetBindingData(_projectId, _sceneId, _analyStep.AnaSchemeId, _analyStepResult);
if (dlg.ShowDialog() == DialogResult.OK)
{
if (!new BLL.CurveAnaStep().Update(_projectId, _sceneId, _analyStep.AnaSchemeId, _analyStep))
{
XtraMessageBox.Show("步骤更新失败!");
return;
}
}
}
#endregion
#region 框选数据
//框选删除
private void bbi框选删除Start_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
_boxSelectPoints = null;
this.chartControl1.StartRectSelect("Delete");
}
//框选数据
private void bbi框选查询点Start_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
_boxSelectPoints = null;
this.chartControl1.StartRectSelect("View");
}
//框选完成
List _boxSelectPoints = null;
private void ChartBoxSelHelper_BoxSelCompletedEvent(string tag, List points)
{
_boxSelectPoints = points;
if (points == null || points.Count < 1)
{
this.chartControl1.CloseBoxSel();
return;
}
if (tag == "Delete")
{
barBtnDeleteBoxPt.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
barBtnShowBoxPtInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
this.popBoxBoxSel.ShowPopup(MousePosition);
}
else if (tag == "View")
{
barBtnDeleteBoxPt.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
barBtnShowBoxPtInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
this.popBoxBoxSel.ShowPopup(MousePosition);
}
else if (tag == "BoxFit")
{
this.chartControl1.CloseBoxSel();
var pts = from x in points select x.Tag as Model.CurveAnaPoint;
if (this._currentCurveType == eFeatCurveType.QH)
{
var q = (from x in pts select x.Qa).Average();
var h = (from x in pts select x.Ha).Average();
this.chartControl1.AddCustormPoint(new CurvePoint(q, h));
this.chartControl1.StartBoxPoint4Fit(_curveFitCurveInfo.FitTypeQH);//继续框选
}
if (this._currentCurveType == eFeatCurveType.QE)
{
var q = (from x in pts select x.Qa).Average();
var h = (from x in pts select x.Ea).Average();
this.chartControl1.AddCustormPoint(new CurvePoint(q, h));
this.chartControl1.StartBoxPoint4Fit(_curveFitCurveInfo.FitTypeQE);//继续框选
}
if (this._currentCurveType == eFeatCurveType.QP)
{
var q = (from x in pts select x.Qa).Average();
var h = (from x in pts select x.Pa).Average();
this.chartControl1.AddCustormPoint(new CurvePoint(q, h));
this.chartControl1.StartBoxPoint4Fit(_curveFitCurveInfo.FitTypeQP);//继续框选
}
return;
}
else
{
this.chartControl1.CloseBoxSel();
return;
}
}
//删除
private void barBtnDeleteBoxPtFinish_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (_boxSelectPoints == null || _boxSelectPoints.Count < 1)
return;
var TimeList = _boxSelectPoints.Select(x => x.Tag as Model.CurveAnaPoint).Select(x => x.Time).ToList();
DeleteByTimeList(TimeList);
}
//查看
private void barBtnShowBoxPtInfoFinish_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (_boxSelectPoints == null || _boxSelectPoints.Count < 1)
return;
var list = _boxSelectPoints.Select(x => x.Tag as Model.CurveAnaPoint).ToList();
var dlg = new AnaSingleStepGridDlg();
dlg.SetBindingData(_projectId, _sceneId, _analyStep.Name, list);
dlg.ReloadDataEvent += (time) =>
{
DeleteByTimeList(new List() { time });
};
dlg.Show();
}
#endregion
#region 界面
//关闭
private void popBoxBoxSel_CloseUp(object sender, EventArgs e)
{
this.chartControl1.CloseBoxSel();
}
//图表点击事件
private void chartAnaPoints_MouseClick(object sender, MouseEventArgs e)
{
//if (e.Button == MouseButtons.Right)
//{
// // this.popMain.ShowPopup(MousePosition);
//}
}
//拟合曲线
private void barCekCurveDisp_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
this.chartControl1.SetCurveVisible(this.barCekFitCurveShow.Checked);
if (this.barCekFitCurveShow.Checked)
{
RefreshFitCurve();
}
}
private void barCekQH_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (this.barCekQH.Checked == true)
{
InitialFeatCurveType(Model.eFeatCurveType.QH);
bbi计算曲线.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
this.barCekQP.Checked = false;
this.barCekQH.Checked = true;
this.barCekQE.Checked = false;
}
}
private void barCekQP_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (this.barCekQP.Checked == true)
{
InitialFeatCurveType(Model.eFeatCurveType.QP);
bbi计算曲线.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
this.barCekQP.Checked = true;
this.barCekQH.Checked = false;
this.barCekQE.Checked = false;
}
}
private void barCekQE_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (this.barCekQE.Checked == true)
{
InitialFeatCurveType(Model.eFeatCurveType.QE);
bbi计算曲线.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
this.barCekQE.Checked = true;
this.barCekQH.Checked = false;
this.barCekQP.Checked = false;
}
}
//预览
private void barBtnPreview_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (_allAnaPoints == null || _allAnaPoints.Count < 1)
return;
var curveExpressGroup = new Model.FeatCurveExpressGroup(this._curveFitCurveInfo);
var dlg = new CurveViewDlg();
dlg.SetBindingData(curveExpressGroup.CurveQH, curveExpressGroup.CurveQE, curveExpressGroup.CurveQP, _analyStepResult.CurveCoordinateParas);
dlg.ReloadDataEvent += (rhs) =>
{
if (rhs != null)
{
_analyStepResult.CurveCoordinateParas = rhs;
}
};
dlg.ShowDialog();
}
//
private void barCekLableDisplay_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
this.chartControl1.SetCurveLabelVisible(this.barCekLableDisplay.Checked);
}
private void bci开始手动打点_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (this._currentCurveType == eFeatCurveType.QH)
this.chartControl1.StartPickPoint4Fit(_curveFitCurveInfo.FitTypeQH);
else if (this._currentCurveType == eFeatCurveType.QE)
this.chartControl1.StartPickPoint4Fit(_curveFitCurveInfo.FitTypeQE);
else if (this._currentCurveType == eFeatCurveType.QP)
this.chartControl1.StartPickPoint4Fit(_curveFitCurveInfo.FitTypeQP);
else
this.chartControl1.StartPickPoint4Fit(_curveFitCurveInfo.FitTypeQH);
this.chartControl1.SetCurveVisible(false);
for (int j = 0; j < this.ribbonControl1.Items.Count; j++)
{
if (this.ribbonControl1.Items[j] != bsi打点拟合 && this.ribbonControl1.Items[j] != bci结束手动打点)
this.ribbonControl1.Items[j].Enabled = false;
}
bci结束手动打点.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
}
private void bci结束手动打点_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
var points = this.chartControl1.EndPickPoint4Fit();
for (int j = 0; j < this.ribbonControl1.Items.Count; j++)
{
this.ribbonControl1.Items[j].Enabled = true;
}
if (points != null && points.Count > 3)
{
this._curveFitCurveInfo.SetPickSelPoint(this._currentCurveType, points);
}
bci结束手动打点.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
}
private void bbi清理框选打点_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
this.chartControl1.SetCustomerPointInfo(null);
if (this._currentCurveType == eFeatCurveType.QH)
{
this._curveFitCurveInfo.CurveQH.DefinePoints = null;
}
if (this._currentCurveType == eFeatCurveType.QE)
{
this._curveFitCurveInfo.CurveQE.DefinePoints = null;
}
if (this._currentCurveType == eFeatCurveType.QP)
{
this._curveFitCurveInfo.CurveQP.DefinePoints = null;
}
this.chartControl1.SetCurveVisible(false);
MessageBox.Show("已清理");
}
private void bbi清理手动打点_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
this.chartControl1.SetCustomerPointInfo(null);
if (this._currentCurveType == eFeatCurveType.QH)
{
this._curveFitCurveInfo.CurveQH.DefinePoints = null;
}
if (this._currentCurveType == eFeatCurveType.QE)
{
this._curveFitCurveInfo.CurveQE.DefinePoints = null;
}
if (this._currentCurveType == eFeatCurveType.QP)
{
this._curveFitCurveInfo.CurveQP.DefinePoints = null;
}
this.chartControl1.SetCurveVisible(false);
MessageBox.Show("已清理");
}
private void bbi开始框选拟合_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (this._currentCurveType == eFeatCurveType.QH)
this.chartControl1.StartBoxPoint4Fit(_curveFitCurveInfo.FitTypeQH);
else if (this._currentCurveType == eFeatCurveType.QE)
this.chartControl1.StartBoxPoint4Fit(_curveFitCurveInfo.FitTypeQE);
else if (this._currentCurveType == eFeatCurveType.QP)
this.chartControl1.StartBoxPoint4Fit(_curveFitCurveInfo.FitTypeQP);
else
this.chartControl1.StartBoxPoint4Fit(_curveFitCurveInfo.FitTypeQH);
this.chartControl1.SetCurveVisible(false);
for (int j = 0; j < this.ribbonControl1.Items.Count; j++)
{
if (this.ribbonControl1.Items[j] != bsi手动框选拟合 && this.ribbonControl1.Items[j] != bbi结束框选拟合)
this.ribbonControl1.Items[j].Enabled = false;
}
bbi结束框选拟合.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
}
private void bbi结束框选拟合_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
var points = this.chartControl1.EndBoxPoint4Fit();
for (int j = 0; j < this.ribbonControl1.Items.Count; j++)
{
this.ribbonControl1.Items[j].Enabled = true;
}
if (points != null && points.Count > 3)
{
this._curveFitCurveInfo.SetPickSelPoint(this._currentCurveType, points);
}
bbi结束框选拟合.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
}
#endregion
#region 导出
//Excel
private void barBtnExportExcel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
var express = GetFeatCurveExpressGroup();
if (express == null)
return;
IStation.WinFrmUI.Curve.ExportToXLS.Export(express.CurveQH, express.CurveQE, express.CurveQP, 12);
}
private void barBtnSystem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
var express = GetFeatCurveExpressGroup();
if (express == null)
return;
var dlg = new SaveFileDialog();
dlg.Filter = "express 文件|*.express";
if (dlg.ShowDialog() != DialogResult.OK)
return;
if (!CurveExpressFileHelper.ExportCurveExpress(dlg.FileName, express, out string msg))
{
XtraMessageBox.Show(msg);
return;
}
XtraMessageBox.Show("导出成功!");
}
private Model.FeatCurveExpressGroup GetFeatCurveExpressGroup()
{
if (_allAnaPoints == null || _allAnaPoints.Count < 1)
{
XtraMessageBox.Show("无分析点数据!");
return default;
}
if (this._curveFitCurveInfo == null)
{
XtraMessageBox.Show("无流量扬程线数据!");
return default;
}
if (this._curveFitCurveInfo.CurveQH == null)
{
var allPoints = _allAnaPoints.Select(x => new Model.CurvePoint(x.Qa, x.Ha)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQH, 10);
this._curveFitCurveInfo.CurveQH = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQH);
}
if (this._curveFitCurveInfo.CurveQP == null)
{
var allPoints = _allAnaPoints.Select(x => new Model.CurvePoint(x.Qa, x.Pa)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQP, 10);
this._curveFitCurveInfo.CurveQP = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQP);
}
if (this._curveFitCurveInfo.CurveQE == null)
{
var allPoints = _allAnaPoints.Select(x => new Model.CurvePoint(x.Qa, x.Ea)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQE, 10);
this._curveFitCurveInfo.CurveQE = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQE);
}
var curveExpressGroup = new Model.FeatCurveExpressGroup(this._curveFitCurveInfo);
return curveExpressGroup;
}
//点视图
private void barBtnVEtaRecordView_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
WaitFrmHelper.ShowWaitForm();
var dlg = new ViewSingleStepChartDlg();
dlg.Shown += delegate { WaitFrmHelper.HideWaitForm(); };
dlg.SetBindingData(_projectId, _sceneId, _analyStep);
dlg.ShowDialog();
}
private void barBtnSelectReferenceCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
WaitFrmHelper.ShowWaitForm();
var dlg = new WinFrmUI.Product.SelectPumpCurveDlg();
dlg.Shown += delegate { WaitFrmHelper.HideWaitForm(); };
var scene = new BLL.Scene().GetById(_projectId, _sceneId);
dlg.SetBindingData(_projectId, scene.BelongType, scene.BelongId);
if (dlg.ShowDialog() != DialogResult.OK)
return;
_referenceCurve = dlg.Seleted;
RefreshFitCurve();
}
private void barCekReferenceCurveVisble_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
this.chartControl1.SetReferenceCurveVisible(this.barCekReferenceCurveVisble.Checked);
}
private void barBtnDelPoint_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
var dlg = new AnalySingleStepGridDelDlg();
var list = _allAnaPoints.Select(x => x).ToList();
dlg.SetBindingData(_projectId, _sceneId, _analyStep.Name, list);
dlg.ReloadDataEvent += (rhs) =>
{
_allAnaPoints = rhs;
this.chartControl1.InitialPointInfo(_allAnaPoints);
};
dlg.ShowDialog();
}
#endregion
//还原
private void barBtnRestore_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (_analyStep == null)
return;
if (XtraMessageBox.Show("确认还原能效数据?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
var bol = new BLL.CurveAnaRecord().RestoreByRunningFlagAndRunningCount(_projectId, _sceneId, _analyStep.AnaSchemeId, _analyStep.RunningFlag, _analyStep.RunningCount, _analyStep.MinTime, _analyStep.MaxTime);
if (bol)
{
var bll = new BLL.CurveAnaStepResult();
if (bll.IsExistByAnaStepId(_projectId, _sceneId, _analyStep.AnaSchemeId, _analyStep.Id))
{
if (!new BLL.CurveAnaStepResult().DeleteById(_projectId, _sceneId, _analyStep.AnaSchemeId, _analyStep.Id))
{
TipFrmHelper.ShowWaining("步骤结论删除失败!", 2000);
return;
}
}
SetBindingData(_projectId, _sceneId, _analyStep);
InitialFeatCurveType(_currentCurveType);
}
else
{
TipFrmHelper.ShowWaining("还原失败", 1000);
}
}
}
private void barBtnCurveExpress_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (this._curveFitCurveInfo.CurveQH == null)
{
var allPoints = _allAnaPoints.Select(x => new Model.CurvePoint(x.Qa, x.Ha)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQH, 10);
this._curveFitCurveInfo.CurveQH = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQH);
}
if (this._curveFitCurveInfo.CurveQP == null)
{
var allPoints = _allAnaPoints.Where(x => x.Pa != IStation.Default.Error).Select(x => new Model.CurvePoint(x.Qa, x.Pa)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQP, 10);
this._curveFitCurveInfo.CurveQP = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQP);
}
if (this._curveFitCurveInfo.CurveQE == null)
{
var allPoints = _allAnaPoints.Where(x => x.Ea != IStation.Default.Error).Select(x => new Model.CurvePoint(x.Qa, x.Ea)).ToList();
var qpCurvePointList = FitCurveHelper.GetFitPoints(allPoints, _curveFitCurveInfo.FitTypeQE, 10);
this._curveFitCurveInfo.CurveQE = new CurveExpress(qpCurvePointList, _curveFitCurveInfo.FitTypeQE);
}
var theSetDlg = new DispCurveEquationDlg();
theSetDlg.SetCurveInfo(this._curveFitCurveInfo.CurveQH, this._curveFitCurveInfo.CurveQE, this._curveFitCurveInfo.CurveQP);
theSetDlg.Show();
}
private void barBtnMonth_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
/* var dlg = new ViewDiffMonthChartDlg();
dlg.SetBindingData(_currentCurveType, _allAnaPoints);
dlg.ShowDialog();*/
var dlg = new ViewTimeFilterChartDlg();
dlg.SetBindingData(_currentCurveType, _allAnaPoints);
dlg.ShowDialog();
}
}
}