namespace Yw.WinFrmUI.Phart
|
{
|
public partial class PumpChartExcelEditCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public PumpChartExcelEditCtrl()
|
{
|
|
InitializeComponent();
|
this.gridView1.SetDefaultEditView();
|
this.gridView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
|
|
this.repImgCmbCurveType.Items.Add("流量扬程", Yw.Ahart.eCurveType.QH, -1);
|
this.repImgCmbCurveType.Items.Add("流量效率", Yw.Ahart.eCurveType.QE, -1);
|
this.repImgCmbCurveType.Items.Add("流量功率", Yw.Ahart.eCurveType.QP, -1);
|
|
this.repImgCmbFeatType.Items.Add("穿过点", Yw.Ahart.eFeatType.Through, -1);
|
this.repImgCmbFeatType.Items.Add("二次拟合", Yw.Ahart.eFeatType.Quadratic, -1);
|
this.repImgCmbFeatType.Items.Add("三次拟合", Yw.Ahart.eFeatType.Cubic, -1);
|
this.repImgCmbFeatType.Items.Add("四次拟合", Yw.Ahart.eFeatType.Quartic, -1);
|
|
this.repImgCmbEditModel.Items.Add("鼠标", 0, -1);
|
this.repImgCmbEditModel.Items.Add("键盘", 1, -1);
|
|
this.pumpEditChart1.DefinePointChangedEvent += PumpEditChart1_DefinePointChangedEvent1;
|
this.pumpEditChart1.SelectedPointIndexChangedEvent += (index) =>
|
{
|
this.gridView1.FocusedRowHandle = index;
|
};
|
|
this.Enabled = false;
|
|
}
|
|
|
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 Yw.Ahart.eFeatType _feat_type_qh;
|
private Yw.Ahart.eFeatType _feat_type_qe;
|
private Yw.Ahart.eFeatType _feat_type_qp;
|
|
private Yw.Ahart.eCurveType _edit_curve_type;
|
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData(
|
List<Yw.Geometry.Point2d> def_qh_pt_list,
|
List<Yw.Geometry.Point2d> def_qe_pt_list,
|
List<Yw.Geometry.Point2d> def_qp_pt_list,
|
Yw.Ahart.eFeatType feat_type_qh = Ahart.eFeatType.Cubic,
|
Yw.Ahart.eFeatType feat_type_qe = Ahart.eFeatType.Cubic,
|
Yw.Ahart.eFeatType feat_type_qp = Ahart.eFeatType.Cubic,
|
Yw.Ahart.eCurveType curve_type = Ahart.eCurveType.QH)
|
{
|
_edit_curve_type = curve_type;
|
|
_feat_type_qh = feat_type_qh;
|
_def_qh_pt_list = def_qh_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList();
|
|
_feat_type_qe = feat_type_qe;
|
_def_qe_pt_list = def_qe_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList();
|
|
_feat_type_qp = feat_type_qp;
|
_def_qp_pt_list = def_qp_pt_list?.Select(x => new Geometry.Point2d(x.X, x.Y)).ToList();
|
|
|
|
SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type);
|
|
this.barImgCmbCurveType.EditValue = _edit_curve_type;
|
this.barEditModel.EditValue = 0;
|
this.barFeatType.EditValue = _feat_type_qh;
|
this.bindingSource1.DataSource = _def_qh_pt_list;
|
this.bindingSource1.ResetBindings(false);
|
|
this.Enabled = true;
|
}
|
|
private void PumpEditChart1_DefinePointChangedEvent1(Ahart.eCurveType curve_type, List<Geometry.Point2d> pt_list)
|
{
|
switch (curve_type)
|
{
|
case Ahart.eCurveType.QH:
|
{
|
_def_qh_pt_list = pt_list;
|
this.bindingSource1.DataSource = _def_qh_pt_list;
|
}
|
break;
|
case Ahart.eCurveType.QE:
|
{
|
_def_qe_pt_list = pt_list;
|
this.bindingSource1.DataSource = _def_qe_pt_list;
|
}
|
break;
|
case Ahart.eCurveType.QP:
|
{
|
_def_qp_pt_list = pt_list;
|
this.bindingSource1.DataSource = _def_qp_pt_list;
|
}
|
break;
|
}
|
|
this.bindingSource1.ResetBindings(false);
|
SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type);
|
}
|
|
|
|
//设置图表
|
private void SetChart(
|
List<Yw.Geometry.Point2d> def_qh_pt_list,
|
List<Yw.Geometry.Point2d> def_qe_pt_list,
|
List<Yw.Geometry.Point2d> def_qp_pt_list,
|
Yw.Ahart.eFeatType feat_type_qh,
|
Yw.Ahart.eFeatType feat_type_qe,
|
Yw.Ahart.eFeatType feat_type_qp,
|
Yw.Ahart.eCurveType curve_type
|
)
|
{
|
var fit_qh_pt_list = def_qh_pt_list?.GetPointList(feat_type_qh);
|
var fit_qe_pt_list = def_qe_pt_list?.GetPointList(feat_type_qe);
|
var fit_qp_pt_list = def_qp_pt_list?.GetPointList(feat_type_qp);
|
this.pumpEditChart1.SetBindingData(def_qh_pt_list, fit_qh_pt_list, def_qe_pt_list, fit_qe_pt_list, def_qp_pt_list, fit_qp_pt_list, curve_type);
|
}
|
|
|
|
//值变换
|
private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
|
{
|
SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type);
|
}
|
|
//曲线类型
|
private void barImgCmbCurveType_EditValueChanged(object sender, EventArgs e)
|
{
|
_edit_curve_type = (Yw.Ahart.eCurveType)this.barImgCmbCurveType.EditValue;
|
var (axis_x_title, axis_y_title) = PhartAxisTitleHelper.Get(_edit_curve_type);
|
this.colX.Caption = axis_x_title;
|
this.colY.Caption = axis_y_title;
|
|
switch (_edit_curve_type)
|
{
|
case Ahart.eCurveType.QH:
|
{
|
this.bindingSource1.DataSource = _def_qh_pt_list;
|
}
|
break;
|
case Ahart.eCurveType.QE:
|
{
|
this.bindingSource1.DataSource = _def_qe_pt_list;
|
}
|
break;
|
case Ahart.eCurveType.QP:
|
{
|
this.bindingSource1.DataSource = _def_qp_pt_list;
|
}
|
break;
|
}
|
this.bindingSource1.ResetBindings(false);
|
SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type);
|
}
|
|
|
//拟合类型
|
private void barFeatType_EditValueChanged(object sender, EventArgs e)
|
{
|
var feat_type = (Yw.Ahart.eFeatType)this.barFeatType.EditValue;
|
switch (_edit_curve_type)
|
{
|
case Ahart.eCurveType.QH: _feat_type_qh = feat_type; break;
|
case Ahart.eCurveType.QE: _feat_type_qe = feat_type; break;
|
case Ahart.eCurveType.QP: _feat_type_qp = feat_type; break;
|
}
|
SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type);
|
}
|
|
//鼠标模式
|
private void barEditModel_EditValueChanged(object sender, EventArgs e)
|
{
|
var index = (int)this.barEditModel.EditValue;
|
this.pumpEditChart1.MouseModel = index == 0;
|
}
|
|
//计算
|
private void barBtnCalc_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
if (_def_qh_pt_list == null || !_def_qh_pt_list.Any())
|
return;
|
bool is_from_zero;
|
if (_def_qh_pt_list.Last().X > 20)
|
is_from_zero = _def_qh_pt_list.First().X < 1;
|
else
|
is_from_zero = _def_qh_pt_list.First().X < 0.3;
|
|
switch (_edit_curve_type)
|
{
|
case Ahart.eCurveType.QE:
|
{
|
_def_qe_pt_list = Yw.Pump.CalculationHelper.CalcuE(_def_qh_pt_list, _feat_type_qh, _def_qp_pt_list, _feat_type_qp, Yw.Pump.ConstantParas.WaterDensity, is_from_zero);
|
this.bindingSource1.DataSource = _def_qe_pt_list;
|
}
|
break;
|
case Ahart.eCurveType.QP:
|
{
|
double ref_zero_power = -1;
|
if (_def_qp_pt_list != null && _def_qp_pt_list.Count > 0)
|
ref_zero_power = _def_qp_pt_list.First().Y;
|
_def_qp_pt_list = Yw.Pump.CalculationHelper.CalcuP(_feat_type_qp, _def_qh_pt_list, _feat_type_qh, _def_qe_pt_list, _feat_type_qe, Yw.Pump.ConstantParas.WaterDensity, ref_zero_power, is_from_zero);
|
this.bindingSource1.DataSource = _def_qp_pt_list;
|
}
|
break;
|
}
|
this.bindingSource1.ResetBindings(false);
|
SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type);
|
}
|
|
//添加点
|
private void barAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
if (_def_qh_pt_list == null || !_def_qh_pt_list.Any())
|
return;
|
List<Yw.Geometry.Point2d> def_pt_list = null;
|
switch (_edit_curve_type)
|
{
|
case Ahart.eCurveType.QH: def_pt_list = _def_qh_pt_list; break;
|
case Ahart.eCurveType.QE: def_pt_list = _def_qe_pt_list; break;
|
case Ahart.eCurveType.QP: def_pt_list = _def_qp_pt_list; break;
|
}
|
if (def_pt_list == null)
|
return;
|
double x = 0;
|
double y = 1;
|
if (def_pt_list.Count > 0)
|
{
|
x = def_pt_list.Last().X;
|
y = def_pt_list.Last().Y;
|
}
|
def_pt_list.Add(new Geometry.Point2d(x, y));
|
this.bindingSource1.ResetBindings(false);
|
this.gridView1.FocusedRowHandle = def_pt_list.Count - 1;
|
SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type);
|
}
|
|
|
//删除点
|
private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
if (_def_qh_pt_list == null || !_def_qh_pt_list.Any())
|
return;
|
List<Yw.Geometry.Point2d> def_pt_list = null;
|
Yw.Ahart.eFeatType feat_type = Ahart.eFeatType.Cubic;
|
switch (_edit_curve_type)
|
{
|
case Ahart.eCurveType.QH: def_pt_list = _def_qh_pt_list; feat_type=_feat_type_qh; break;
|
case Ahart.eCurveType.QE: def_pt_list = _def_qe_pt_list; feat_type = _feat_type_qe; break;
|
case Ahart.eCurveType.QP: def_pt_list = _def_qp_pt_list; feat_type = _feat_type_qp; break;
|
}
|
var row = this.gridView1.GetCurrentViewModel(def_pt_list);
|
if (row == null)
|
return;
|
var count = def_pt_list.Count - 1;
|
switch (feat_type)
|
{
|
case Ahart.eFeatType.Cubic:
|
{
|
if (count < 4)
|
{
|
TipFormHelper.ShowInfo("点数少于4个点");
|
return;
|
}
|
}
|
break;
|
case Ahart.eFeatType.Through:
|
{
|
if (count < 1)
|
{
|
TipFormHelper.ShowInfo("点数少于1个点");
|
return;
|
}
|
}
|
break;
|
case Ahart.eFeatType.Quadratic:
|
{
|
if (count < 3)
|
{
|
TipFormHelper.ShowInfo("点数少于3个点");
|
return;
|
}
|
}
|
break;
|
case Ahart.eFeatType.Quartic:
|
{
|
if (count < 5)
|
{
|
TipFormHelper.ShowInfo("点数少于5个点");
|
return;
|
}
|
}
|
break;
|
}
|
def_pt_list.Remove(row);
|
this.bindingSource1.ResetBindings(false);
|
SetChart(_def_qh_pt_list, _def_qe_pt_list, _def_qp_pt_list, _feat_type_qh, _feat_type_qe, _feat_type_qp, _edit_curve_type);
|
}
|
|
/// <summary>
|
/// 获取数据
|
/// </summary>
|
public bool Get(
|
out List<Yw.Geometry.Point2d> def_qh_pt_list,
|
out List<Yw.Geometry.Point2d> def_qe_pt_list,
|
out List<Yw.Geometry.Point2d> def_qp_pt_list,
|
out Yw.Ahart.eFeatType feat_type_qh,
|
out Yw.Ahart.eFeatType feat_type_qe,
|
out Yw.Ahart.eFeatType feat_type_qp)
|
{
|
def_qh_pt_list = _def_qh_pt_list;
|
def_qe_pt_list = _def_qe_pt_list;
|
def_qp_pt_list = _def_qp_pt_list;
|
feat_type_qh = _feat_type_qh;
|
feat_type_qe = _feat_type_qe;
|
feat_type_qp = _feat_type_qp;
|
if (def_qh_pt_list == null || !def_qh_pt_list.Any())
|
return false;
|
return true;
|
}
|
|
|
}
|
|
}
|