¶Ô±ÈÐÂÎļþ |
| | |
| | | using Yw.EPAnet; |
| | | using Yw.Hydro; |
| | | using Yw.Model; |
| | | |
| | | namespace Yw.WinFrmUI |
| | | { |
| | | /// <summary> |
| | | /// æ°´åä¿¡æ¯æå± |
| | | /// </summary> |
| | | public static class HydroModelInfoExtensions |
| | | { |
| | | |
| | | #region ä¿®å¤ç®¡ç½æ¹å |
| | | |
| | | /// <summary> |
| | | /// ä¿®å¤ç®¡ç½æ¹å |
| | | /// </summary> |
| | | public static bool RepairLinksDirection(this Yw.Model.HydroModelInfo hydroInfo, out string msg) |
| | | { |
| | | msg = string.Empty; |
| | | if (hydroInfo == null) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | var checkResult = hydroInfo.Check(); |
| | | if (!checkResult.Succeed) |
| | | { |
| | | msg = "æ£æ¥å¤±è´¥å¯¼è´æ æ³è¿è¡è¯ç®ï¼åæ¢ç®¡ç½ä¿®å¤ï¼"; |
| | | return false; |
| | | } |
| | | |
| | | var calcuResult = hydroInfo.Calcu(Yw.EPAnet.CalcuMode.Simple); |
| | | if (!calcuResult.Succeed) |
| | | { |
| | | msg = "è¯ç®å¤±è´¥ï¼åæ¢ç®¡ç½ä¿®å¤ï¼"; |
| | | return false; |
| | | } |
| | | |
| | | var allLinkList = hydroInfo.GetAllLinks(); |
| | | if (allLinkList != null && allLinkList.Count < 1) |
| | | { |
| | | msg = "模å䏿ªå
å«ç®¡æ®µä¿¡æ¯ï¼åæ¢ç®¡ç½ä¿®å¤ï¼"; |
| | | return false; |
| | | } |
| | | |
| | | int count = 0; |
| | | foreach (var link in allLinkList) |
| | | { |
| | | var calcuLink = calcuResult.LinkList?.Find(x => x.Code == link.Code); |
| | | if (calcuLink == null) |
| | | { |
| | | continue; |
| | | } |
| | | if (!calcuLink.CalcuFlow.HasValue) |
| | | { |
| | | continue; |
| | | } |
| | | if (calcuLink.CalcuFlow.Value < 0) |
| | | { |
| | | var tempCode = link.StartCode; |
| | | link.StartCode = link.EndCode; |
| | | link.EndCode = tempCode; |
| | | count++; |
| | | } |
| | | } |
| | | |
| | | msg = $"ä¿®å¤å®æï¼å
±ä¿®å¤ç®¡æ®µ({count})个ï¼"; |
| | | return true; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ä¿®å¤åæ° |
| | | |
| | | private const double _pipe_diameter_default = 500;//管éé»è®¤ç´å¾ |
| | | private const double _pipe_roughness_default = 110;//管éé»è®¤ç²ç³ç³»æ° |
| | | private const double _pipe_minorloss_default = 0.1;//管éé»è®¤ç²ç³ç³»æ° |
| | | //éé¨é»è®¤å±é»ç³»æ° |
| | | private const double _valve_minorloss_default = 0.3d; |
| | | |
| | | |
| | | /// <summary> |
| | | /// ä¿®å¤åæ° |
| | | /// </summary> |
| | | public static void RepairParas(this Yw.Model.HydroModelInfo hydroInfo, out string msg) |
| | | { |
| | | msg = string.Empty; |
| | | if (hydroInfo == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var allNodes = hydroInfo.GetAllNodes(); |
| | | var allLinks = hydroInfo.GetAllLinks(); |
| | | |
| | | //管é |
| | | if (hydroInfo.Pipes != null && hydroInfo.Pumps.Count > 0) |
| | | { |
| | | foreach (var pipe in hydroInfo.Pipes) |
| | | { |
| | | if (pipe.Diameter <= 0) |
| | | { |
| | | pipe.Diameter = _pipe_diameter_default; |
| | | pipe.UpdatePropStatus(nameof(pipe.Diameter), ePropStatus.Lack, $"ç´å¾ç¼ºçï¼ä½¿ç¨é»è®¤å¼ã{_pipe_diameter_default}mmãä¿®å¤"); |
| | | } |
| | | if (pipe.Roughness <= 0) |
| | | { |
| | | pipe.Roughness = _pipe_roughness_default; |
| | | pipe.UpdatePropStatus(nameof(pipe.Roughness), ePropStatus.Lack, $"ç²ç³ç³»æ°ç¼ºçï¼ä½¿ç¨é»è®¤å¼ã{_pipe_roughness_default}ãä¿®å¤"); |
| | | } |
| | | if (pipe.MinorLoss <= 0) |
| | | { |
| | | pipe.MinorLoss = _pipe_minorloss_default; |
| | | pipe.UpdatePropStatus(nameof(pipe.MinorLoss), ePropStatus.Lack, $"ç²ç³ç³»æ°ç¼ºçï¼ä½¿ç¨é»è®¤å¼ã{_pipe_minorloss_default}ãä¿®å¤"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //è¿æ¸¡ä»¶ |
| | | if (hydroInfo.Translations != null && hydroInfo.Translations.Count > 0) |
| | | { |
| | | foreach (var translation in hydroInfo.Translations) |
| | | { |
| | | if (translation.Diameter <= 0) |
| | | { |
| | | translation.Diameter = _pipe_diameter_default; |
| | | translation.UpdatePropStatus(nameof(translation.Diameter), ePropStatus.Lack, $"ç´å¾ç¼ºçï¼ä½¿ç¨é»è®¤å¼ã{_pipe_diameter_default}mmãä¿®å¤"); |
| | | } |
| | | if (translation.Roughness <= 0) |
| | | { |
| | | translation.Roughness = _pipe_roughness_default; |
| | | translation.UpdatePropStatus(nameof(translation.Roughness), ePropStatus.Lack, $"ç²ç³ç³»æ°ç¼ºçï¼ä½¿ç¨é»è®¤å¼ã{_pipe_roughness_default}ãä¿®å¤"); |
| | | } |
| | | if (translation.MinorLoss <= 0) |
| | | { |
| | | translation.MinorLoss = _pipe_minorloss_default; |
| | | translation.UpdatePropStatus(nameof(translation.MinorLoss), ePropStatus.Lack, $"ç²ç³ç³»æ°ç¼ºçï¼ä½¿ç¨é»è®¤å¼ã{_pipe_minorloss_default}ãä¿®å¤"); |
| | | } |
| | | } |
| | | foreach (var translation in hydroInfo.Translations) |
| | | { |
| | | double? tempDiameter = null; |
| | | var startNode = allNodes.Find(x => x.Code == translation.StartCode); |
| | | if (startNode != null) |
| | | { |
| | | var startLink = allLinks.Find(x => x.EndCode == startNode.Code); |
| | | if (startLink != null) |
| | | { |
| | | var startPipe = startLink as Yw.Model.HydroPipeInfo; |
| | | if (startPipe != null) |
| | | { |
| | | tempDiameter = startPipe.Diameter; |
| | | if (translation.StartDiameter != startPipe.Diameter) |
| | | { |
| | | translation.StartDiameter = startPipe.Diameter; |
| | | translation.UpdatePropStatus(nameof(translation.StartDiameter), ePropStatus.Lack, $"䏿¸¸ç´å¾ç¼ºçï¼ä½¿ç¨ä¸æ¸¸ç®¡éã{startPipe.Code}ãä¿®å¤"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | var endNode = allNodes.Find(x => x.Code == translation.EndCode); |
| | | if (endNode != null) |
| | | { |
| | | var endLink = allLinks.Find(x => x.StartCode == endNode.Code); |
| | | if (endLink != null) |
| | | { |
| | | var endPipe = endLink as Yw.Model.HydroPipeInfo; |
| | | if (endPipe != null) |
| | | { |
| | | if (translation.EndDiameter != endPipe.Diameter) |
| | | { |
| | | tempDiameter = endPipe.Diameter; |
| | | translation.EndDiameter = endPipe.Diameter; |
| | | translation.UpdatePropStatus(nameof(translation.EndDiameter), ePropStatus.Lack, $"䏿¸¸ç´å¾ç¼ºçï¼ä½¿ç¨ä¸æ¸¸ç®¡éã{endPipe.Code}ãä¿®å¤"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (translation.StartDiameter <= 0) |
| | | { |
| | | if (tempDiameter.HasValue) |
| | | { |
| | | translation.StartDiameter = tempDiameter.Value; |
| | | } |
| | | } |
| | | if (translation.EndDiameter <= 0) |
| | | { |
| | | if (tempDiameter.HasValue) |
| | | { |
| | | translation.EndDiameter = tempDiameter.Value; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //éé¨ |
| | | if (hydroInfo.Valves != null && hydroInfo.Valves.Count > 0) |
| | | { |
| | | foreach (var valve in hydroInfo.Valves) |
| | | { |
| | | if (valve.MinorLoss <= 0) |
| | | { |
| | | valve.MinorLoss = _valve_minorloss_default; |
| | | valve.UpdatePropStatus(nameof(valve.MinorLoss), ePropStatus.Lack, $"å±é»ç³»æ°ç¼ºçï¼ä½¿ç¨é»è®¤å¼ã{_valve_minorloss_default}ãä¿®å¤"); |
| | | } |
| | | if (valve.Diameter <= 0) |
| | | { |
| | | var startNode = allNodes.Find(x => x.Code == valve.StartCode); |
| | | if (startNode != null) |
| | | { |
| | | var startPipe = allLinks.Find(x => x.EndCode == startNode.Code) as Yw.Model.HydroPipeInfo; |
| | | if (startPipe != null) |
| | | { |
| | | valve.Diameter = startPipe.Diameter; |
| | | valve.UpdatePropStatus(nameof(valve.Diameter), ePropStatus.Lack, $"ç´å¾ç¼ºçï¼ä½¿ç¨ä¸æ¸¸ç®¡éã{startPipe.Code}ãä¿®å¤"); |
| | | } |
| | | else |
| | | { |
| | | var endNode = allNodes.Find(x => x.Code == valve.EndCode); |
| | | if (endNode != null) |
| | | { |
| | | var endPipe = allLinks.Find(x => x.StartCode == endNode.Code) as Yw.Model.HydroPipeInfo; |
| | | if (endPipe != null) |
| | | { |
| | | valve.Diameter = endPipe.Diameter; |
| | | valve.UpdatePropStatus(nameof(valve.Diameter), ePropStatus.Lack, $"ç´å¾ç¼ºçï¼ä½¿ç¨ä¸æ¸¸ç®¡éã{endPipe.Code}ãä¿®å¤"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | } |