using Yw.Epanet;
using Yw.Hydro;
using Yw.Model;
namespace Yw.WinFrmUI
{
///
///
///
public class HydroLossCurveHelper
{
///
/// 创建
///
public static HydroLossCurveViewModel Create
(
Yw.Model.HydroModelInfo hydroInfo,
HydroWorkingVmo working,
HydroNodeInfo node,
HydroCalcuResult calcuResult = null,
bool isHead = false,
List allEvaluationList = null
)
{
//验证
if (hydroInfo == null)
{
return default;
}
if (working == null)
{
return default;
}
if (node == null)
{
return default;
}
var vm = new HydroLossCurveViewModel();
//计算结果
if (calcuResult == null)
{
hydroInfo.UpdateWorkingInfo(working.WorkingInfo);
calcuResult = hydroInfo.Calcu(isHead, allEvaluationList);
if (!calcuResult.Succeed)
{
return vm;
}
}
var allCalcuVisualDict = calcuResult.GetVisualDict();
//管线
var network = hydroInfo.ToNetwork();
if (network == null)
{
return vm;
}
var epaNode = network.GetAllNodes()?.Find(x => x.Id == node.Code);
if (epaNode == null)
{
return vm;
}
var allStartPathList = epaNode.TraverseMainUpStreamPath(calcuResult.EpanetCalcuResult?.GetLinkDict());
if (allStartPathList == null)
{
allStartPathList = new List();
}
var allEndPathList = epaNode.TraverseMainDownStreamPath(calcuResult.EpanetCalcuResult?.GetLinkDict());
if (allEndPathList == null)
{
allEndPathList = new List();
}
var allPathList = allStartPathList.Concat(allEndPathList).ToList();
var allEpaLossList = network.GetPathLossNodeList(allPathList, calcuResult.EpanetCalcuResult);
if (allEpaLossList == null || allEpaLossList.Count < 1)
{
return vm;
}
var allVisualDict = hydroInfo.GetVisualDict();
vm.Items = new List();
foreach (var epaLoss in allEpaLossList)
{
var visualNode = allVisualDict.GetValue(epaLoss.Id);
if (visualNode != null)
{
var item = new HydroLossCurveItemViewModel(epaLoss, visualNode);
vm.Items.Add(item);
}
}
vm.Elev = new HydroLossCurveElevViewModel(vm.Items);
vm.Start = new HydroLossCurveStartViewModel(vm.Items);
vm.End = new HydroLossCurveEndViewModel(vm.Items);
vm.Total = new HydroLossCurveTotalViewModel(vm.Items);
vm.Lower = new HydroLossCurveLowerViewModel(vm.Items);
return vm;
}
}
}