using Yw.EPAnet;
|
using Yw.Hydro;
|
using Yw.Model;
|
|
|
namespace Yw.WinFrmUI
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public class HydroLossCurveHelper
|
{
|
/// <summary>
|
/// 创建
|
/// </summary>
|
public static HydroLossCurveViewModel Create
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
HydroWorkingVmo working,
|
HydroNodeInfo node,
|
HydroCalcuResult calcuResult = null,
|
bool isHead = false,
|
List<HydroEvaluationVmo> 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(Yw.EPAnet.CalcuMode.MinorLoss, 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 = network.AnalyzeUpstreamPath(epaNode, calcuResult.EPAnetCalcuResult);
|
if (allStartPathList == null)
|
{
|
allStartPathList = new List<Link>();
|
}
|
|
var allEndPathList = network.AnalyzeDownstreamPath(epaNode, calcuResult.EPAnetCalcuResult);
|
if (allEndPathList == null)
|
{
|
allEndPathList = new List<Link>();
|
}
|
|
var allPathList = allStartPathList.Concat(allEndPathList).ToList();
|
var allEpaLossList = network.GetChartNodeByPathLinks(allPathList, calcuResult.EPAnetCalcuResult);
|
if (allEpaLossList == null || allEpaLossList.Count < 1)
|
{
|
return vm;
|
}
|
var allVisualDict = hydroInfo.GetVisualDict();
|
vm.Items = new List<HydroLossCurveItemViewModel>();
|
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;
|
|
}
|
|
|
}
|
}
|