Esempio n. 1
0
        /// <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;
            //}
        }
Esempio n. 2
0
        /// <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);
        }