Real-time data handling
1//! If RenderEngine is not Direct2D, use BitmapGradientMode=False for max speed.2//! See Timer section below that includes update logic3 4// No Shadows //5Pego1.PePlot.DataShadows = DataShadows.None;6 7// No Flicker //8Pego1.PeConfigure.PrepareImages = true;9Pego1.PeConfigure.CacheBmp = true;10 11// Set Subsets and Points //12Pego1.PeData.Subsets = 2;13Pego1.PeData.Points = 200;14 15Pego1.PeUserInterface.Scrollbar.PointsToGraph = 200; // set to lower number to show earliest16Pego1.PeUserInterface.Scrollbar.PointsToGraphInit = PointsToGraphInit.Last;17Pego1.PePlot.Method = GraphPlottingMethod.Point;18 19// subset line types //20Pego1.PeLegend.SubsetLineTypes[0] = LineType.ThinSolid;21Pego1.PeLegend.SubsetLineTypes[1] = LineType.ThinSolid;22 23// subset point types //24Pego1.PeLegend.SubsetPointTypes[0] = PointType.SquareSolid;25Pego1.PeLegend.SubsetPointTypes[1] = PointType.Plus;26 27// Not ideal for real-time, but nice for presentation/demonstration28//Pego1.PePlot.Option.PointGradientStyle = PlotGradientStyle.NoGradient;29//Pego1.PeColor.PointBorderColor = Color.FromArgb(100, 0, 0, 0);30 31// Main Title32Pego1.PeString.MainTitle = "Simple Graph Real Time";33Pego1.PeString.SubTitle = "";34 35// Manually configure scales //36Pego1.PeGrid.Configure.ManualScaleControlY = ManualScaleControl.MinMax;37 38Pego1.PeGrid.Configure.ManualMinY = 1.0;39Pego1.PeGrid.Configure.ManualMaxY = 100.0;40Pego1.PeGrid.Configure.ManualMinY = 1.0;41Pego1.PeGrid.Configure.ManualMaxDataString = "000.000";42Pego1.PeGrid.Configure.ManualMaxPointLabel = "00:00:00xx";43 44Pego1.PePlot.Allow.StackedData = false;45Pego1.PeUserInterface.Dialog.PointsToGraph = false;46Pego1.PePlot.Allow.Histogram = false;47Pego1.PeUserInterface.Allow.FocalRect = false;48Pego1.PeGrid.LineControl = GridLineControl.Both;49Pego1.PeData.Precision = DataPrecision.OneDecimal;50 51// Needed to allocate point labels so append logic works //52// Set last point label, Points - 1 //53Pego1.PeString.PointLabels[199] = "";54 55// Reset first four default data points56Pego1.PeData.Y[0, 0] = 0;57Pego1.PeData.Y[0, 1] = 0;58Pego1.PeData.Y[0, 2] = 0;59Pego1.PeData.Y[0, 3] = 0;60 61Pego1.PeData.Y[0, 199] = 0; // pre allocates memory62Pego1.PeData.Y[1, 199] = 0;63 64Pego1.PeColor.BitmapGradientMode = true;65Pego1.PeColor.QuickStyle = QuickStyle.DarkNoBorder;66 67Pego1.PeFont.Fixed = true;70Pego1.PeFont.Label.Bold = true;71Pego1.PeConfigure.TextShadows = TextShadows.BoldText;74 75Pego1.PeColor.SubsetColors[0] = MainWindow.DemoColors[0];76Pego1.PeColor.SubsetColors[1] = MainWindow.DemoColors[1];77 78Pego1.PeConfigure.RenderEngine = RenderEngine.Direct2D;79Pego1.PeConfigure.AntiAliasGraphics = true;80Pego1.PeConfigure.AntiAliasText = true;81 82// Set various export defaults //83Pego1.PeSpecial.DpiX = 600;84Pego1.PeSpecial.DpiY = 600;85 86// default export setting //87Pego1.PeUserInterface.Dialog.ExportSizeDef = ExportSizeDef.NoSizeOrPixel;88Pego1.PeUserInterface.Dialog.ExportTypeDef = ExportTypeDef.Png;89Pego1.PeUserInterface.Dialog.ExportDestDef = ExportDestDef.Clipboard;90Pego1.PeUserInterface.Dialog.ExportUnitXDef = "1280";91Pego1.PeUserInterface.Dialog.ExportUnitYDef = "768";92Pego1.PeUserInterface.Dialog.ExportImageDpi = 300;93 94MainWindow.Timer1.Interval = 25;95MainWindow.Timer1.Enabled = true;96MainWindow.Timer1.Start();97 98Pego1.PeFunction.ReinitializeResetImage();99Pego1.Invalidate();100// Optionally call Pego1.Refresh() if you are not seeing changes immediately101 102/*///////////////////////////////////////////////////////103// the following code can be found in the Timer Event //104////////////////////////////////////////////////////////105private void Timer1_Tick(object sender, System.EventArgs e)106{107 // new point label //108 CurrentTime = DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString();109 110 // Changing this variable increases throughput to chart, try 1, 10, 20, to 200111 int nAmountToUpdate = 1;112 113 // new YData //114 float[] NewData = new float[2 * nAmountToUpdate];115 116 for (int t = 0; t < nAmountToUpdate; t++)117 {118 // note this is subset 0 data119 NewData[t] = ((float)(Rand_Num.NextDouble()) * 60) + 2;120 NewData[t + 1] = ((float)(Rand_Num.NextDouble()) * 60) + 2;121 122 // note this is subset 1 data, offset by nAmountToUpdate index as first subset data preceeds second subset data123 NewData[nAmountToUpdate] = ((float)(Rand_Num.NextDouble()) * 90) + 2;124 NewData[nAmountToUpdate + t] = ((float)(Rand_Num.NextDouble()) * 90) + 2;125 }126 127 // transfer new point label //128 for (int t = 0; t < nAmountToUpdate; t++)129 Pego1.PeString.PointLabels.AppendData(CurrentTime);130 131 // transfer new YData //132 // this will also update and view new image //133 // Note last argument nAmountToUpdate, chart will expect array Length = 2 (PeData.Subsets) * nAmountToUpdate134 Pego1.PeData.Y.AppendData(NewData, nAmountToUpdate);135}136 137*/Pego1.PeData.Y[s, p]Click underlined properties to view documentation