/// <summary> 构造函数 </summary> /// <param name="docMdf"></param> /// <param name="longitudinalSection"></param> public Exporter_FillCutInters(DocumentModifier docMdf, LongitudinalSection longitudinalSection) : base(docMdf, longitudinalSection.IntersPoints.Keys.ToArray()) { _docMdf = docMdf; _longitudinalSection = longitudinalSection; // }
/// <summary> 初始化每一个填挖交界点所占据的几何区间 </summary> /// <param name="longitudinalSection"></param> /// <returns></returns> private void ConstructIntersectRange(LongitudinalSection longitudinalSection) { var inters = longitudinalSection.Intersects; // // 将结果整理为二维数组,用来进行表格输出 var rows = new List <object[]>(); var header = new object[] { "交界点坐标", "交界方式", "10m填方段最大高度", "10m挖方段最大高度", "处理方式" }; rows.Add(header); int interval = 2; var fillLargerThan = 5.0; int fillCheckLength = 10; var arrCutToFill = ArrayConstructor.FromRangeAri(0, fillCheckLength, interval); var arrFillToCut = ArrayConstructor.FromRangeAri(0, -fillCheckLength, -interval); var blocks = Options_Collections.RangeBlocks; for (int i = 0; i < inters.NumberOfIntersectionPoints; i++) { var ptRoad = inters.GetPointOnCurve1(i); var ptGround = inters.GetPointOnCurve2(i); // 排除桥梁等结构区域 if (blocks.Any(r => r.ContainsStation(ptRoad.Point.X))) { continue; } // var fillToCut = longitudinalSection.FilltoCut(ptRoad, ptGround); var arrDx = fillToCut ? arrFillToCut : arrCutToFill; var intersX = ptRoad.Point.X; // 填挖交界处的路基,在填方段10m范围内高度H<5m时,按断面A实施,H>5m时,按断面B实施。 var maxVerticalDiff_Fill = 0.0; foreach (var dx in arrDx) { var x = intersX + dx; var intersVerticalRoad = new CurveCurveIntersector2d(longitudinalSection.RoadCurve2d, new Line2d(new Point2d(x, 0), new Vector2d(0, 1))); var intersVerticalGround = new CurveCurveIntersector2d(longitudinalSection.GroundCurve2d, new Line2d(new Point2d(x, 0), new Vector2d(0, 1))); if (intersVerticalRoad.NumberOfIntersectionPoints == 0 || intersVerticalGround.NumberOfIntersectionPoints == 0) { break; } else { var verticalDiff = intersVerticalRoad.GetIntersectionPoint(0).Y - intersVerticalGround.GetIntersectionPoint(0).Y; if (verticalDiff > maxVerticalDiff_Fill) { maxVerticalDiff_Fill = verticalDiff; } } } var maxVerticalDiff_Cut = 0.0; foreach (var dx in arrDx) { var x = intersX - dx; var intersVerticalRoad = new CurveCurveIntersector2d(longitudinalSection.RoadCurve2d, new Line2d(new Point2d(x, 0), new Vector2d(0, 1))); var intersVerticalGround = new CurveCurveIntersector2d(longitudinalSection.GroundCurve2d, new Line2d(new Point2d(x, 0), new Vector2d(0, 1))); if (intersVerticalRoad.NumberOfIntersectionPoints == 0 || intersVerticalGround.NumberOfIntersectionPoints == 0) { break; } else { var verticalDiff = intersVerticalGround.GetIntersectionPoint(0).Y - intersVerticalRoad.GetIntersectionPoint(0).Y; if (verticalDiff > maxVerticalDiff_Cut) { maxVerticalDiff_Cut = verticalDiff; } } } string fill = fillToCut ? "填 - 挖" : "挖 - 填"; var reinforce = (maxVerticalDiff_Fill > fillLargerThan) ? "超挖换填 + 土工格栅" : "超挖换填"; // rows.Add(new object[] { ptRoad.Point.X, fill, maxVerticalDiff_Fill, maxVerticalDiff_Cut, reinforce }); } var sheetArr = ArrayConstructor.FromList2D(listOfRows: rows); // sheetArr = sheetArr.InsertVector<object, string, object>(true, new[] { header }, new[] { -1.5f, }); // 输出到表格 var sheet_Infos = new List <WorkSheetData> { new WorkSheetData(WorkSheetDataType.SteepSlope, "纵向填挖交界", sheetArr) }; ExportWorkSheetDatas(sheet_Infos); // }
/// <summary> 构造函数 </summary> /// <param name="docMdf"></param> /// <param name="longitudinalSection"></param> public Exporter_StairsExcavLong(DocumentModifier docMdf, LongitudinalSection longitudinalSection) { _docMdf = docMdf; _longitudinalSection = longitudinalSection; }