aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/SideChains/RealTimeGraphEx/Models/RealTimeGraphExReachPolygon.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/SideChains/RealTimeGraphEx/Models/RealTimeGraphExReachPolygon.cs')
-rw-r--r--Software/Visual_Studio/SideChains/RealTimeGraphEx/Models/RealTimeGraphExReachPolygon.cs244
1 files changed, 244 insertions, 0 deletions
diff --git a/Software/Visual_Studio/SideChains/RealTimeGraphEx/Models/RealTimeGraphExReachPolygon.cs b/Software/Visual_Studio/SideChains/RealTimeGraphEx/Models/RealTimeGraphExReachPolygon.cs
new file mode 100644
index 000000000..2761131a3
--- /dev/null
+++ b/Software/Visual_Studio/SideChains/RealTimeGraphEx/Models/RealTimeGraphExReachPolygon.cs
@@ -0,0 +1,244 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace RealTimeGraphEx.Models
+{
+ public class RealTimeGraphExReachPolygon
+ {
+ public List<Point> Points { get; set; }
+ public List<double> ActualValues { get; set; }
+
+ public int TotalPoints
+ {
+ get { return Points.Count; }
+ }
+
+ public RealTimeGraphExReachPolygon()
+ {
+ Points = new List<Point>();
+ ActualValues = new List<double>();
+ }
+
+ public Point Add(double xValue, double yValue, double actualValue)
+ {
+ var p = new Point(xValue, yValue);
+ Points.Add(p);
+ ActualValues.Add(actualValue);
+ return p;
+ }
+
+ public Point Replace(double xValue, double yValue, double actualValue, int index)
+ {
+ var p = new Point(xValue, yValue);
+ Points.RemoveAt(index);
+ Points.Insert(index, p);
+ ActualValues.RemoveAt(index);
+ ActualValues.Insert(index, actualValue);
+
+ return p;
+ }
+
+ public void RemoveFromStart(int count)
+ {
+ lock (Points)
+ {
+ Points.RemoveRange(0, count);
+ ActualValues.RemoveRange(0, count);
+
+ double offSet = Points[0].X;
+
+ for (int i = 0; i < Points.Count; i++)
+ {
+ Points[i] = new Point(Points[i].X - offSet, Points[i].Y);
+ }
+ }
+ }
+
+ public void ClearPoints()
+ {
+ Points.Clear();
+ }
+
+ public void ClearActualPoints()
+ {
+ ActualValues.Clear();
+ }
+
+ public List<Point> ToPolygonPointsFill(double width, double height)
+ {
+ lock (Points)
+ {
+ List<Point> points = new List<Point>();
+
+ for (int i = 0; i < Points.Count; i++)
+ {
+ points.Add(Points[i]);
+ }
+
+ points.Add(new Point(width, height));
+
+ points.Add(new Point(0, height));
+
+ points.Add(new Point(0, points[0].Y));
+
+ return points;
+ }
+ }
+
+ public List<Point> ToPolygonPointsFill(double width, double height, double scaleFactor, Func<double, double> scaleY)
+ {
+ double xValue = 0;
+
+ lock (Points)
+ {
+ List<Point> points = new List<Point>();
+
+ for (int i = 0; i < Points.Count; i++)
+ {
+ points.Add(new Point(xValue, scaleY(Points[i].Y)));
+ xValue += scaleFactor;
+ }
+
+ points.Add(new Point(xValue, height));
+
+ points.Add(new Point(0, height));
+
+ points.Add(new Point(0, points[0].Y));
+
+ return points;
+ }
+ }
+
+ public List<Point> ToPolygonPoints(double width, double height, double scaleFactor, Func<double, double> scaleY)
+ {
+ double xValue = 0;
+
+ lock (Points)
+ {
+ List<Point> points = new List<Point>();
+
+ for (int i = 0; i < Points.Count; i++)
+ {
+ points.Add(new Point(xValue, scaleY(Points[i].Y)));
+ xValue += scaleFactor;
+ }
+
+ return points;
+ }
+ }
+
+ public List<Point> ToPolygonPointsWaveFill(double width, double height)
+ {
+ lock (Points)
+ {
+ List<Point> points = new List<Point>();
+
+ for (int i = 0; i < Points.Count; i++)
+ {
+ points.Add(Points[i]);
+ }
+
+ for (int i = Points.Count - 1; i >= 0; i--)
+ {
+ points.Add(new Point(Points[i].X, (height - Points[i].Y)));
+ }
+
+ points.Add(new Point(points[0].X, (height / 2)));
+
+ points.Add(new Point(0, (height / 2)));
+
+ points.Add(new Point(0, points[0].Y));
+
+ return points;
+ }
+ }
+
+ public List<Point> ToPolygonPointsWaveFill(double width, double height, double scaleFactor, Func<double, double> scaleY)
+ {
+ if (Points.Count == 0) return new List<Point>();
+
+ double xValue = 0;
+
+ lock (Points)
+ {
+ List<Point> points = new List<Point>();
+
+ for (int i = 0; i < Points.Count; i++)
+ {
+ points.Add(new Point(xValue, scaleY(Points[i].Y)));
+ xValue += scaleFactor;
+ }
+
+ //points.Add(new Point(width, points[points.Count - 1].Y));
+
+ points.Add(new Point(width, (height / 2)));
+
+ points.Add(new Point(width, (height - scaleY(Points[Points.Count - 1].Y))));
+
+ xValue -= scaleFactor;
+
+ for (int i = Points.Count - 1; i >= 0; i--)
+ {
+ points.Add(new Point(xValue, (height - scaleY(Points[i].Y))));
+ xValue -= scaleFactor;
+ }
+
+ points.Add(new Point(0, points[points.Count - 1].Y));
+
+ points.Add(new Point(0, (height / 2)));
+
+ points.Add(new Point(0, (height / 2)));
+
+ points.Add(new Point(0, points[0].Y));
+
+ return points;
+ }
+ }
+
+ public List<Point> ToPolygonPointsWave(double width, double height, double scaleFactor, Func<double, double> scaleY)
+ {
+ if (Points.Count == 0) return new List<Point>();
+
+ double xValue = 0;
+
+ lock (Points)
+ {
+ List<Point> points = new List<Point>();
+
+ for (int i = 0; i < Points.Count; i++)
+ {
+ points.Add(new Point(xValue, scaleY(Points[i].Y)));
+ xValue += scaleFactor;
+ }
+
+ //points.Add(new Point(width, points[points.Count - 1].Y));
+
+ points.Add(new Point(width, (height / 2)));
+
+ points.Add(new Point(width, (height - scaleY(Points[Points.Count - 1].Y))));
+
+ xValue -= scaleFactor;
+
+ for (int i = Points.Count - 1; i >= 0; i--)
+ {
+ points.Add(new Point(xValue, (height - scaleY(Points[i].Y))));
+ xValue -= scaleFactor;
+ }
+
+ points.Add(new Point(0, points[points.Count - 1].Y));
+
+ points.Add(new Point(0, (height / 2)));
+
+ points.Add(new Point(0, (height / 2)));
+
+ points.Add(new Point(0, points[0].Y));
+
+ return points;
+ }
+ }
+ }
+}