/// <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); }
/// <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); // 填方或土质路堑路段 }
/// <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.挖方岩质); } } }
/// <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); }
/// <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); }