using Mapster;
|
using Yw.EPAnet;
|
using Yw.Hydro;
|
using Yw.Model;
|
using Yw.Vmo;
|
|
|
namespace HStation.WinFrmUI
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public class SimulationPrintLossCurveHelper
|
{
|
/// <summary>
|
///
|
/// </summary>
|
/// <returns></returns>
|
public static SimulationPrintLossCurveViewModel Create
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
HydroWorkingVmo working,
|
HydroVisualInfo visual,
|
HydroCalcuResult calcuResult = null,
|
bool isHead = false,
|
List<HydroEvaluationVmo> allEvaluationList = null
|
)
|
{
|
var vm = new SimulationPrintLossCurveViewModel();
|
|
//验证
|
if (hydroInfo == null)
|
{
|
return vm;
|
}
|
if (working == null)
|
{
|
return vm;
|
}
|
if (visual == null)
|
{
|
return vm;
|
}
|
|
//赋值模型信息,避免干扰
|
//var newHydroInfo = hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
|
//newHydroInfo.UpdateWorkingInfo(working.WorkingInfo);
|
|
//计算结果
|
if (calcuResult == null)
|
{
|
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 node = network.GetAllNodes()?.Find(x => x.Id == visual.Code);
|
if (node == null)
|
{
|
return vm;
|
}
|
var allStartPathList = network.AnalyzeUpstreamPath(node, calcuResult.EPAnetCalcuResult);
|
if (allStartPathList == null)
|
{
|
allStartPathList = new List<Link>();
|
}
|
|
var allEndPathList = network.AnalyzeDownstreamPath(node, 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<SimulationPrintLossCurveItemViewModel>();
|
foreach (var epaLoss in allEpaLossList)
|
{
|
var visualNode = allVisualDict.GetValue(epaLoss.Id);
|
if (visualNode != null)
|
{
|
var item = new SimulationPrintLossCurveItemViewModel(epaLoss, visualNode);
|
vm.Items.Add(item);
|
}
|
}
|
|
vm.Elev = new SimulationPrintLossCurveElevViewModel(vm.Items);
|
vm.Start = new SimulationPrintLossCurveStartViewModel(vm.Items);
|
vm.End = new SimulationPrintLossCurveEndViewModel(vm.Items);
|
vm.Total = new SimulationPrintLossCurveTotalViewModel(vm.Items);
|
|
return vm;
|
}
|
|
|
}
|
}
|