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; } } }