예제 #1
0
 /// <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;
     //
 }
예제 #2
0
        /// <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);
            //
        }
예제 #3
0
 /// <summary> 构造函数 </summary>
 /// <param name="docMdf"></param>
 /// <param name="longitudinalSection"></param>
 public Exporter_StairsExcavLong(DocumentModifier docMdf, LongitudinalSection longitudinalSection)
 {
     _docMdf = docMdf;
     _longitudinalSection = longitudinalSection;
 }