예제 #1
0
        /// <summary> 陡坡路堤 </summary>
        /// <param name="sec"> 道路中心填方高度</param>
        /// <param name="treatedSide"> 哪一侧需要进行陡坡路堤处理 </param>
        /// <param name="treatedWidth"> 陡坡路堤处理宽度 </param>
        /// <param name="stairArea"> 挖台阶的面积 </param>
        /// <param name="reinforcementSide"> 哪一侧需要设置加筋结构,比如铺设三层土工格栅</param>
        /// <returns></returns>
        private bool IsSteepSlope(SubgradeSection sec, out SectionSide treatedSide, out double treatedWidth,
                                  out double stairArea,
                                  out SectionSide reinforcementSide)
        {
            bool isSteep = false;

            treatedWidth = 0;
            stairArea    = 0;
            double sideTreatedWidth = 0;
            double sideStairArea    = 0;

            treatedSide       = SectionSide.无;
            reinforcementSide = SectionSide.无;
            bool leftSetReinforcement;
            bool rightSetReinforcement;
            var  secData = sec.XData;
            //
            SlopeLine sideSlope  = null;
            Polyline  sideGround = null;

            if (secData.LeftRetainingWallType != RetainingWallType.路肩墙)
            {
                sideSlope  = sec.GetSlopeLine(true); // 断面左侧边坡
                sideGround = secData.LeftGroundSurfaceHandle.GetDBObject <Polyline>(_docMdf.acDataBase);
                if (IsSteepFill(secData, true, sideSlope, sideGround, out sideTreatedWidth, out sideStairArea,
                                out leftSetReinforcement))
                {
                    isSteep           = true;
                    treatedSide       = treatedSide | SectionSide.左;
                    reinforcementSide = leftSetReinforcement ? reinforcementSide | SectionSide.左 : reinforcementSide;
                    treatedWidth     += sideTreatedWidth;
                    stairArea        += sideStairArea;
                }
            }
            if (secData.RightRetainingWallType != RetainingWallType.路肩墙)
            {
                sideSlope  = sec.GetSlopeLine(false); // 断面右侧边坡
                sideGround = secData.RightGroundSurfaceHandle.GetDBObject <Polyline>(_docMdf.acDataBase);
                if (IsSteepFill(secData, false, sideSlope, sideGround, out sideTreatedWidth, out sideStairArea,
                                out rightSetReinforcement))
                {
                    isSteep           = true;
                    treatedSide       = treatedSide | SectionSide.右;
                    reinforcementSide = rightSetReinforcement ? reinforcementSide | SectionSide.右 : reinforcementSide;
                    treatedWidth     += sideTreatedWidth;
                    stairArea        += sideStairArea;
                }
            }
            return(isSteep);
        }
예제 #2
0
        /// <summary> 填方或土质路堑路段 </summary>
        /// <param name="sec"> 道路中心填方高度</param>
        /// <returns></returns>
        private bool IsFillOrSoilCut(SubgradeSection sec)
        {
            var secData = sec.XData;

            if ((secData.LeftSlopeFill != null && !secData.LeftSlopeFill.Value) &&
                (secData.RightSlopeFill != null && !secData.RightSlopeFill.Value))
            {
                var leftSlope  = sec.GetSlopeLine(true); // 断面左侧边坡
                var rightSlope = sec.GetSlopeLine(true); // 断面左侧边坡
                if (leftSlope != null && leftSlope.XData.SoilOrRock == SubgradeType.岩质 &&
                    rightSlope != null && rightSlope.XData.SoilOrRock == SubgradeType.岩质)
                {
                    return(false); // 石质路堑路段
                }
            }
            return(true); // 填方或土质路堑路段
        }
예제 #3
0
        /// <summary> 判断路面类型 </summary>
        /// <param name="sec"> 道路中心填方高度</param>
        /// <returns></returns>
        private RoadSurfaceType GetRoadSurfaceType(SubgradeSection sec)
        {
            // 从工程量偏大的角度考虑
            // 左右侧有一侧为填方,则认为此路面为填方;
            // 左右侧有一侧为土质,则认为此路面为土质;

            var  secData = sec.XData;
            bool isFill  = (secData.LeftSlopeFill == null) || (secData.LeftSlopeFill.Value) ||
                           (secData.RightSlopeFill == null) || (secData.RightSlopeFill.Value);

            bool isSoil     = true;
            var  leftSlope  = sec.GetSlopeLine(true);  // 断面左侧边坡
            var  rightSlope = sec.GetSlopeLine(false); // 断面左侧边坡

            isSoil = (leftSlope != null && leftSlope.XData.SoilOrRock == SubgradeType.土质) ||
                     (rightSlope != null && rightSlope.XData.SoilOrRock == SubgradeType.土质);

            //
            if (isFill)
            {
                if (isSoil)
                {
                    return(RoadSurfaceType.填方土质);
                }
                else
                {
                    return(RoadSurfaceType.填方岩质);
                }
            }
            else
            {
                if (isSoil)
                {
                    return(RoadSurfaceType.挖方土质);
                }
                else
                {
                    return(RoadSurfaceType.挖方岩质);
                }
            }
        }
예제 #4
0
        /// <summary> 填方边坡类型 </summary>
        /// <param name="sec"> 道路中心填方高度</param>
        /// <param name="treatedWidth"> 陡坡路堤处理宽度 </param>
        /// <param name="treatedSide"> 要进行挖台阶处理的是断面的哪一侧 </param>
        /// <param name="stairArea">某一侧边坡所挖台阶面积</param>
        /// <returns></returns>
        private FillSlopeType GetFillSlopeType(SubgradeSection sec, out SectionSide treatedSide, out double treatedWidth, out double stairArea)
        {
            var sectionfillSlopeType = FillSlopeType.Other;

            treatedWidth = 0;
            stairArea    = 0.0;
            double sideTreatedWidth = 0;
            double sideStairArea    = 0.0;

            treatedSide = SectionSide.无;
            var secData = sec.XData;
            //
            var sideSlope     = sec.GetSlopeLine(true); // 断面左侧边坡
            var sideGround    = secData.LeftGroundSurfaceHandle.GetDBObject <Polyline>(_docMdf.acDataBase);
            var fillSlopeType = GetFillSlopeType(secData, true, sideSlope, sideGround, out sideTreatedWidth, out sideStairArea);

            if (fillSlopeType == FillSlopeType.StairExcav)
            {
                sectionfillSlopeType = FillSlopeType.StairExcav;
                treatedSide          = treatedSide | SectionSide.左;
                treatedWidth        += sideTreatedWidth;
                stairArea           += sideStairArea;
            }

            sideSlope     = sec.GetSlopeLine(false); // 断面右侧边坡
            sideGround    = secData.RightGroundSurfaceHandle.GetDBObject <Polyline>(_docMdf.acDataBase);
            fillSlopeType = GetFillSlopeType(secData, false, sideSlope, sideGround, out sideTreatedWidth, out sideStairArea);
            if (fillSlopeType == FillSlopeType.StairExcav)
            {
                sectionfillSlopeType = FillSlopeType.StairExcav;
                treatedSide          = treatedSide | SectionSide.右;
                treatedWidth        += sideTreatedWidth;
                stairArea           += sideStairArea;
            }

            return(sectionfillSlopeType);
        }
예제 #5
0
        /// <summary> 填方或土质路堑路段 </summary>
        /// <param name="sec"> 道路中心填方高度</param>
        /// <param name="hardShouderCount"> 道路中心填方高度</param>
        /// <returns></returns>
        private bool HasHardShoulder(SubgradeSection sec, out int hardShouderCount,
                                     out HardShoulderType leftType, out HardShoulderType rightType, out double leftHardShoulerArea, out double rightHardShoulerArea)
        {
            hardShouderCount     = 0;
            leftHardShoulerArea  = 0;
            rightHardShoulerArea = 0;
            leftType             = HardShoulderType.无;
            rightType            = HardShoulderType.无;

            var secData = sec.XData;

            // 对左侧进行判断与计量
            if (secData.LeftSlopeFill != null && secData.LeftSlopeFill.Value)
            {
                // 表示是填方路段,接下来判断路肩类型
                if (secData.LeftRetainingWallType == RetainingWallType.路肩墙)
                {
                    leftType            = HardShoulderType.挡墙;
                    hardShouderCount   += 1;
                    leftHardShoulerArea = _criterion.路肩面积_挡墙;
                }
                else
                {
                    // 通过填方边坡高度来确定是否需要设置护栏
                    double fillHeight;
                    var    leftSlp = sec.GetSlopeLine(true);
                    fillHeight = Math.Abs(leftSlp.Pline.StartPoint.Y - leftSlp.Pline.EndPoint.Y);

                    if (fillHeight >= _criterion.设护栏段的填方高度)
                    {
                        leftType            = HardShoulderType.护栏;
                        hardShouderCount   += 1;
                        leftHardShoulerArea = _criterion.路肩面积_护栏;
                    }
                    else
                    {
                        leftType            = HardShoulderType.无护栏;
                        hardShouderCount   += 1;
                        leftHardShoulerArea = _criterion.路肩面积_无护栏;
                    }
                }
            }

            // 对右侧进行判断与计量
            if (secData.RightSlopeFill != null && secData.RightSlopeFill.Value)
            {
                // 表示是填方路段,接下来判断路肩类型
                if (secData.RightRetainingWallType == RetainingWallType.路肩墙)
                {
                    rightType            = HardShoulderType.挡墙;
                    hardShouderCount    += 1;
                    rightHardShoulerArea = _criterion.路肩面积_挡墙;
                }
                else
                {
                    // 通过填方边坡高度来确定是否需要设置护栏
                    double fillHeight;
                    var    rightSlp = sec.GetSlopeLine(false);
                    fillHeight = Math.Abs(rightSlp.Pline.StartPoint.Y - rightSlp.Pline.EndPoint.Y);

                    if (fillHeight >= _criterion.设护栏段的填方高度)
                    {
                        rightType            = HardShoulderType.护栏;
                        hardShouderCount    += 1;
                        rightHardShoulerArea = _criterion.路肩面积_护栏;
                    }
                    else
                    {
                        rightType            = HardShoulderType.无护栏;
                        hardShouderCount    += 1;
                        rightHardShoulerArea = _criterion.路肩面积_无护栏;
                    }
                }
            }
            //
            return(hardShouderCount > 0);
        }