using Yw.WinFrmUI.Phart;
|
|
namespace HStation.WinFrmUI
|
{
|
/// <summary>
|
/// 图表Vmo 扩展方法
|
/// </summary>
|
public static class PhartVmoExtensions
|
{
|
#region ViewModel
|
|
#region PumpCurve
|
|
/// <summary>
|
/// 获取默认的泵曲线
|
/// </summary>
|
public static PumpPerformCurveViewModel 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();
|
}
|
|
/// <summary>
|
/// 获取默认的泵曲线
|
/// </summary>
|
public static PumpPerformCurveViewModel GetDefaultPumpCurveViewMdoel(this List<Yw.Vmo.PhartGraphVmo> 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;
|
}
|
|
/// <summary>
|
/// 获取变速泵曲线列表
|
/// </summary>
|
public static List<PumpPerformCurveViewModel> GetVariableSpeedPumpCurveViewMdoelList(this Yw.Vmo.PhartDiagramExGraphListVmo vmo)
|
{
|
if (vmo == null)
|
{
|
return default;
|
}
|
var graph_list = vmo.GraphList;
|
if (graph_list == null || !graph_list.Any())
|
{
|
return default;
|
}
|
var vm_list = graph_list.GetPumpCurveViewMdoelList();
|
if (vm_list == null || !vm_list.Any())
|
{
|
return default;
|
}
|
var vm_default = vm_list.OrderBy(x => x.Hz).LastOrDefault();
|
vm_list.Remove(vm_default);
|
return vm_list;
|
}
|
|
|
/// <summary>
|
/// 获取泵曲线列表
|
/// </summary>
|
public static List<PumpPerformCurveViewModel> 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();
|
}
|
|
/// <summary>
|
/// 获取泵曲线列表
|
/// </summary>
|
public static List<PumpPerformCurveViewModel> GetPumpCurveViewMdoelList(this List<Yw.Vmo.PhartGraphVmo> 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 = QHGraphParasViewModel.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 = QEGraphParasViewModel.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 = QPGraphParasViewModel.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<PumpPerformCurveViewModel>();
|
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 PumpPerformCurveViewModel();
|
vm.Hz = hz;
|
vm.N = n;
|
vm.CurveQH = new QHViewModel(qh);
|
if (qe != null)
|
{
|
vm.CurveQE = new QEViewModel(qe);
|
}
|
if (qp != null)
|
{
|
vm.CurveQP = new QPViewModel(qp);
|
}
|
vm_list.Add(vm);
|
}
|
|
return vm_list;
|
}
|
|
/// <summary>
|
/// 获取泵曲线列表
|
/// </summary>
|
public static List<(double hz, double n, Yw.Vmo.PhartGraphVmo QH, Yw.Vmo.PhartGraphVmo QE, Yw.Vmo.PhartGraphVmo QP)> GetVmoList(this List<Yw.Vmo.PhartGraphVmo> vmo_list)
|
{
|
if (vmo_list == null || !vmo_list.Any())
|
{
|
return default;
|
}
|
|
var filter_list = new List<(double, double, Yw.Ahart.eCurveType, Yw.Vmo.PhartGraphVmo)>();
|
foreach (var vmo in vmo_list)
|
{
|
if (vmo.GraphType == (int)HStation.PhartRelation.eGraphType.QH)
|
{
|
var paras = QHGraphParasViewModel.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, vmo));
|
}
|
}
|
else if (vmo.GraphType == (int)HStation.PhartRelation.eGraphType.QE)
|
{
|
var paras = QEGraphParasViewModel.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, vmo));
|
}
|
}
|
else if (vmo.GraphType == (int)HStation.PhartRelation.eGraphType.QP)
|
{
|
var paras = QPGraphParasViewModel.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, vmo));
|
}
|
}
|
}
|
|
if (filter_list == null || !filter_list.Any())
|
{
|
return default;
|
}
|
|
var list = new List<(double hz, double n, Yw.Vmo.PhartGraphVmo QH, Yw.Vmo.PhartGraphVmo QE, Yw.Vmo.PhartGraphVmo QP)>();
|
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 = curve_list.Find(x => x.GraphType == (int)HStation.PhartRelation.eGraphType.QH);
|
var qe = curve_list.Find(x => x.GraphType == (int)HStation.PhartRelation.eGraphType.QE);
|
var qp = curve_list.Find(x => x.GraphType == (int)HStation.PhartRelation.eGraphType.QP);
|
|
if (qh == null)
|
continue;
|
|
list.Add((hz, n, qh, qe, qp));
|
}
|
|
return list;
|
}
|
|
/// <summary>
|
/// 获取泵曲线列表
|
/// </summary>
|
public static (Yw.Vmo.PhartGraphVmo QH, Yw.Vmo.PhartGraphVmo QE, Yw.Vmo.PhartGraphVmo QP) GetDefaultVmo(this Yw.Vmo.PhartDiagramExGraphListVmo vmo)
|
{
|
if (vmo == null)
|
{
|
return default;
|
}
|
var graph_list = vmo.GraphList;
|
if (graph_list == null || !graph_list.Any())
|
{
|
return default;
|
}
|
var vmo_list = graph_list.GetVmoList();
|
if (vmo_list == null || !vmo_list.Any())
|
{
|
return default;
|
}
|
var vmo_def = vmo_list.OrderBy(x => x.hz).LastOrDefault();
|
return new(vmo_def.QH, vmo_def.QE, vmo_def.QP);
|
}
|
|
|
#endregion
|
|
#region EqualE
|
|
/// <summary>
|
/// 获取等效线列表
|
/// </summary>
|
public static List<EqualEViewModel> 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();
|
}
|
|
/// <summary>
|
/// 获取等效线列表
|
/// </summary>
|
public static List<EqualEViewModel> GetCurveEqualEViewMdoelList(this List<Yw.Vmo.PhartGraphVmo> 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<EqualEViewModel>();
|
foreach (var vmo in vmo_list)
|
{
|
var graph_paras = Yw.WinFrmUI.Phart.EqualEGraphParasViewModel.ToModel(vmo.GraphParas);
|
var geometry_paras = Yw.WinFrmUI.Phart.CurveGeometryParasViewModel.ToModel(vmo.GeometryInfo);
|
var curve = vmo.GetPerformCurve() as Yw.Pump.CurveEqualE;
|
if (curve == null)
|
continue;
|
var vm = new EqualEViewModel(curve, graph_paras, geometry_paras);
|
vm_list.Add(vm);
|
}
|
return vm_list;
|
}
|
|
|
#endregion
|
|
#region EqualP
|
|
/// <summary>
|
/// 获取等功线列表
|
/// </summary>
|
public static List<EqualPViewModel> 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();
|
}
|
|
/// <summary>
|
/// 获取等功线列表
|
/// </summary>
|
public static List<EqualPViewModel> GetCurveEqualPViewMdoelList(this List<Yw.Vmo.PhartGraphVmo> 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<EqualPViewModel>();
|
foreach (var vmo in vmo_list)
|
{
|
var graph_paras = EqualPGraphParasViewModel.ToModel(vmo.GraphParas);
|
var geometry_paras = Yw.WinFrmUI.Phart.CurveGeometryParasViewModel.ToModel(vmo.GeometryInfo);
|
var curve = vmo.GetPerformCurve() as Yw.Pump.CurveEqualP;
|
if (curve == null)
|
continue;
|
var vm = new EqualPViewModel(curve, graph_paras, geometry_paras);
|
vm_list.Add(vm);
|
}
|
return vm_list;
|
}
|
|
|
#endregion
|
|
#endregion
|
|
#region Perform
|
|
/// <summary>
|
/// 获取特性曲线
|
/// </summary>
|
public static Yw.Ahart.PerformCurveBase GetPerformCurve(this Yw.Vmo.PhartGraphVmo vmo)
|
{
|
if (vmo == null)
|
return default;
|
var performCurve = PhartGraphHelper.GetPerformCurve((Yw.Ahart.eCurveType)vmo.GraphType, vmo.GeometryInfo);
|
return performCurve;
|
}
|
|
/// <summary>
|
/// 获取性能点列表
|
/// </summary>
|
public static List<Yw.Geometry.Point2d> GetFeatPointList(this Yw.Vmo.PhartGraphVmo vmo, int point_number = 12, double min_space = 0.0001)
|
{
|
if (vmo == null)
|
return default;
|
var curve = vmo.GetPerformCurve();
|
var pts = curve.FeatCurve.GetPointList(point_number, min_space);
|
return pts?.ToList();
|
}
|
|
/// <summary>
|
/// 获取特性曲线
|
/// </summary>
|
public static (Yw.Ahart.eCurveType curve_type, Yw.Ahart.eFeatType feat_type, List<Yw.Geometry.Point2d> define_pt_list, List<Yw.Geometry.Point2d> 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 = PhartGraphHelper.GetPerformCurve((Yw.Ahart.eCurveType)vmo.GraphType, vmo.GeometryInfo);
|
var curve_type = (Yw.Ahart.eCurveType)vmo.GraphType;
|
var feat_type = performCurve.FeatType;
|
var line_pt_list = performCurve.FeatCurve.GetPointList(30);
|
if (define_pt_list == null)
|
{
|
define_pt_list = line_pt_list?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
|
}
|
return new(curve_type, feat_type, define_pt_list, line_pt_list);
|
}
|
|
|
|
#endregion
|
|
/// <summary>
|
/// 获取特性曲线
|
/// </summary>
|
public static CurveGeometryParasViewModel 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 CurveGeometryParasViewModel.ToModel(vmo.GeometryParas);
|
}
|
|
}
|
|
}
|