/// <summary> /// Draws the LimitLines associated with this axis to the screen. /// </summary> /// <param name="c"></param> public virtual void RenderLimitLines(SKCanvas c) { var limitLines = XAxis.LimitLines; if (limitLines == null || limitLines.Count <= 0) { return; } for (int i = 0; i < limitLines.Count; i++) { LimitLine l = limitLines[i]; if (!l.IsEnabled) { continue; } int clipRestoreCount = c.Save(); c.ClipRect(ViewPortHandler.ContentRect.InsetHorizontally(l.LineWidth)); var position = Trasformer.PointValueToPixel(l.Limit, 0.0f); RenderLimitLineLine(c, l, position); RenderLimitLineLabel(c, l, position, 2.0f + l.YOffset); c.RestoreToCount(clipRestoreCount); } }
// Update is called once per frame void Update() { //GameObject objectPlayer = GameObject.FindGameObjectWithTag("Player"); //Player player = objectPlayer.GetComponent<Player>(); GameObject objectLimit = GameObject.FindGameObjectWithTag("ZoneLimit"); LimitLine zoneLimit = objectLimit.GetComponent <LimitLine>(); GameObject objectZone = GameObject.FindGameObjectWithTag("Zone"); ZoneLine zone = objectZone.GetComponent <ZoneLine>(); if (zone != null && update >= 400) { //player.updateRadius(4f); zoneLimit.setZone(Config.SIZE_ZONE * 1.4f); zone.setZone(Config.SIZE_ZONE * 1f); } if (zone != null && update >= 800) { //player.updateRadius(2f); zoneLimit.setZone(Config.SIZE_ZONE * 1f); zone.setZone(Config.SIZE_ZONE * 0.5f); update = 0; } update++; }
public static XYTestLimit ExcelToTable(string file) { if (!File.Exists(file)) { return(null); } XYTestLimit dt = new XYTestLimit(); IWorkbook workbook; string fileExt = Path.GetExtension(file).ToLower(); using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式 if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(fs); } else { workbook = null; } if (workbook == null) { return(null); } ISheet sheetLimitLine = workbook.GetSheet("LimitLine"); for (int i = 1; i <= sheetLimitLine.LastRowNum - sheetLimitLine.FirstRowNum; i++) { LimitLine LL = new LimitLine(); LL.Type = (LimitLineTypeEnum)Enum.Parse(typeof(LimitLineTypeEnum), GetValueType(sheetLimitLine.GetRow(i).GetCell(0)).ToString()); LL.X1 = Convert.ToDouble(GetValueType(sheetLimitLine.GetRow(i).GetCell(1))); LL.X2 = Convert.ToDouble(GetValueType(sheetLimitLine.GetRow(i).GetCell(2))); LL.Y1 = Convert.ToDouble(GetValueType(sheetLimitLine.GetRow(i).GetCell(3))); LL.Y2 = Convert.ToDouble(GetValueType(sheetLimitLine.GetRow(i).GetCell(4))); dt.LimitLine.Add(LL); } if (dt.LimitLine.Count >= 0) { dt.Enable = true; } else { dt.Enable = false; } } return(dt); }
public override void RenderLimitLines(SKCanvas c) { var limitLines = YAxis.LimitLines; if (limitLines == null) { return; } float sliceangle = Chart.SliceAngle; // calculate the factor that is needed for transforming the value to // pixels float factor = Chart.Factor; var center = Chart.CenterOffsets; for (int i = 0; i < limitLines.Count; i++) { LimitLine l = limitLines[i]; if (!l.IsEnabled) { continue; } LimitLinePaint.Color = l.LineColor; LimitLinePaint.PathEffect = l.DashPathEffect; LimitLinePaint.StrokeWidth = l.LineWidth; float r = (l.Limit - Chart.YChartMin) * factor; var limitPath = RenderLimitLinesPathBuffer; limitPath.Reset(); int entryCount = Chart.Data.GetMaxEntryCountSet().EntryCount; for (int j = 0; j < entryCount; j++) { var pOut = ChartUtil.GetPosition(center, r, sliceangle * j + Chart.RotationAngle); if (j == 0) { limitPath.MoveTo(pOut.X, pOut.Y); } else { limitPath.LineTo(pOut.X, pOut.Y); } } limitPath.Close(); c.DrawPath(limitPath, LimitLinePaint); } }
public void RenderLimitLineLine(SKCanvas c, LimitLine limitLine, SKPoint position) { LimitLineSegmentsBuffer[0] = new SKPoint(position.X, ViewPortHandler.ContentTop); LimitLineSegmentsBuffer[1] = new SKPoint(position.Y, ViewPortHandler.ContentBottom); LimitLinePath.Reset(); LimitLinePath.MoveTo(LimitLineSegmentsBuffer[0]); LimitLinePath.LineTo(LimitLineSegmentsBuffer[1]); LimitLinePaint.Style = SKPaintStyle.Stroke; LimitLinePaint.Color = limitLine.LineColor; LimitLinePaint.StrokeWidth = limitLine.LineWidth; LimitLinePaint.PathEffect = limitLine.DashPathEffect; c.DrawPath(LimitLinePath, LimitLinePaint); }
public void RenderLimitLineLabel(SKCanvas c, LimitLine limitLine, SKPoint position, float yOffset) { string label = limitLine.Label; // if drawing the limit-value label is enabled if (string.IsNullOrEmpty(label) == false) { LimitLinePaint.Style = limitLine.TextStyle; LimitLinePaint.PathEffect = null; LimitLinePaint.Color = limitLine.TextColor; LimitLinePaint.StrokeWidth = 0.5f; LimitLinePaint.TextSize = limitLine.TextSize; float xOffset = limitLine.LineWidth + limitLine.XOffset; LimitLine.LimitLabelPosition labelPosition = limitLine.LabelPosition; if (labelPosition == LimitLine.LimitLabelPosition.RightTop) { float labelLineHeight = LimitLinePaint.MeasureHeight(label); LimitLinePaint.TextAlign = SKTextAlign.Left; c.DrawText(label, position.X + xOffset, ViewPortHandler.ContentTop + yOffset + labelLineHeight, LimitLinePaint); } else if (labelPosition == LimitLine.LimitLabelPosition.RightBottom) { LimitLinePaint.TextAlign = SKTextAlign.Left; c.DrawText(label, position.X + xOffset, ViewPortHandler.ContentBottom - yOffset, LimitLinePaint); } else if (labelPosition == LimitLine.LimitLabelPosition.LeftTop) { LimitLinePaint.TextAlign = SKTextAlign.Right; float labelLineHeight = LimitLinePaint.MeasureHeight(label); c.DrawText(label, position.X - xOffset, ViewPortHandler.ContentTop + yOffset + labelLineHeight, LimitLinePaint); } else { LimitLinePaint.TextAlign = SKTextAlign.Right; c.DrawText(label, position.X - xOffset, ViewPortHandler.ContentBottom - yOffset, LimitLinePaint); } } }
/// <summary> /// Creates the activity and displays the line chart. /// </summary> /// <param name="savedInstanceState">Saved instance state.</param> protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ShowVisualizationDataLayout); Init(); AddPointsToEntries(); this.mLineData = new LineData(mDataSet); this.mLineChart.Data = mLineData; foreach (float hc in mCurVisData.AltControlTime) { LimitLine ll = new LimitLine(hc, ""); ll.LineColor = new Color(255, 0, 0, 40); ll.LineWidth = 30f; this.mLineChart.XAxis.AddLimitLine(ll); } this.mLineChart.XAxis.SetDrawLimitLinesBehindData(true); this.mLineChart.Invalidate(); }
public override void RenderLimitLines(SKCanvas c) { var limitLines = XAxis.LimitLines; if (limitLines == null || limitLines.Count <= 0) { return; } SKPath limitLinePath = LimitLinePath; limitLinePath.Reset(); for (int i = 0; i < limitLines.Count; i++) { LimitLine l = limitLines[i]; if (!l.IsEnabled) { continue; } int clipRestoreCount = c.Save(); c.ClipRect(ViewPortHandler.ContentRect.InsetVertically(l.LineWidth)); LimitLinePaint.Style = SKPaintStyle.Stroke; LimitLinePaint.Color = l.LineColor; LimitLinePaint.StrokeWidth = l.LineWidth; LimitLinePaint.PathEffect = l.DashPathEffect; var pt = Trasformer.PointValueToPixel(0.0f, l.Limit); limitLinePath.MoveTo(ViewPortHandler.ContentLeft, pt.Y); limitLinePath.LineTo(ViewPortHandler.ContentRight, pt.Y); c.DrawPath(limitLinePath, LimitLinePaint); limitLinePath.Reset(); // c.drawLines(pts, mLimitLinePaint); string label = l.Label; // if drawing the limit-value label is enabled if (string.IsNullOrEmpty(label) == false) { LimitLinePaint.Style = l.TextStyle; LimitLinePaint.PathEffect = null; LimitLinePaint.Color = l.TextColor; LimitLinePaint.StrokeWidth = 0.5f; LimitLinePaint.TextSize = l.TextSize; float labelLineHeight = LimitLinePaint.MeasureHeight(label); float xOffset = 4f.DpToPixel() + l.XOffset; float yOffset = l.LineWidth + labelLineHeight + l.YOffset; LimitLine.LimitLabelPosition position = l.LabelPosition; if (position == LimitLine.LimitLabelPosition.RightTop) { LimitLinePaint.TextAlign = SKTextAlign.Right; c.DrawText(label, ViewPortHandler.ContentRight - xOffset, pt.Y - yOffset + labelLineHeight, LimitLinePaint); } else if (position == LimitLine.LimitLabelPosition.RightBottom) { LimitLinePaint.TextAlign = SKTextAlign.Right; c.DrawText(label, ViewPortHandler.ContentRight - xOffset, pt.Y + yOffset, LimitLinePaint); } else if (position == LimitLine.LimitLabelPosition.LeftTop) { LimitLinePaint.TextAlign = SKTextAlign.Left; c.DrawText(label, ViewPortHandler.ContentLeft + xOffset, pt.Y - yOffset + labelLineHeight, LimitLinePaint); } else { LimitLinePaint.TextAlign = SKTextAlign.Left; c.DrawText(label, ViewPortHandler.OffsetLeft + xOffset, pt.Y + yOffset, LimitLinePaint); } } c.RestoreToCount(clipRestoreCount); } }
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.Inflate(Resource.Layout.ChartAllTablesDialog, container, false); mChartAllTables = mView.FindViewById <BarChart>(Resource.Id.chartAllTablesDialog); dicOfDataSets = new Dictionary <string, List <BarEntry> >(); foreach (StatsTables row in listStatsTables) { if (!listTableNames.Contains(row.table_name)) { listTableNames.Add(row.table_name); } } int counter = 0; foreach (string table in listTableNames) { List <BarEntry> barEntry = new List <BarEntry>(); foreach (StatsTables item in listStatsTables) { if (table == item.table_name) { barEntry.Add(new BarEntry(counter, item.diff_last_trans)); counter++; } } dicOfDataSets.Add(table, barEntry); } BarData data = new BarData(); int[] chartColors = { Color.ParseColor("#005571"), Color.ParseColor("#227691"), Color.ParseColor("#86B1C6"), Color.ParseColor("#BCD4E0"), Color.ParseColor("#FDB813"), Color.ParseColor("#FFC54E"), Color.ParseColor("#FFD27C"), Color.ParseColor("#FFE6B9") }; int colorCounter = 0; foreach (KeyValuePair <string, List <BarEntry> > dicDataSet in dicOfDataSets) { dataSet = new BarDataSet(dicDataSet.Value, dicDataSet.Key); dataSet.SetColors(chartColors[colorCounter]); data.AddDataSet(dataSet); colorCounter++; } LimitLine limitLine = new LimitLine(70f); limitLine.LineColor = Color.DarkRed; limitLine.Enabled = true; XAxis xAxis = mChartAllTables.XAxis; xAxis.SetCenterAxisLabels(false); xAxis.SetDrawLabels(false); xAxis.Position = XAxis.XAxisPosition.BottomInside; xAxis.SetDrawGridLines(false); YAxis yAxis = mChartAllTables.AxisLeft; yAxis.SetDrawGridLines(true); yAxis.AddLimitLine(limitLine); Legend l = mChartAllTables.Legend; l.VerticalAlignment = Legend.LegendVerticalAlignment.Top; l.HorizontalAlignment = Legend.LegendHorizontalAlignment.Right; l.Orientation = Legend.LegendOrientation.Vertical; l.WordWrapEnabled = true; l.SetDrawInside(true); mChartAllTables.Data = data; mChartAllTables.AxisRight.SetDrawLabels(false); mChartAllTables.XAxis.SetDrawLabels(false); mChartAllTables.AnimateXY(3000, 3000); mChartAllTables.Description.Enabled = true; mChartAllTables.Description.Text = "All tables chart"; mChartAllTables.Invalidate(); return(mView); }
public static void TableToExcel(XYTestLimit dt, string saveFileName) { if (dt == null) { return; } if (File.Exists(saveFileName)) { File.Delete(saveFileName); } IWorkbook workbook; string type = Path.GetExtension(saveFileName).ToLower(); if (type == ".xlsx") { workbook = new XSSFWorkbook(); } else if (type == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = null; } if (workbook == null) { return; } //sheet名 ISheet sheetLimitLine = workbook.CreateSheet("LimitLine"); //表头 IRow rowHeadLimitLine = sheetLimitLine.CreateRow(0); ICell cellHeadType = rowHeadLimitLine.CreateCell(0); cellHeadType.SetCellValue("类型"); ICell cellHeadX1 = rowHeadLimitLine.CreateCell(1); cellHeadX1.SetCellValue("起始频率"); ICell cellHeadX2 = rowHeadLimitLine.CreateCell(2); cellHeadX2.SetCellValue("截止频率"); ICell cellHeadY1 = rowHeadLimitLine.CreateCell(3); cellHeadY1.SetCellValue("起始值"); ICell cellHeadY2 = rowHeadLimitLine.CreateCell(4); cellHeadY2.SetCellValue("截止值"); //数据 for (int i = 1; i <= dt.LimitLine.Count; i++) { LimitLine LL = dt.LimitLine[i - 1]; IRow rowLimitLine = sheetLimitLine.CreateRow(i); ICell cellType = rowLimitLine.CreateCell(0); cellType.SetCellValue(LL.Type.ToString()); ICell cellX1 = rowLimitLine.CreateCell(1); cellX1.SetCellValue(LL.X1.ToString()); ICell cellX2 = rowLimitLine.CreateCell(2); cellX2.SetCellValue(LL.X2.ToString()); ICell cellY1 = rowLimitLine.CreateCell(3); cellY1.SetCellValue(LL.Y1.ToString()); ICell cellY2 = rowLimitLine.CreateCell(4); cellY2.SetCellValue(LL.Y2.ToString()); } //转为字节数组 MemoryStream stream = new MemoryStream(); workbook.Write(stream); var buf = stream.ToArray(); //保存为Excel文件 using (FileStream fs = new FileStream(saveFileName, FileMode.Create, FileAccess.Write)) { fs.Write(buf, 0, buf.Length); fs.Flush(); } }
private void ChartAllTables() { mDicOfDataSets = new Dictionary <string, List <BarEntry> >(); foreach (StatsTables row in mListStatsTables) { if (!mListTableNames.Contains(row.table_name)) { mListTableNames.Add(row.table_name); } } int counter = 0; foreach (string table in mListTableNames) { List <BarEntry> barEntry = new List <BarEntry>(); foreach (StatsTables item in mListStatsTables) { if (table == item.table_name) { barEntry.Add(new BarEntry(counter, item.diff_last_trans)); counter++; } } mDicOfDataSets.Add(table, barEntry); } BarData data = new BarData(); int[] chartColors = { Color.DarkRed, Color.DarkGreen }; foreach (KeyValuePair <string, List <BarEntry> > dicDataSet in mDicOfDataSets) { dataSet = new BarDataSet(dicDataSet.Value, dicDataSet.Key); foreach (BarEntry item in dicDataSet.Value) { if (item.GetY() > 70) { dataSet.SetColors(chartColors[0]); } else { dataSet.SetColors(chartColors[1]); } } data.AddDataSet(dataSet); } LimitLine limitLine = new LimitLine(70f); limitLine.LineColor = Color.DarkRed; limitLine.Enabled = true; XAxis xAxis = chartAllTables.XAxis; xAxis.SetDrawLabels(false); xAxis.Position = XAxis.XAxisPosition.BottomInside; xAxis.SetDrawGridLines(true); YAxis yAxis = chartAllTables.AxisLeft; yAxis.SetDrawGridLines(true); yAxis.AddLimitLine(limitLine); chartAllTables.Data = data; chartAllTables.AxisRight.SetDrawLabels(false); chartAllTables.AnimateXY(3000, 3000); chartAllTables.Legend.Enabled = false; chartAllTables.SetTouchEnabled(true); chartAllTables.SetPinchZoom(false); chartAllTables.DoubleTapToZoomEnabled = false; chartAllTables.Description.Enabled = true; chartAllTables.Description.Text = "All tables chart"; //chartAllTables.SetBackgroundColor(Color.WhiteSmoke); chartAllTables.Invalidate(); }