aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/SideChains/RealTimeGraphX/Renderers/GraphScrollingRenderer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/SideChains/RealTimeGraphX/Renderers/GraphScrollingRenderer.cs')
-rw-r--r--Software/Visual_Studio/SideChains/RealTimeGraphX/Renderers/GraphScrollingRenderer.cs81
1 files changed, 81 insertions, 0 deletions
diff --git a/Software/Visual_Studio/SideChains/RealTimeGraphX/Renderers/GraphScrollingRenderer.cs b/Software/Visual_Studio/SideChains/RealTimeGraphX/Renderers/GraphScrollingRenderer.cs
new file mode 100644
index 000000000..e3bf6182e
--- /dev/null
+++ b/Software/Visual_Studio/SideChains/RealTimeGraphX/Renderers/GraphScrollingRenderer.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RealTimeGraphX.Renderers
+{
+ /// <summary>
+ /// Represents a scrolling style graph renderer.
+ /// </summary>
+ /// <typeparam name="TDataSeries">The type of the graph data series.</typeparam>
+ /// <typeparam name="XDataPoint">The type of the x-axis data point.</typeparam>
+ /// <typeparam name="YDataPoint">The type of the y-axis data point.</typeparam>
+ /// <seealso cref="RealTimeGraphX.GraphRendererBase{XDataPoint, YDataPoint}" />
+ public class GraphScrollingRenderer<TDataSeries, XDataPoint, YDataPoint> : GraphRendererBase<TDataSeries, XDataPoint, YDataPoint> where XDataPoint : GraphDataPointBase where YDataPoint : GraphDataPointBase where TDataSeries : IGraphDataSeries
+ {
+ /// <summary>
+ /// Returns an array of absolute graph data points to render.
+ /// This method is called per data series.
+ /// </summary>
+ /// <param name="seriesCollection">A collection of all data series that is currently in the rendering pass.</param>
+ /// <param name="series">The current data series to render.</param>
+ /// <param name="toRender">Pending data series object to render.</param>
+ /// <returns></returns>
+ protected override List<GraphPoint> OnRender(IEnumerable<PendingSeries> seriesCollection, TDataSeries series, PendingSeries toRender)
+ {
+ XDataPoint min_x = toRender.XX.First();
+ XDataPoint max_x = toRender.XX.Last();
+
+ YDataPoint min_y = Input.Range.MinimumY;
+ YDataPoint max_y = Input.Range.MaximumY;
+
+ if (Input.Range.AutoY)
+ {
+ min_y = _current_min_y;
+ max_y = _current_max_y;
+ }
+
+ OnEffectiveRangeXChanged(min_x, max_x);
+ OnEffectiveRangeYChanged(min_y, max_y);
+
+ var dxList = toRender.XX.Select(x => x.ComputeRelativePosition(min_x, max_x)).ToList();
+ var dyList = toRender.YY.Select(x => x.ComputeRelativePosition(min_y, max_y)).ToList();
+
+ if (max_x - min_x > Input.Range.MaximumX)
+ {
+ var offset = ((max_x - min_x) - Input.Range.MaximumX) + min_x;
+
+ for (int i = 0; i < toRender.XX.Count; i++)
+ {
+ if (toRender.XX[i] < offset)
+ {
+ toRender.XX.RemoveAt(i);
+ toRender.YY.RemoveAt(i);
+ i--;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+
+ List<GraphPoint> points = new List<GraphPoint>();
+
+ for (int i = 0; i < dxList.Count; i++)
+ {
+ float image_x = ConvertXValueToRendererValue(dxList[i]);
+ float image_y = (float)Math.Min(ConvertYValueToRendererValue(dyList[i]), Output.SurfaceHeight - 2);
+
+ GraphPoint point = new GraphPoint(image_x, image_y);
+ points.Add(point);
+ }
+
+ return points;
+ }
+ }
+}