using Yw.WinFrmUI.Bimface;
namespace HStation.WinFrmUI
{
///
/// 计算结果标签辅助类
///
public class SimulationCalcuResultLabelHelper
{
///
///
///
public SimulationCalcuResultLabelHelper
(
SimulationCalcuResultHelper calcuResultHelper,
ISimulationCalcuResultLabelView view
)
{
_calcuResultHelper = calcuResultHelper;
_views = new List() { view };
}
private SimulationCalcuResultHelper _calcuResultHelper = null;//计算结果辅助类
private List _views = null;//视图列表
///
/// 可见性
///
public bool Visible
{
get { return _visible; }
set { _visible = value; }
}
private bool _visible = false;
///
/// 设置
///
public void Set()
{
if (this.Visible)
{
var labels = GetLabels();
if (labels != null && labels.Count > 0)
{
_views.ForEach(async x => await x.SetLogicCalcuCustomLabels(labels));
return;
}
}
_views.ForEach(async x => await x.ClearLogicCalcuCustomLabels());
}
//获取计算标签
private List GetLabels()
{
if (!_calcuResultHelper.Initialized)
{
return default;
}
var allCalcuResultVisualDict = _calcuResultHelper.GetVisualDict();
var allCalcuLabels = new List();
#region 水池
_calcuResultHelper.HydroInfo.GetAllTanks()?.ForEach(x =>
{
var calcuTankResult = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuTankResult;
var customLabel = new LogicCalcuCustomLabel();
customLabel.Id = x.Code;
customLabel.Distance = 50000;
customLabel.Data = new List()
{
new LogicCalcuCustomLabelItem(){ Name="水位",Value=Math.Round(calcuTankResult.CalcuL.Value,2).ToString(),Unit="m"},
};
allCalcuLabels.Add(customLabel);
});
#endregion
#region 水泵
_calcuResultHelper.HydroInfo.Pumps?.ForEach(x =>
{
var hz = Math.Round(x.RatedHz * x.SpeedRatio);
var calcuPumpResult = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuPumpResult;
if (calcuPumpResult != null)
{
var pumpCustomLabel = new LogicCalcuCustomLabel();
pumpCustomLabel.Id = x.Code;
pumpCustomLabel.Distance = 50000;
pumpCustomLabel.Data = new List()
{
new LogicCalcuCustomLabelItem(){ Name="状态",Value=HydroLinkStatusHelper.GetStatusName(x.LinkStatus),Unit=string.Empty},
new LogicCalcuCustomLabelItem(){ Name="频率",Value=x.LinkStatus==Yw.Hydro.PumpStatus.Open?hz.ToString():"0",Unit="hz"},
new LogicCalcuCustomLabelItem(){ Name="流量",Value=Math.Round(calcuPumpResult.CalcuQ.Value,1).ToString(),Unit="m³/h"},
new LogicCalcuCustomLabelItem(){ Name="进口压力",Value=Math.Round(calcuPumpResult.CalcuPr1.Value,2).ToString(),Unit="m"},
new LogicCalcuCustomLabelItem(){ Name="出口压力",Value=Math.Round(calcuPumpResult.CalcuPr2.Value,2).ToString(),Unit="m"},
};
allCalcuLabels.Add(pumpCustomLabel);
}
});
#endregion
#region 阀门
//_calcuResultHelper.HydroInfo.Valves?.ForEach(x =>
//{
// var calcuResult = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuValveResult;
// var customLabel = new LogicCalcuCustomLabel();
// customLabel.Id = x.Code;
// customLabel.Distance = 50000;
// customLabel.Data = new List()
// {
// new LogicCalcuCustomLabelItem(){ Name="流量",Value=Math.Round(calcuResult.CalcuQ.Value,1).ToString(),Unit="m³/h"},
// new LogicCalcuCustomLabelItem(){ Name="进口压力",Value=Math.Round(calcuResult.CalcuPr1.Value,2).ToString(),Unit="m"},
// new LogicCalcuCustomLabelItem(){ Name="出口压力",Value=Math.Round(calcuResult.CalcuPr2.Value,2).ToString(),Unit="m"},
// new LogicCalcuCustomLabelItem(){ Name="阀门开度",Value=Math.Round(x.OpeningDegree,0).ToString(),Unit="°"}
// };
// allCalcuLabels.Add(customLabel);
//});
#endregion
#region 扩散器
_calcuResultHelper.HydroInfo.GetAllEmitters()?.ForEach(x =>
{
var calcuEmitter = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuEmitterResult;
var emitterCustomLabel = new LogicCalcuCustomLabel();
emitterCustomLabel.Id = x.Code;
emitterCustomLabel.Distance = 50000;
emitterCustomLabel.Data = new List()
{
new LogicCalcuCustomLabelItem(){ Name="流量",Value=Math.Round(calcuEmitter.CalcuQ.Value,1).ToString(),Unit="m³/h"},
new LogicCalcuCustomLabelItem(){ Name="压力",Value=Math.Round(calcuEmitter.CalcuPr.Value,2).ToString(),Unit="m"}
};
allCalcuLabels.Add(emitterCustomLabel);
});
#endregion
#region 水力阻件
//_calcuResultHelper.HydroInfo.GetAllResistances()?.ForEach(x =>
//{
// var calcuResistanceResult = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuResistanceResult;
// var resistanceCustomLabel = new LogicCalcuCustomLabel();
// resistanceCustomLabel.Id = x.Code;
// resistanceCustomLabel.Distance = 50000;
// resistanceCustomLabel.Data = new List()
// {
// new LogicCalcuCustomLabelItem(){ Name="流量",Value=Math.Round(calcuResistanceResult.CalcuQ.Value,1).ToString(),Unit="m³/h"},
// new LogicCalcuCustomLabelItem(){ Name="进口压力",Value=Math.Round(calcuResistanceResult.CalcuPr1.Value,2).ToString(),Unit="m"},
// new LogicCalcuCustomLabelItem(){ Name="出口压力",Value=Math.Round(calcuResistanceResult.CalcuPr2.Value,2).ToString(),Unit="m"}
// };
// allCalcuLabels.Add(resistanceCustomLabel);
//});
#endregion
return allCalcuLabels;
}
}
}