예제 #1
0
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="ExcavName">基坑区域所在的基坑的名称,如A1、B、C1等</param>
            /// <param name="ExcavPosition">基坑区域的分块名称,如普遍区域、东南侧、西侧等</param>
            /// <param name="ExcavationID">基坑区域对应的基坑ID的信息</param>
            /// <param name="strBottomDate">在数据库文件中,指定的开挖区域开挖到基坑底的日期,在构造函数中进行数据类型的转换</param>
            /// <param name="Range_Process">基坑区域的施工进度中,每一个子区域的开挖标高对应的Range对象,
            /// 每一个Range对象代表工作表的UsedRange中这个区域的一整列的数据(包括前面几行的表头数据)</param>
            /// <param name="Range_Date">基坑区域的施工进度中,每一个子区域的开挖日期对应的Range对象,
            /// 每一个Range对象代表工作表的UsedRange中这个区域的一整列的数据(包括前面几行的表头数据)</param>
            /// <param name="Date_Elevation">在基坑区域的施工进度中,每一天的日期所对应的开挖标高。</param>
            /// <remarks></remarks>
            public clsData_ProcessRegionData(string ExcavName, string ExcavPosition, clsData_ExcavationID ExcavationID, string strBottomDate, Microsoft.Office.Interop.Excel.Range Range_Process, Microsoft.Office.Interop.Excel.Range Range_Date, SortedList <DateTime, Single> Date_Elevation)
            {
                // ----------------------------------------
                clsData_ProcessRegionData with_1 = this;

                with_1._ExcavationID   = ExcavationID;
                with_1._ExcavName      = ExcavName;
                with_1._ExcavPosition  = ExcavPosition;
                with_1._description    = ExcavName + ":" + ExcavPosition;
                with_1._Range_Date     = Range_Date;
                with_1._Range_Process  = Range_Process;
                with_1._Date_Elevation = Date_Elevation;

                //将数据库文件中,指定的开挖区域开挖到基坑底的日期的单元格的数据,转换为日期类型
                //如果转换错误,即此单元格为空,或者单元格数据格式不能转换为日期格式,那说明此基坑区域还没有开挖到基坑底部标高
                try                 //对“2014/11/26”形式的日期进行转换
                {
                    this._BottomDate       = DateTime.Parse(strBottomDate);
                    this._blnHasBottomDate = true;
                }
                catch (Exception)
                {
                    try                     //对“”形式的日期进行转换,比如“41969”对应于日期的“2014/11/26”
                    {
                        this._BottomDate = DateTime.FromOADate(double.Parse(strBottomDate));
                    }
                    catch (Exception)
                    {
                        //如果上面两种转换方法都不能将单元格中的数据转换为日期类型,则认为此基坑区域还没有开挖到基坑底部标高
                        this._blnHasBottomDate = false;
                    }
                }
            }
예제 #2
0
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="DataSheet">图表对应的数据工作表</param>
            /// <param name="DrawingChart">Excel图形所在的Chart对象</param>
            /// <param name="ParentApp">此图表所在的Excel类的实例对象</param>
            /// <param name="DateSpan">此图表的TimeSpan跨度</param>
            /// <param name="type">此图表的类型,则枚举DrawingType提供</param>
            ///  <param name="CanRoll">是图表是否可以滚动,即是动态图还是静态图</param>
            /// <param name="date_ColNum">此测斜点的监测数据工作表中的每一天与其在工作表中对应的列号,
            /// 以监测数据的日期key索引数据所在列号item</param>
            /// <param name="usedRg">监测曲线的数据范围,此Range对象中,
            /// 包括此工作表的UsedRange中的第一列,即深度的数据;但是不包括第一行的日期数据</param>
            /// <param name="Info">记录数据信息的文本框</param>
            /// <param name="FirstSeriesTag">第一条数据系列对应的Tag信息</param>
            /// <param name="ProcessRegionData">在施工进度工作表中,每一个基坑区域相关的各种信息,比如区域名称,区域的描述,
            /// 区域数据的Range对象,区域所属的基坑ID及其ID的数据等</param>
            /// <remarks></remarks>
            public ClsDrawing_Mnt_Incline(Excel.Worksheet DataSheet, Excel.Chart DrawingChart, Cls_ExcelForMonitorDrawing ParentApp,
                                          DateSpan DateSpan, DrawingType type, bool CanRoll, TextFrame2 Info, MonitorInfo DrawingTag,
                                          MntType MonitorType, Dictionary <DateTime, int> date_ColNum, Excel.Range usedRg,
                                          SeriesTag_Incline FirstSeriesTag, clsData_ProcessRegionData ProcessRegionData = null)
                : base(DataSheet, DrawingChart, ParentApp, type, CanRoll, Info, DrawingTag, MonitorType,
                       DateSpan, new clsDrawing_Mnt_RollingBase.SeriesTag(FirstSeriesTag.series, FirstSeriesTag.ConstructionDate))
            {
                //
                // --------------------------------------------
                try
                {
                    ClsDrawing_Mnt_Incline with_1 = this;
                    with_1.P_rgMntData = usedRg; //'包括第一列,但是不包括第一行的日期。
                    Excel.Range colRange = usedRg.Columns[1] as Excel.Range;
                    with_1.F_YValues   = ExcelFunction.ConvertRangeDataToVector <Single>(colRange);
                    with_1.Information = Info;
                    with_1._ExcavationDepth_lineAndTextbox = FirstSeriesTag;
                    with_1.F_dicDateAndColumnNumber        = date_ColNum;
                    with_1.P_ProcessRegionData             = ProcessRegionData;

                    with_1._inclineTopElevaion = Project_Expo.InclineTopElevaion;
                    // ----- 集合数据的记录
                    with_1.F_DicSeries_Tag[(int)LowIndexOfObjectsInExcel.SeriesInSeriesCollection] = FirstSeriesTag;

                    // -----对图例进行更新---------
                    //Call LegendRefresh(List_HasCurve)
                }
                catch (Exception ex)
                {
                    MessageBox.Show("构造测斜曲线图出错。" + "\r\n" + ex.Message + "\r\n" +
                                    ex.TargetSite.Name, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        public void Rolling(DateTime dateThisDay)
        {
            object lockobject = new object();

            lock (lockobject)
            {
                UInt16 RegionsCount = this.F_Regions.Count;
                if (RegionsCount > 0)
                {
                    this.Application.ScreenUpdating = false;                     //禁用excel界面
                    Series series_Depth = this.F_Series_Depth;
                    clsData_ProcessRegionData            Region = default(clsData_ProcessRegionData);
                    Microsoft.Office.Interop.Excel.Point Pt     = default(Microsoft.Office.Interop.Excel.Point);
                    float[] Depths = new float[RegionsCount - 1 + 1];
                    for (UInt16 i = 0; i <= RegionsCount - 1; i++)
                    {
                        Region = this.F_Regions.Item(i);
                        Pt     = series_Depth.Points().item(i + 1);
                        if (Region.HasBottomDate)
                        {
                            if (dateThisDay.CompareTo(Region.BottomDate) > 0)                             //说明已经开挖到基坑底,并在向上进行结构物的施工
                            {
                                Pt.Format.Fill.ForeColor.RGB = Information.RGB(255, 0, 0);
                            }
                            else                             //说明还未开挖到基坑底,并在向下开挖
                            {
                                Pt.Format.Fill.ForeColor.RGB = Information.RGB(0, 0, 255);
                            }
                        }
                        try
                        {
                            Depths[i] = System.Convert.ToSingle(Region.Date_Elevation[dateThisDay]);
                        }
                        catch (KeyNotFoundException)
                        {
                            DateTime ClosestDate = ClsData_DataBase.FindTheClosestDateInSortedList(Region.Date_Elevation.Keys, dateThisDay);
                            Depths[i] = System.Convert.ToSingle(Region.Date_Elevation[ClosestDate]);
                        }
                    }
                    series_Depth.Values = Depths;
                    //刷新日期放置在最后,以免由于耗时过长而出现误判
                    this.F_textbox_Info.TextRange.Text = dateThisDay.ToString(AMEApplication.DateFormat);
                }
                this.Application.ScreenUpdating = true;                 //刷新excel界面
            }
        }
예제 #4
0
        /// <summary>
        /// 根据数据库中的数据信息,绘制两条数据系列图,并在表示基坑深度的那一条数据系列上绘制此区域所在的基坑ID的构件图
        /// </summary>
        /// <param name="DrawingChart"></param>
        /// <param name="SelectedRegion"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        public Series[] SetDataSeries(Chart DrawingChart, Series
                                      series_DeepestExca, Series Series_Depth,
                                      List <clsData_ProcessRegionData> SelectedRegion)
        {
            int RegionsCount = System.Convert.ToInt32(SelectedRegion.Count);

            string[] arrDescrip = new string[RegionsCount - 1 + 1];                             //每一个区域的描述,作为坐标轴中的X轴数据
            float[]  arrDeepest = new float[RegionsCount - 1 + 1];                              //每一个区域的坑底标高
            float[]  arrDepth   = new float[RegionsCount - 1 + 1];                              //每一个区域在当天的开挖标高,对于初始绘图,先设定这个值为地面标高
            clsData_ExcavationID[] arrExcavID = new clsData_ExcavationID[RegionsCount - 1 + 1]; //每一个区域所对应的基坑ID对象
            float Elevation_Ground            = Project_Expo.Elevation_GroundSurface;           //项目的自然地面的标高
            //所有选择的区域中的最深的标高位置,以米为单位
            float DeepestElevation = Elevation_Ground;

            for (UInt16 i = 0; i <= RegionsCount - 1; i++)
            {
                clsData_ProcessRegionData Region = SelectedRegion.Item(i);
                arrDescrip[i] = Region.description;
                float BottomElevation = Region.ExcavationID.ExcavationBottom;
                arrDeepest[i]    = BottomElevation;
                arrDepth[i]      = Elevation_Ground;            // ClsData_DataBase.GetElevation(Region.Range, )
                DeepestElevation = Math.Min((short)DeepestElevation, (short)BottomElevation);
                arrExcavID[i]    = Region.ExcavationID;
            }
            //  ------------------------  设置Chart数据  ---------------------------
            try
            {
                Series with_2 = series_DeepestExca;
                with_2.Name    = "";
                with_2.XValues = arrDescrip;
                with_2.Values  = arrDeepest;
                Series with_3 = Series_Depth;
                with_3.Name    = "";
                with_3.XValues = arrDescrip;
                with_3.Values  = arrDepth;
            }
            catch (Exception ex)
            {
                MessageBox.Show("设置基坑区域开挖图中的开挖标高数据出错!" + "\r\n" + ex.Message +
                                "\r\n" + "报错位置:" + ex.TargetSite.Name, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            //  ------------------------  设置坐标轴格式  ---------------------------
            try
            {
                double max = Elevation_Ground;

                double min = 0;
                min = System.Convert.ToDouble(Min_Array <Single>(arrDeepest));
                if (min > 0)
                {
                    min = Math.Ceiling(min);
                }
                else                 //注意Math.Ceiling(-3.2)=-3
                {
                    min = Math.Floor(min);
                }
                Microsoft.Office.Interop.Excel.Axis axY = DrawingChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlValue);
                axY.MaximumScale   = max;
                axY.MinimumScale   = min;
                axY.AxisTitle.Text = "标高(m)";
                Microsoft.Office.Interop.Excel.Axis axX = DrawingChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlValue);
            }
            catch (Exception ex)
            {
                MessageBox.Show("设置基坑区域开挖图中的坐标轴格式出错!" + "\r\n" + ex.Message + "\r\n" + "报错位置:" + ex.TargetSite.Name,
                                "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //  --------------  绘制每一个选定区域所属的基坑ID的支撑位置  -----------
            DrawComponents(arrExcavID, DrawingChart, series_DeepestExca);
            //
            return(new[] { series_DeepestExca, Series_Depth });
        }