diff options
Diffstat (limited to 'Software/Visual_Studio/SideChains/RealTimeGraphEx/Models/RealTimeGraphExReachPolygon.cs')
| -rw-r--r-- | Software/Visual_Studio/SideChains/RealTimeGraphEx/Models/RealTimeGraphExReachPolygon.cs | 244 |
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; + } + } + } +} |
