summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2020-08-19 15:26:25 -0700
committerJacob Palecki <[email protected]>2020-08-19 15:26:25 -0700
commit53c9025337166a408febc15078af3e9b136b3bab (patch)
treec124a399bf5ae56abf9405a41c2908fd753acfbe
parentMerge pull request #15 from JacobPalecki/GUI (diff)
downloadrawaccel-53c9025337166a408febc15078af3e9b136b3bab.tar.xz
rawaccel-53c9025337166a408febc15078af3e9b136b3bab.zip
Add natural gain accel; add scale by DPI, poll rate in GUI
-rw-r--r--common/accel-base.hpp2
-rw-r--r--common/accel-naturalgain.hpp32
-rw-r--r--common/common.vcxitems1
-rw-r--r--common/rawaccel.hpp3
-rw-r--r--grapher/Form1.Designer.cs315
-rw-r--r--grapher/Form1.cs9
-rw-r--r--grapher/Layouts/NaturalGainLayout.cs20
-rw-r--r--grapher/Layouts/OffLayout.cs2
-rw-r--r--grapher/Models/AccelGUI.cs17
-rw-r--r--grapher/Models/Calculations/AccelCalculator.cs64
-rw-r--r--grapher/Models/Options/AccelOptions.cs1
-rw-r--r--grapher/grapher.csproj1
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" />