/// <summary> 自动确定每一级边坡的防护形式 </summary> /// <param name="criterion">自动防护的规则</param> public void AutoSetProtectionMethods(AutoProtectionCriterions criterion) { var data = XData; var firstProt = GetFirstSlopeProtection(criterion, data); foreach (var s in data.Slopes) { s.ProtectionMethod = firstProt; } //foreach (var s in data.Platforms) //{ // s.ProtectionMethod = firstProt; //} }
/// <summary> /// 将边坡从第一条规则开始过滤,如果任何一整条规则都不符合,则返回 null /// </summary> /// <param name="criterions"></param> /// <returns></returns> private string GetFirstSlopeProtection(AutoProtectionCriterions criterions, SlopeData data) { // 将边坡从第一条规则开始过滤,如果任何一整条规则都不符合,则返回 null foreach (var cr in criterions.SlopeCriterions) { // 填挖方 if ((cr.Fill == Operator_Bool.是 && !_isFill) || (cr.Fill == Operator_Bool.否 && _isFill)) { continue; } // 首级边坡坡比 if (data.Slopes.Count == 0) { continue; } var firstSlopeRatio = Math.Abs(data.Slopes[0].SlopeRatio); if (!InRangeCollection(cr.FirstSlopeRatio.AndRange, firstSlopeRatio)) { continue; } // 边坡高度 var slopeHeight = Math.Abs(Pline.StartPoint.Y - Pline.EndPoint.Y); if (!InRangeCollection(cr.SlopeHeight.AndRange, slopeHeight)) { continue; } // 边坡总坡级 var slopeLevelCount = data.Slopes.Count; if (!InRangeCollection(cr.SlopeLevel.AndRange, slopeLevelCount)) { continue; } // 所有条件都满足,确定防护方式 return(cr.ProtectionMethod); } return(null); }