diff options
| author | Jacob Palecki <[email protected]> | 2020-08-19 15:26:25 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2020-08-19 15:26:25 -0700 |
| commit | 53c9025337166a408febc15078af3e9b136b3bab (patch) | |
| tree | c124a399bf5ae56abf9405a41c2908fd753acfbe | |
| parent | Merge pull request #15 from JacobPalecki/GUI (diff) | |
| download | rawaccel-53c9025337166a408febc15078af3e9b136b3bab.tar.xz rawaccel-53c9025337166a408febc15078af3e9b136b3bab.zip | |
Add natural gain accel; add scale by DPI, poll rate in GUI
| -rw-r--r-- | common/accel-base.hpp | 2 | ||||
| -rw-r--r-- | common/accel-naturalgain.hpp | 32 | ||||
| -rw-r--r-- | common/common.vcxitems | 1 | ||||
| -rw-r--r-- | common/rawaccel.hpp | 3 | ||||
| -rw-r--r-- | grapher/Form1.Designer.cs | 315 | ||||
| -rw-r--r-- | grapher/Form1.cs | 9 | ||||
| -rw-r--r-- | grapher/Layouts/NaturalGainLayout.cs | 20 | ||||
| -rw-r--r-- | grapher/Layouts/OffLayout.cs | 2 | ||||
| -rw-r--r-- | grapher/Models/AccelGUI.cs | 17 | ||||
| -rw-r--r-- | grapher/Models/Calculations/AccelCalculator.cs | 64 | ||||
| -rw-r--r-- | grapher/Models/Options/AccelOptions.cs | 1 | ||||
| -rw-r--r-- | grapher/grapher.csproj | 1 |
12 files changed, 318 insertions, 149 deletions
diff --git a/common/accel-base.hpp b/common/accel-base.hpp index 60b7362..f280e3e 100644 --- a/common/accel-base.hpp +++ b/common/accel-base.hpp @@ -36,7 +36,7 @@ namespace rawaccel { /// <summary> Coefficients applied to acceleration per axis.</summary> vec2d weight = { 1, 1 }; - /// <summary> Generally, the acceleration ramp rate. + /// <summary> Generally, the acceleration ramp rate.</summary> double speed_coeff = 0; accel_base(const accel_args& args) { diff --git a/common/accel-naturalgain.hpp b/common/accel-naturalgain.hpp new file mode 100644 index 0000000..95c0be2 --- /dev/null +++ b/common/accel-naturalgain.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include <math.h> + +#include "accel-base.hpp" + +namespace rawaccel { + + /// <summary> Struct to hold "natural" (vanishing difference) gain implementation. </summary> + struct accel_naturalgain : accel_base { + double limit = 1; + double midpoint = 0; + + accel_naturalgain(const accel_args& args) : accel_base(args) { + verify(args); + + limit = args.limit - 1; + speed_coeff /= limit; + } + + inline double accelerate(double speed) const { + // f(x) = k((e^(-mx)-1)/mx + 1) + double scaled_speed = speed_coeff * speed; + return limit * (((exp(-scaled_speed) - 1) / scaled_speed) + 1); + } + + void verify(const accel_args& args) const { + if (args.limit <= 1) bad_arg("limit must be greater than 1"); + } + }; + +} diff --git a/common/common.vcxitems b/common/common.vcxitems index 9696ac6..0471b5f 100644 --- a/common/common.vcxitems +++ b/common/common.vcxitems @@ -19,6 +19,7 @@ <ClInclude Include="$(MSBuildThisFileDirectory)accel-linear.hpp" /> <ClInclude Include="$(MSBuildThisFileDirectory)accel-logarithmic.hpp" /> <ClInclude Include="$(MSBuildThisFileDirectory)accel-natural.hpp" /> + <ClInclude Include="$(MSBuildThisFileDirectory)accel-naturalgain.hpp" /> <ClInclude Include="$(MSBuildThisFileDirectory)accel-noaccel.hpp" /> <ClInclude Include="$(MSBuildThisFileDirectory)accel-power.hpp" /> <ClInclude Include="$(MSBuildThisFileDirectory)accel-sigmoid.hpp" /> diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index 8dc4825..37418cd 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -9,6 +9,7 @@ #include "accel-linear.hpp" #include "accel-classic.hpp" #include "accel-natural.hpp" +#include "accel-naturalgain.hpp" #include "accel-logarithmic.hpp" #include "accel-sigmoid.hpp" #include "accel-power.hpp" @@ -76,7 +77,7 @@ namespace rawaccel { }; /// <summary> Tagged union to hold all accel implementations and allow "polymorphism" via a visitor call. </summary> - using accel_impl_t = tagged_union<accel_linear, accel_classic, accel_natural, accel_logarithmic, accel_sigmoid, accel_power, accel_noaccel>; + using accel_impl_t = tagged_union<accel_linear, accel_classic, accel_natural, accel_logarithmic, accel_sigmoid, accel_power, accel_naturalgain, accel_noaccel>; /// <summary> Struct to hold information about applying a gain cap. </summary> struct velocity_gain_cap { diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index f30de99..788f3c7 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -30,30 +30,30 @@ namespace grapher /// </summary> private void InitializeComponent() { - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea3 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend3 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.Windows.Forms.DataVisualization.Charting.Series series5 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.Series series6 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea4 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend4 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.Windows.Forms.DataVisualization.Charting.Series series7 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.Series series8 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea5 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend5 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.Windows.Forms.DataVisualization.Charting.Series series9 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.Series series10 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea6 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend6 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.Windows.Forms.DataVisualization.Charting.Series series11 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.Series series12 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea13 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend13 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series25 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Series series26 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea14 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend14 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series27 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Series series28 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea15 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend15 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series29 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Series series30 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea16 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend16 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series31 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Series series32 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea17 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend17 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series33 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Series series34 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea18 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend18 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series35 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Series series36 = new System.Windows.Forms.DataVisualization.Charting.Series(); this.AccelerationChart = new System.Windows.Forms.DataVisualization.Charting.Chart(); this.accelTypeDrop = new System.Windows.Forms.ComboBox(); this.sensitivityBoxX = new System.Windows.Forms.TextBox(); @@ -85,6 +85,12 @@ namespace grapher this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.graphsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.showVelocityGainToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.scaleByDPIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.dPIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DPITextBox = new System.Windows.Forms.ToolStripTextBox(); + this.pollRateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PollRateTextBox = new System.Windows.Forms.ToolStripTextBox(); + this.ScaleMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.advancedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.capStyleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.sensitivityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -104,25 +110,25 @@ namespace grapher // // AccelerationChart // - chartArea1.AxisX.Title = "Speed (counts/ms)"; - chartArea1.AxisY.Title = "Sensitivity (magnitude ratio)"; - chartArea1.Name = "ChartArea1"; - this.AccelerationChart.ChartAreas.Add(chartArea1); - legend1.Name = "Legend1"; - this.AccelerationChart.Legends.Add(legend1); + chartArea13.AxisX.Title = "Speed (counts/ms)"; + chartArea13.AxisY.Title = "Sensitivity (magnitude ratio)"; + chartArea13.Name = "ChartArea1"; + this.AccelerationChart.ChartAreas.Add(chartArea13); + legend13.Name = "Legend1"; + this.AccelerationChart.Legends.Add(legend13); this.AccelerationChart.Location = new System.Drawing.Point(240, 0); this.AccelerationChart.Name = "AccelerationChart"; - series1.ChartArea = "ChartArea1"; - series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; - series1.Legend = "Legend1"; - series1.Name = "Accelerated Sensitivity"; - series2.ChartArea = "ChartArea1"; - series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; - series2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - series2.Legend = "Legend1"; - series2.Name = "LastAccelVal"; - this.AccelerationChart.Series.Add(series1); - this.AccelerationChart.Series.Add(series2); + series25.ChartArea = "ChartArea1"; + series25.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + series25.Legend = "Legend1"; + series25.Name = "Accelerated Sensitivity"; + series26.ChartArea = "ChartArea1"; + series26.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; + series26.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + series26.Legend = "Legend1"; + series26.Name = "LastAccelVal"; + this.AccelerationChart.Series.Add(series25); + this.AccelerationChart.Series.Add(series26); this.AccelerationChart.Size = new System.Drawing.Size(723, 328); this.AccelerationChart.TabIndex = 0; this.AccelerationChart.Text = "chart1"; @@ -345,50 +351,50 @@ namespace grapher // // VelocityChart // - chartArea2.AxisX.Title = "Speed (count/ms)"; - chartArea2.AxisY.Title = "Output Speed (counts/ms)"; - chartArea2.Name = "ChartArea1"; - this.VelocityChart.ChartAreas.Add(chartArea2); - legend2.Name = "Legend1"; - this.VelocityChart.Legends.Add(legend2); + chartArea14.AxisX.Title = "Speed (count/ms)"; + chartArea14.AxisY.Title = "Output Speed (counts/ms)"; + chartArea14.Name = "ChartArea1"; + this.VelocityChart.ChartAreas.Add(chartArea14); + legend14.Name = "Legend1"; + this.VelocityChart.Legends.Add(legend14); this.VelocityChart.Location = new System.Drawing.Point(240, 334); this.VelocityChart.Name = "VelocityChart"; - series3.ChartArea = "ChartArea1"; - series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; - series3.Legend = "Legend1"; - series3.Name = "Mouse Velocity"; - series4.ChartArea = "ChartArea1"; - series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; - series4.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - series4.Legend = "Legend1"; - series4.Name = "LastVelocityVal"; - this.VelocityChart.Series.Add(series3); - this.VelocityChart.Series.Add(series4); + series27.ChartArea = "ChartArea1"; + series27.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + series27.Legend = "Legend1"; + series27.Name = "Mouse Velocity"; + series28.ChartArea = "ChartArea1"; + series28.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; + series28.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + series28.Legend = "Legend1"; + series28.Name = "LastVelocityVal"; + this.VelocityChart.Series.Add(series27); + this.VelocityChart.Series.Add(series28); this.VelocityChart.Size = new System.Drawing.Size(723, 307); this.VelocityChart.TabIndex = 28; this.VelocityChart.Text = "chart1"; // // GainChart // - chartArea3.AxisX.Title = "Speed (counts/ms)"; - chartArea3.AxisY.Title = "Slope of Velocity Chart"; - chartArea3.Name = "ChartArea1"; - this.GainChart.ChartAreas.Add(chartArea3); - legend3.Name = "Legend1"; - this.GainChart.Legends.Add(legend3); + chartArea15.AxisX.Title = "Speed (counts/ms)"; + chartArea15.AxisY.Title = "Slope of Velocity Chart"; + chartArea15.Name = "ChartArea1"; + this.GainChart.ChartAreas.Add(chartArea15); + legend15.Name = "Legend1"; + this.GainChart.Legends.Add(legend15); this.GainChart.Location = new System.Drawing.Point(240, 647); this.GainChart.Name = "GainChart"; - series5.ChartArea = "ChartArea1"; - series5.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; - series5.Legend = "Legend1"; - series5.Name = "Velocity Gain"; - series6.ChartArea = "ChartArea1"; - series6.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; - series6.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - series6.Legend = "Legend1"; - series6.Name = "LastGainVal"; - this.GainChart.Series.Add(series5); - this.GainChart.Series.Add(series6); + series29.ChartArea = "ChartArea1"; + series29.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + series29.Legend = "Legend1"; + series29.Name = "Velocity Gain"; + series30.ChartArea = "ChartArea1"; + series30.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; + series30.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + series30.Legend = "Legend1"; + series30.Name = "LastGainVal"; + this.GainChart.Series.Add(series29); + this.GainChart.Series.Add(series30); this.GainChart.Size = new System.Drawing.Size(723, 309); this.GainChart.TabIndex = 29; this.GainChart.Text = "chart1"; @@ -409,7 +415,8 @@ namespace grapher // this.graphsToolStripMenuItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.graphsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.showVelocityGainToolStripMenuItem}); + this.showVelocityGainToolStripMenuItem, + this.scaleByDPIToolStripMenuItem}); this.graphsToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); this.graphsToolStripMenuItem.Name = "graphsToolStripMenuItem"; this.graphsToolStripMenuItem.Size = new System.Drawing.Size(53, 20); @@ -418,9 +425,53 @@ namespace grapher // showVelocityGainToolStripMenuItem // this.showVelocityGainToolStripMenuItem.Name = "showVelocityGainToolStripMenuItem"; - this.showVelocityGainToolStripMenuItem.Size = new System.Drawing.Size(187, 22); + this.showVelocityGainToolStripMenuItem.Size = new System.Drawing.Size(198, 22); this.showVelocityGainToolStripMenuItem.Text = "Show Velocity && Gain"; // + // scaleByDPIToolStripMenuItem + // + this.scaleByDPIToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.dPIToolStripMenuItem, + this.pollRateToolStripMenuItem, + this.ScaleMenuItem}); + this.scaleByDPIToolStripMenuItem.Name = "scaleByDPIToolStripMenuItem"; + this.scaleByDPIToolStripMenuItem.Size = new System.Drawing.Size(198, 22); + this.scaleByDPIToolStripMenuItem.Text = "Scale by Mouse Settngs"; + // + // dPIToolStripMenuItem + // + this.dPIToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.DPITextBox}); + this.dPIToolStripMenuItem.Name = "dPIToolStripMenuItem"; + this.dPIToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.dPIToolStripMenuItem.Text = "DPI"; + // + // DPITextBox + // + this.DPITextBox.Font = new System.Drawing.Font("Segoe UI", 9F); + this.DPITextBox.Name = "DPITextBox"; + this.DPITextBox.Size = new System.Drawing.Size(100, 23); + // + // pollRateToolStripMenuItem + // + this.pollRateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.PollRateTextBox}); + this.pollRateToolStripMenuItem.Name = "pollRateToolStripMenuItem"; + this.pollRateToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.pollRateToolStripMenuItem.Text = "Poll Rate"; + // + // PollRateTextBox + // + this.PollRateTextBox.Font = new System.Drawing.Font("Segoe UI", 9F); + this.PollRateTextBox.Name = "PollRateTextBox"; + this.PollRateTextBox.Size = new System.Drawing.Size(100, 23); + // + // ScaleMenuItem + // + this.ScaleMenuItem.Name = "ScaleMenuItem"; + this.ScaleMenuItem.Size = new System.Drawing.Size(180, 22); + this.ScaleMenuItem.Text = "Re-scale by above"; + // // advancedToolStripMenuItem // this.advancedToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -435,7 +486,7 @@ namespace grapher this.sensitivityToolStripMenuItem, this.velocityGainToolStripMenuItem}); this.capStyleToolStripMenuItem.Name = "capStyleToolStripMenuItem"; - this.capStyleToolStripMenuItem.Size = new System.Drawing.Size(123, 22); + this.capStyleToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.capStyleToolStripMenuItem.Text = "Cap Style"; // // sensitivityToolStripMenuItem @@ -454,75 +505,75 @@ namespace grapher // // AccelerationChartY // - chartArea4.AxisX.Title = "Speed (counts/ms)"; - chartArea4.AxisY.Title = "Sensitivity (magnitude ratio)"; - chartArea4.Name = "ChartArea1"; - this.AccelerationChartY.ChartAreas.Add(chartArea4); - legend4.Name = "Legend1"; - this.AccelerationChartY.Legends.Add(legend4); + chartArea16.AxisX.Title = "Speed (counts/ms)"; + chartArea16.AxisY.Title = "Sensitivity (magnitude ratio)"; + chartArea16.Name = "ChartArea1"; + this.AccelerationChartY.ChartAreas.Add(chartArea16); + legend16.Name = "Legend1"; + this.AccelerationChartY.Legends.Add(legend16); this.AccelerationChartY.Location = new System.Drawing.Point(969, 0); this.AccelerationChartY.Name = "AccelerationChartY"; - series7.ChartArea = "ChartArea1"; - series7.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; - series7.Legend = "Legend1"; - series7.Name = "Accelerated Sensitivity"; - series8.ChartArea = "ChartArea1"; - series8.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; - series8.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - series8.Legend = "Legend1"; - series8.Name = "LastAccelVal"; - this.AccelerationChartY.Series.Add(series7); - this.AccelerationChartY.Series.Add(series8); + series31.ChartArea = "ChartArea1"; + series31.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + series31.Legend = "Legend1"; + series31.Name = "Accelerated Sensitivity"; + series32.ChartArea = "ChartArea1"; + series32.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; + series32.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + series32.Legend = "Legend1"; + series32.Name = "LastAccelVal"; + this.AccelerationChartY.Series.Add(series31); + this.AccelerationChartY.Series.Add(series32); this.AccelerationChartY.Size = new System.Drawing.Size(723, 328); this.AccelerationChartY.TabIndex = 31; this.AccelerationChartY.Text = "chart1"; // // VelocityChartY // - chartArea5.AxisX.Title = "Speed (count/ms)"; - chartArea5.AxisY.Title = "Output Speed (counts/ms)"; - chartArea5.Name = "ChartArea1"; - this.VelocityChartY.ChartAreas.Add(chartArea5); - legend5.Name = "Legend1"; - this.VelocityChartY.Legends.Add(legend5); + chartArea17.AxisX.Title = "Speed (count/ms)"; + chartArea17.AxisY.Title = "Output Speed (counts/ms)"; + chartArea17.Name = "ChartArea1"; + this.VelocityChartY.ChartAreas.Add(chartArea17); + legend17.Name = "Legend1"; + this.VelocityChartY.Legends.Add(legend17); this.VelocityChartY.Location = new System.Drawing.Point(970, 334); this.VelocityChartY.Name = "VelocityChartY"; - series9.ChartArea = "ChartArea1"; - series9.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; - series9.Legend = "Legend1"; - series9.Name = "Mouse Velocity"; - series10.ChartArea = "ChartArea1"; - series10.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; - series10.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - series10.Legend = "Legend1"; - series10.Name = "LastVelocityVal"; - this.VelocityChartY.Series.Add(series9); - this.VelocityChartY.Series.Add(series10); + series33.ChartArea = "ChartArea1"; + series33.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + series33.Legend = "Legend1"; + series33.Name = "Mouse Velocity"; + series34.ChartArea = "ChartArea1"; + series34.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; + series34.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + series34.Legend = "Legend1"; + series34.Name = "LastVelocityVal"; + this.VelocityChartY.Series.Add(series33); + this.VelocityChartY.Series.Add(series34); this.VelocityChartY.Size = new System.Drawing.Size(723, 307); this.VelocityChartY.TabIndex = 32; this.VelocityChartY.Text = "chart1"; // // GainChartY // - chartArea6.AxisX.Title = "Speed (counts/ms)"; - chartArea6.AxisY.Title = "Slope of Velocity Chart"; - chartArea6.Name = "ChartArea1"; - this.GainChartY.ChartAreas.Add(chartArea6); - legend6.Name = "Legend1"; - this.GainChartY.Legends.Add(legend6); + chartArea18.AxisX.Title = "Speed (counts/ms)"; + chartArea18.AxisY.Title = "Slope of Velocity Chart"; + chartArea18.Name = "ChartArea1"; + this.GainChartY.ChartAreas.Add(chartArea18); + legend18.Name = "Legend1"; + this.GainChartY.Legends.Add(legend18); this.GainChartY.Location = new System.Drawing.Point(970, 647); this.GainChartY.Name = "GainChartY"; - series11.ChartArea = "ChartArea1"; - series11.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; - series11.Legend = "Legend1"; - series11.Name = "Velocity Gain"; - series12.ChartArea = "ChartArea1"; - series12.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; - series12.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - series12.Legend = "Legend1"; - series12.Name = "LastGainVal"; - this.GainChartY.Series.Add(series11); - this.GainChartY.Series.Add(series12); + series35.ChartArea = "ChartArea1"; + series35.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + series35.Legend = "Legend1"; + series35.Name = "Velocity Gain"; + series36.ChartArea = "ChartArea1"; + series36.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; + series36.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + series36.Legend = "Legend1"; + series36.Name = "LastGainVal"; + this.GainChartY.Series.Add(series35); + this.GainChartY.Series.Add(series36); this.GainChartY.Size = new System.Drawing.Size(723, 309); this.GainChartY.TabIndex = 33; this.GainChartY.Text = "chart1"; @@ -632,6 +683,12 @@ namespace grapher private System.Windows.Forms.DataVisualization.Charting.Chart VelocityChartY; private System.Windows.Forms.DataVisualization.Charting.Chart GainChartY; private System.Windows.Forms.Label MouseLabel; + private System.Windows.Forms.ToolStripMenuItem scaleByDPIToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem dPIToolStripMenuItem; + private System.Windows.Forms.ToolStripTextBox DPITextBox; + private System.Windows.Forms.ToolStripMenuItem pollRateToolStripMenuItem; + private System.Windows.Forms.ToolStripTextBox PollRateTextBox; + private System.Windows.Forms.ToolStripMenuItem ScaleMenuItem; } } diff --git a/grapher/Form1.cs b/grapher/Form1.cs index d8db6fc..6e08683 100644 --- a/grapher/Form1.cs +++ b/grapher/Form1.cs @@ -9,6 +9,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices; +using grapher.Models.Calculations; namespace grapher { @@ -131,8 +132,13 @@ namespace grapher cap, weight); + AccelCalculator accelCalculator = new AccelCalculator( + new Field(DPITextBox.TextBox, this, AccelCalculator.DefaultDPI), + new Field(PollRateTextBox.TextBox, this, AccelCalculator.DefaultPollRate)); + AccelGUI = new AccelGUI( this, + accelCalculator, accelCharts, managedAcceleration, accelerationOptions, @@ -145,7 +151,8 @@ namespace grapher limitOrExponent, midpoint, writeButton, - MouseLabel); + MouseLabel, + ScaleMenuItem); } #endregion Constructor diff --git a/grapher/Layouts/NaturalGainLayout.cs b/grapher/Layouts/NaturalGainLayout.cs new file mode 100644 index 0000000..e062850 --- /dev/null +++ b/grapher/Layouts/NaturalGainLayout.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace grapher.Layouts +{ + public class NaturalGainLayout : LayoutBase + { + public NaturalGainLayout() + : base() + { + Name = "NaturalGain"; + Index = 7; + ShowOptions = new bool[] { true, true, true, false }; + OptionNames = new string[] { Offset, Acceleration, Limit, string.Empty }; + } + } +} diff --git a/grapher/Layouts/OffLayout.cs b/grapher/Layouts/OffLayout.cs index cecba05..55f44b7 100644 --- a/grapher/Layouts/OffLayout.cs +++ b/grapher/Layouts/OffLayout.cs @@ -12,7 +12,7 @@ namespace grapher.Layouts : base() { Name = "Off"; - Index = 7; + Index = 8; ShowOptions = new bool[] { false, false, false, false }; OptionNames = new string[] { string.Empty, string.Empty, string.Empty, string.Empty }; ShowOptionsXY = new bool[] { false, false }; diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs index 8eb2226..2c27bf7 100644 --- a/grapher/Models/AccelGUI.cs +++ b/grapher/Models/AccelGUI.cs @@ -18,6 +18,7 @@ namespace grapher public AccelGUI( RawAcceleration accelForm, + AccelCalculator accelCalculator, AccelCharts accelCharts, ManagedAccel managedAccel, AccelOptions accelOptions, @@ -30,9 +31,11 @@ namespace grapher Option limtOrExp, Option midpoint, Button writeButton, - Label mouseMoveLabel) + Label mouseMoveLabel, + ToolStripMenuItem scaleMenuItem) { AccelForm = accelForm; + AccelCalculator = accelCalculator; AccelCharts = accelCharts; ManagedAcceleration = managedAccel; AccelerationOptions = accelOptions; @@ -45,11 +48,14 @@ namespace grapher LimitOrExponent = limtOrExp; Midpoint = midpoint; WriteButton = writeButton; + ScaleMenuItem = scaleMenuItem; ManagedAcceleration.ReadFromDriver(); UpdateGraph(); MouseWatcher = new MouseWatcher(AccelForm, mouseMoveLabel, AccelCharts); + + ScaleMenuItem.Click += new System.EventHandler(OnScaleMenuItemClick); } #endregion constructors @@ -58,6 +64,8 @@ namespace grapher public RawAcceleration AccelForm { get; } + public AccelCalculator AccelCalculator { get; } + public AccelCharts AccelCharts { get; } public ManagedAccel ManagedAcceleration { get; } @@ -84,17 +92,22 @@ namespace grapher public MouseWatcher MouseWatcher { get; } + public ToolStripMenuItem ScaleMenuItem { get; } + #endregion properties #region methods - public void UpdateGraph() { AccelCalculator.Calculate(AccelCharts.AccelData, ManagedAcceleration); AccelCharts.Bind(); } + private void OnScaleMenuItemClick(object sender, EventArgs e) + { + UpdateGraph(); + } #endregion methods } diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index bba3c32..0346fb8 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -4,13 +4,17 @@ using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows.Forms; namespace grapher.Models.Calculations { - public static class AccelCalculator + public class AccelCalculator { - public const int MaxCombined = 100; - public const int MaxXY = 150; + public const int DefaultDPI = 1200; + public const int DefaultPollRate = 1000; + public const int Resolution = 100; + public const double MaxMultiplier = 85; + public const double XYToCombinedRatio = 1.3; public struct MagnitudeData { @@ -19,12 +23,33 @@ namespace grapher.Models.Calculations public int y; } - public static ReadOnlyCollection<MagnitudeData> MagnitudesCombined = GetMagnitudes(); - public static ReadOnlyCollection<MagnitudeData> MagnitudesX = GetMagnitudesX(); - public static ReadOnlyCollection<MagnitudeData> MagnitudesY = GetMagnitudesY(); - public static void Calculate(AccelData data, ManagedAccel accel) + public AccelCalculator(Field dpi, Field pollRate) { + DPI = dpi; + PollRate = pollRate; + } + + public ReadOnlyCollection<MagnitudeData> MagnitudesCombined { get; private set; } + + public ReadOnlyCollection<MagnitudeData> MagnitudesX { get; private set; } + + public ReadOnlyCollection<MagnitudeData> MagnitudesY { get; private set; } + + public Field DPI { get; private set; } + + public Field PollRate { get; private set; } + + private double CombinedMaxVelocity { get; set; } + + private double XYMaxVelocity { get; set; } + + private int Increment { get; set; } + + public void Calculate(AccelData data, ManagedAccel accel) + { + ScaleByMouseSettings(); + data.Clear(); Calculate(data.Combined, accel, accel.GetSensitivityX(), MagnitudesCombined); @@ -70,12 +95,12 @@ namespace grapher.Models.Calculations data.OrderedVelocityPointsList.AddRange(data.VelocityPoints.Values.ToList()); } - public static ReadOnlyCollection<MagnitudeData> GetMagnitudes() + public ReadOnlyCollection<MagnitudeData> GetMagnitudes() { var magnitudes = new List<MagnitudeData>(); - for (int i = 0; i < MaxCombined; i++) + for (int i = 0; i < CombinedMaxVelocity; i+=Increment) { - for (int j = 0; j <= i; j++) + for (int j = 0; j <= i; j+=Increment) { MagnitudeData magnitudeData; magnitudeData.magnitude = Magnitude(i, j); @@ -90,11 +115,11 @@ namespace grapher.Models.Calculations return magnitudes.AsReadOnly(); } - public static ReadOnlyCollection<MagnitudeData> GetMagnitudesX() + public ReadOnlyCollection<MagnitudeData> GetMagnitudesX() { var magnitudes = new List<MagnitudeData>(); - for (int i = 0; i < MaxXY; i++) + for (int i = 0; i < XYMaxVelocity; i+=Increment) { MagnitudeData magnitudeData; magnitudeData.magnitude = i; @@ -106,11 +131,11 @@ namespace grapher.Models.Calculations return magnitudes.AsReadOnly(); } - public static ReadOnlyCollection<MagnitudeData> GetMagnitudesY() + public ReadOnlyCollection<MagnitudeData> GetMagnitudesY() { var magnitudes = new List<MagnitudeData>(); - for (int i = 0; i < MaxXY; i++) + for (int i = 0; i < XYMaxVelocity; i+=Increment) { MagnitudeData magnitudeData; magnitudeData.magnitude = i; @@ -141,5 +166,16 @@ namespace grapher.Models.Calculations { return Magnitude(x, y) / time; } + + public void ScaleByMouseSettings() + { + var dpiPollFactor = DPI.Data / PollRate.Data; + CombinedMaxVelocity = dpiPollFactor * MaxMultiplier; + Increment = (int) Math.Floor(CombinedMaxVelocity / Resolution); + XYMaxVelocity = CombinedMaxVelocity * 1.5; + MagnitudesCombined = GetMagnitudes(); + MagnitudesX = GetMagnitudesX(); + MagnitudesY = GetMagnitudesY(); + } } } diff --git a/grapher/Models/Options/AccelOptions.cs b/grapher/Models/Options/AccelOptions.cs index b233552..03d6ff6 100644 --- a/grapher/Models/Options/AccelOptions.cs +++ b/grapher/Models/Options/AccelOptions.cs @@ -22,6 +22,7 @@ namespace grapher new LogLayout(), new SigmoidLayout(), new PowerLayout(), + new NaturalGainLayout(), new OffLayout() }.ToDictionary(k => k.Name); diff --git a/grapher/grapher.csproj b/grapher/grapher.csproj index cbda661..cc7a8b4 100644 --- a/grapher/grapher.csproj +++ b/grapher/grapher.csproj @@ -47,6 +47,7 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> + <Compile Include="Layouts\NaturalGainLayout.cs" /> <Compile Include="Models\Calculations\AccelCalculator.cs" /> <Compile Include="Models\Calculations\AccelChartData.cs" /> <Compile Include="Models\Calculations\AccelData.cs" /> |