summaryrefslogtreecommitdiff
path: root/grapher/Models/Charts/AccelCharts.cs
diff options
context:
space:
mode:
authora1xd <[email protected]>2020-08-14 03:48:40 -0400
committerGitHub <[email protected]>2020-08-14 03:48:40 -0400
commit0621a7ebd431102d720497a143190505dcfeb7a1 (patch)
tree01d7df8f55e5a1cce90617fd876eaf994eb26846 /grapher/Models/Charts/AccelCharts.cs
parentMerge pull request #14 from JacobPalecki/GainCap (diff)
parentFix initial points, add poll time constant (diff)
downloadrawaccel-0621a7ebd431102d720497a143190505dcfeb7a1.tar.xz
rawaccel-0621a7ebd431102d720497a143190505dcfeb7a1.zip
Merge pull request #15 from JacobPalecki/GUI
GUI: Add x/y graphs, moving dot
Diffstat (limited to 'grapher/Models/Charts/AccelCharts.cs')
-rw-r--r--grapher/Models/Charts/AccelCharts.cs203
1 files changed, 203 insertions, 0 deletions
diff --git a/grapher/Models/Charts/AccelCharts.cs b/grapher/Models/Charts/AccelCharts.cs
new file mode 100644
index 0000000..1aa3909
--- /dev/null
+++ b/grapher/Models/Charts/AccelCharts.cs
@@ -0,0 +1,203 @@
+using grapher.Models.Calculations;
+using grapher.Models.Charts;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Security.Permissions;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+
+namespace grapher
+{
+ public class AccelCharts
+ {
+ public const int ChartSeparationVertical = 10;
+
+ /// <summary> Needed to show full contents in form. Unsure why. </summary>
+ public const int FormHeightPadding = 35;
+
+ public AccelCharts(
+ Form form,
+ ChartXY sensitivityChart,
+ ChartXY velocityChart,
+ ChartXY gainChart,
+ ToolStripMenuItem enableVelocityAndGain,
+ ICollection<CheckBox> checkBoxesXY)
+ {
+ Estimated = new EstimatedPoints();
+ EstimatedX = new EstimatedPoints();
+ EstimatedY = new EstimatedPoints();
+ AccelData = new AccelData(Estimated, EstimatedX, EstimatedY);
+
+ ContaingForm = form;
+ SensitivityChart = sensitivityChart;
+ VelocityChart = velocityChart;
+ GainChart = gainChart;
+ EnableVelocityAndGain = enableVelocityAndGain;
+ CheckBoxesXY = checkBoxesXY;
+
+ SensitivityChart.SetPointBinds(Estimated.Sensitivity, EstimatedX.Sensitivity, EstimatedY.Sensitivity);
+ VelocityChart.SetPointBinds(Estimated.Velocity, EstimatedX.Velocity, EstimatedY.Velocity);
+ GainChart.SetPointBinds(Estimated.Gain, EstimatedX.Gain, EstimatedY.Gain);
+
+ SensitivityChart.SetTop(0);
+ VelocityChart.SetHeight(SensitivityChart.Height);
+ VelocityChart.SetTop(SensitivityChart.Height + ChartSeparationVertical);
+ GainChart.SetHeight(SensitivityChart.Height);
+ GainChart.SetTop(VelocityChart.Top + VelocityChart.Height + ChartSeparationVertical);
+
+ Rectangle screenRectangle = ContaingForm.RectangleToScreen(ContaingForm.ClientRectangle);
+ FormBorderHeight = screenRectangle.Top - ContaingForm.Top;
+
+ EnableVelocityAndGain.Click += new System.EventHandler(OnEnableClick);
+ EnableVelocityAndGain.CheckedChanged += new System.EventHandler(OnEnableCheckStateChange);
+
+ HideVelocityAndGain();
+ Combined = false;
+ ShowCombined();
+ }
+
+ public Form ContaingForm { get; }
+
+ public ChartXY SensitivityChart { get; }
+
+ public ChartXY VelocityChart { get; }
+
+ public ChartXY GainChart { get; }
+
+ public ToolStripMenuItem EnableVelocityAndGain { get; }
+
+ public AccelData AccelData { get; }
+
+ private EstimatedPoints Estimated { get; }
+
+ private EstimatedPoints EstimatedX { get; }
+
+ private EstimatedPoints EstimatedY { get; }
+
+ private ICollection<CheckBox> CheckBoxesXY { get; }
+
+ private bool Combined { get; set; }
+
+ private int FormBorderHeight { get; }
+
+ public void MakeDots(int x, int y, double timeInMs)
+ {
+ if (Combined)
+ {
+ AccelData.CalculateDots(x, y, timeInMs);
+ }
+ else
+ {
+ AccelData.CalculateDotsXY(x, y, timeInMs);
+ }
+ }
+
+ public void DrawPoints()
+ {
+ SensitivityChart.DrawPoints();
+ VelocityChart.DrawPoints();
+ GainChart.DrawPoints();
+ }
+
+ public void Bind()
+ {
+ if (Combined)
+ {
+ SensitivityChart.Bind(AccelData.Combined.AccelPoints);
+ VelocityChart.Bind(AccelData.Combined.VelocityPoints);
+ GainChart.Bind(AccelData.Combined.GainPoints);
+ }
+ else
+ {
+ SensitivityChart.BindXY(AccelData.X.AccelPoints, AccelData.Y.AccelPoints);
+ VelocityChart.BindXY(AccelData.X.VelocityPoints, AccelData.Y.VelocityPoints);
+ GainChart.BindXY(AccelData.X.GainPoints, AccelData.Y.GainPoints);
+ }
+ }
+
+ public void RefreshXY()
+ {
+ if (CheckBoxesXY.All(box => box.Checked))
+ {
+ ShowCombined();
+ }
+ else
+ {
+ ShowXandYSeparate();
+ }
+ }
+
+ private void OnEnableClick(object sender, EventArgs e)
+ {
+ EnableVelocityAndGain.Checked = !EnableVelocityAndGain.Checked;
+ }
+
+ private void OnEnableCheckStateChange(object sender, EventArgs e)
+ {
+ if (EnableVelocityAndGain.Checked)
+ {
+ ShowVelocityAndGain();
+ }
+ else
+ {
+ HideVelocityAndGain();
+ }
+ }
+
+ private void ShowVelocityAndGain()
+ {
+ VelocityChart.Show();
+ GainChart.Show();
+ ContaingForm.Height = SensitivityChart.Height +
+ ChartSeparationVertical +
+ VelocityChart.Height +
+ ChartSeparationVertical +
+ GainChart.Height +
+ FormBorderHeight;
+ }
+
+ private void HideVelocityAndGain()
+ {
+ VelocityChart.Hide();
+ GainChart.Hide();
+ ContaingForm.Height = SensitivityChart.Height + FormBorderHeight;
+ }
+
+ private void ShowXandYSeparate()
+ {
+ if (Combined)
+ {
+ Combined = false;
+
+ SensitivityChart.SetSeparate();
+ VelocityChart.SetSeparate();
+ GainChart.SetSeparate();
+ UpdateFormWidth();
+ Bind();
+ }
+ }
+
+ private void ShowCombined()
+ {
+ if (!Combined)
+ {
+ Combined = true;
+
+ SensitivityChart.SetCombined();
+ VelocityChart.SetCombined();
+ GainChart.SetCombined();
+ UpdateFormWidth();
+ Bind();
+ }
+ }
+
+ private void UpdateFormWidth()
+ {
+ ContaingForm.Width = SensitivityChart.Left + SensitivityChart.Width;
+ }
+ }
+}