/// <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; } } }
/// <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界面 } }
/// <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 }); }