namespace HStation.WinFrmUI
{
///
/// 图表Vmo 扩展方法
///
public static class PhartVmoExtensions
{
#region ViewModel
#region PumpCurve
///
/// 获取默认的泵曲线
///
public static PumpCurveViewModel GetDefaultPumpCurveViewMdoel(this Yw.Vmo.PhartDiagramExGraphListVmo vmo)
{
if (vmo == null)
{
return default;
}
var graph_list = vmo.GraphList;
if (graph_list == null || !graph_list.Any())
{
return default;
}
return graph_list.GetDefaultPumpCurveViewMdoel();
}
///
/// 获取默认的泵曲线
///
public static PumpCurveViewModel GetDefaultPumpCurveViewMdoel(this List vmo_list)
{
if (vmo_list == null || !vmo_list.Any())
{
return default;
}
var vm_list = vmo_list.GetPumpCurveViewMdoelList();
if (vmo_list == null || !vm_list.Any())
{
return default;
}
var vm = vm_list.OrderBy(x => x.Hz).Last();
return vm;
}
///
/// 获取泵曲线列表
///
public static List GetPumpCurveViewMdoelList(this Yw.Vmo.PhartDiagramExGraphListVmo vmo)
{
if (vmo == null)
{
return default;
}
var graph_list = vmo.GraphList;
if (graph_list == null || !graph_list.Any())
{
return default;
}
return graph_list.GetPumpCurveViewMdoelList();
}
///
/// 获取泵曲线列表
///
public static List GetPumpCurveViewMdoelList(this List vmo_list)
{
if (vmo_list == null || !vmo_list.Any())
{
return default;
}
var filter_list = new List<(double, double, Yw.Ahart.eCurveType, object)>();
foreach (var vmo in vmo_list)
{
if (vmo.GraphType == (int)HStation.PhartRelation.eGraphType.QH)
{
var paras = HStation.Model.QHGraphParasModel.ToModel(vmo.GraphParas);
if (paras != null)
{
var curve = Yw.Pump.CurveQHHelper.ToModel(vmo.GeometryInfo);
filter_list.Add((paras.Hz, paras.N, Yw.Ahart.eCurveType.QH, curve));
}
}
else if (vmo.GraphType == (int)HStation.PhartRelation.eGraphType.QE)
{
var paras = HStation.Model.QEGraphParasModel.ToModel(vmo.GraphParas);
if (paras != null)
{
var curve = Yw.Pump.CurveQEHelper.ToModel(vmo.GeometryInfo);
filter_list.Add((paras.Hz, paras.N, Yw.Ahart.eCurveType.QE, curve));
}
}
else if (vmo.GraphType == (int)HStation.PhartRelation.eGraphType.QP)
{
var paras = HStation.Model.QPGraphParasModel.ToModel(vmo.GraphParas);
if (paras != null)
{
var curve = Yw.Pump.CurveQPHelper.ToModel(vmo.GeometryInfo);
filter_list.Add((paras.Hz, paras.N, Yw.Ahart.eCurveType.QP, curve));
}
}
}
if (filter_list == null || !filter_list.Any())
{
return default;
}
var vm_list = new List();
var group = filter_list.GroupBy(x => new { x.Item1, x.Item2 });
foreach (var item_list in group)
{
var hz = item_list.Key.Item1;
var n = item_list.Key.Item2;
var curve_list = item_list.Select(x => x.Item4).ToList();
var qh = (Yw.Pump.CurveQH)curve_list.Find(x => x is Yw.Pump.CurveQH);
var qe = (Yw.Pump.CurveQE)curve_list.Find(x => x is Yw.Pump.CurveQE);
var qp = (Yw.Pump.CurveQP)curve_list.Find(x => x is Yw.Pump.CurveQP);
if (qh == null)
continue;
var vm = new PumpCurveViewModel();
vm.Hz = hz;
vm.N = n;
vm.CurveQH = new CurveQHViewModel(qh);
if (qe != null)
{
vm.CurveQE = new CurveQEViewModel(qe);
}
if (qp != null)
{
vm.CurveQP = new CurveQPViewModel(qp);
}
vm_list.Add(vm);
}
return vm_list;
}
#endregion
#region EqualE
///
/// 获取等效线列表
///
public static List GetCurveEqualEViewMdoelList(this Yw.Vmo.PhartDiagramExGraphListVmo vmo)
{
if (vmo == null)
{
return default;
}
var graph_list = vmo.GraphList;
if (graph_list == null || !graph_list.Any())
{
return default;
}
return graph_list.GetCurveEqualEViewMdoelList();
}
///
/// 获取等效线列表
///
public static List GetCurveEqualEViewMdoelList(this List vmo_list)
{
vmo_list = vmo_list?.Where(x => x.GraphType == (int)HStation.PhartRelation.eGraphType.EqualE).ToList();
if (vmo_list == null || !vmo_list.Any())
{
return default;
}
var vm_list = new List();
foreach (var vmo in vmo_list)
{
var paras = HStation.Model.EqualEGraphParasModel.ToModel(vmo.GraphParas);
var curve = vmo.GetPerformCurve() as Yw.Pump.CurveEqualE;
if (curve == null)
continue;
var vm = new CurveEqualEViewModel(curve, paras);
vm_list.Add(vm);
}
return vm_list;
}
#endregion
#region EqualP
///
/// 获取等功线列表
///
public static List GetCurveEqualPViewMdoelList(this Yw.Vmo.PhartDiagramExGraphListVmo vmo)
{
if (vmo == null)
{
return default;
}
var graph_list = vmo.GraphList;
if (graph_list == null || !graph_list.Any())
{
return default;
}
return graph_list.GetCurveEqualPViewMdoelList();
}
///
/// 获取等功线列表
///
public static List GetCurveEqualPViewMdoelList(this List vmo_list)
{
vmo_list = vmo_list?.Where(x => x.GraphType == (int)HStation.PhartRelation.eGraphType.EqualP).ToList();
if (vmo_list == null || !vmo_list.Any())
{
return default;
}
var vm_list = new List();
foreach (var vmo in vmo_list)
{
var paras = HStation.Model.EqualPGraphParasModel.ToModel(vmo.GraphParas);
var curve = vmo.GetPerformCurve() as Yw.Pump.CurveEqualP;
if (curve == null)
continue;
var vm = new CurveEqualPViewModel(curve, paras);
vm_list.Add(vm);
}
return vm_list;
}
#endregion
#endregion
#region Perform
///
/// 获取特性曲线
///
public static Yw.Ahart.PerformCurveBase GetPerformCurve(this Yw.Vmo.PhartGraphVmo vmo)
{
if (vmo == null)
return default;
var performCurve = HStation.Service.PhartRelation.PhartGraphHelper.GetPerformCurve( (HStation.PhartRelation.eGeometryStyle) vmo.GeometryStyle, vmo.GeometryInfo);
return performCurve;
}
///
/// 获取性能点列表
///
public static List GetFeatPointList(this Yw.Vmo.PhartGraphVmo vmo, int point_number = 12, double min_space = 0.0001)
{
if (vmo == null)
return default;
var graph_type = vmo.GraphType;
var geometry_info = vmo.GeometryInfo;
var pts = HStation.Service.PhartRelation.PhartGraphHelper.GetFeatPointList((HStation.PhartRelation.eGraphType)graph_type, geometry_info, point_number, min_space);
return pts?.ToList();
}
///
/// 获取特性曲线
///
public static (Yw.Ahart.eCurveType curve_type, Yw.Ahart.eFeatType feat_type, List define_pt_list, List line_pt_list) GetCurveInfo(this Yw.Vmo.PhartGraphVmo vmo)
{
if (vmo == null)
return default;
var paras = vmo.GeometryParasModel();
var define_pt_list = paras.DefinePoints;
var performCurve = HStation.Service.PhartRelation.PhartGraphHelper.GetPerformCurve((HStation.PhartRelation.eGeometryStyle)vmo.GeometryStyle, vmo.GeometryInfo);
var curve_type = (Yw.Ahart.eCurveType)vmo.GraphType;
var feat_type = performCurve.FeatType;
var line_pt_list = performCurve.FeatCurve.GetPointList(30);
return new(curve_type, feat_type, define_pt_list, line_pt_list);
}
#endregion
///
/// 获取特性曲线
///
public static HStation.Model.FeatCurveGeometryParasModel GeometryParasModel(this Yw.Vmo.PhartGraphVmo vmo)
{
if (vmo == null)
return default;
if (string.IsNullOrEmpty(vmo.GeometryParas))
return default;
if (vmo.GeometryStyle != (int)HStation.PhartRelation.eGeometryStyle.FeatCurve)
return default;
return HStation.Model.FeatCurveGeometryParasModel.ToModel(vmo.GeometryInfo);
}
}
}