[chronojump] Doing encoder inertial machine



commit ba02ed9164d2241ce523e91251ba3588583d3206
Author: Xavier de Blas <xaviblas gmail com>
Date:   Wed Jul 17 20:09:37 2013 +0200

    Doing encoder inertial machine

 encoder/graph.R           |   20 +++++++-----
 glade/chronojump.glade    |   74 ++++++++++++++++++++++++++++++++++++++------
 src/gui/encoder.cs        |   29 ++++++++++++++----
 src/sqlite/main.cs        |   14 ++++++++-
 src/sqlite/preferences.cs |    1 +
 5 files changed, 113 insertions(+), 25 deletions(-)
---
diff --git a/encoder/graph.R b/encoder/graph.R
index 943c5a4..81898b1 100644
--- a/encoder/graph.R
+++ b/encoder/graph.R
@@ -1326,8 +1326,12 @@ doProcess <- function(options) {
        #if(isJump)
        #       titleType="jump"
 
+       Analysis on curvesRI comes:
+       #"curvesRI;0.001" [1] string [2] inertia momentum
+       analysisCurves = unlist(strsplit(Analysis, "\\;"))
+       
        curvesPlot = FALSE
-       if(Analysis == "curves" || Analysis == "curvesRI") {
+       if(Analysis == "curves" || analysisCurves[1] == "curvesRI") {
                curvesPlot = TRUE
                par(mar=c(2,2.5,2,1))
        }
@@ -1470,15 +1474,15 @@ doProcess <- function(options) {
                        quit()
                }
 
-               if(Analysis == "curvesRI") 
+               if(analysisCurves[1] == "curvesRI") 
                        Eccon = "ecS"
                
-               curves=findCurves(rawdata, Eccon, MinHeight, curvesPlot, Title, Analysis)
+               curves=findCurves(rawdata, Eccon, MinHeight, curvesPlot, Title, analysisCurves[1])
 
                print("curves PRE")
                print(curves)
 
-               if(Analysis == "curvesRI") {
+               if(analysisCurves[1] == "curvesRI") {
                        rawdata = fixRawdataRIByKnowingHeight(rawdata)
                        curves = fixCurvesRIByKnowingHeight(rawdata, curves)
 
@@ -1491,7 +1495,7 @@ doProcess <- function(options) {
                n=length(curves[,1])
                quitIfNoData(n, curves, OutputData1)
 
-               if(Analysis != "curvesRI") {
+               if(analysisCurves[1] != "curvesRI") {
                        for(i in 1:n) { 
                                curves[i,1]=reduceCurveBySpeed(Eccon, i, curves[i,1], 
rawdata[curves[i,1]:curves[i,2]], 
                                                               SmoothingOneEC, SmoothingOneC)
@@ -1505,7 +1509,7 @@ doProcess <- function(options) {
                                adjVert = 0
                                if(Eccon=="ecS") {
                                        myEc=c("c","e")
-                                       if(Analysis == "curvesRI")
+                                       if(analysisCurves[1] == "curvesRI")
                                                myEc=c("e","c")
                                        myLabel = paste(trunc((i+1)/2),myEc[((i%%2)+1)],sep="")
                                        myY = rawdata.cumsum[curves[i,1]]/10
@@ -1646,7 +1650,7 @@ doProcess <- function(options) {
        if(
           Analysis == "powerBars" || analysisCross[1] == "cross" || 
           Analysis == "1RMBadillo2010" || analysisCross[1] == "1RMAnyExercise" || 
-          Analysis == "curves" || Analysis == "curvesRI" || writeCurves) 
+          Analysis == "curves" || analysisCurves[1] == "curvesRI" || writeCurves) 
        {
                paf = data.frame()
                discardedCurves = NULL
@@ -1750,7 +1754,7 @@ doProcess <- function(options) {
                        paint1RMBadillo2010(paf, Title, OutputData1)
                } 
                
-               if(Analysis == "curves" || Analysis == "curvesRI" || writeCurves) {
+               if(Analysis == "curves" || analysisCurves[1] == "curvesRI" || writeCurves) {
                        if(singleFile)
                                paf=cbind(
                                          "1",                  #seriesName
diff --git a/glade/chronojump.glade b/glade/chronojump.glade
index 276db25..0dece3a 100644
--- a/glade/chronojump.glade
+++ b/glade/chronojump.glade
@@ -12029,13 +12029,14 @@ on current Chronojump version.</property>
                                                             <widget class="GtkHBox" id="hbox90">
                                                             <property name="visible">True</property>
                                                             <property name="can_focus">False</property>
-                                                            <property name="spacing">8</property>
+                                                            <property name="spacing">4</property>
                                                             <child>
                                                             <widget class="GtkRadioButton" 
id="radiobutton_encoder_capture_linear">
-                                                            <property name="label" translatable="yes">Linear 
(default)</property>
+                                                            <property name="label" 
translatable="yes">Linear</property>
                                                             <property name="visible">True</property>
                                                             <property name="can_focus">True</property>
                                                             <property 
name="receives_default">False</property>
+                                                            <property name="tooltip" 
translatable="yes">Linear encoder (default)</property>
                                                             <property 
name="use_action_appearance">False</property>
                                                             <property name="active">True</property>
                                                             <property name="draw_indicator">True</property>
@@ -12053,7 +12054,7 @@ on current Chronojump version.</property>
                                                             <property name="can_focus">True</property>
                                                             <property 
name="receives_default">False</property>
                                                             <property name="has_tooltip">True</property>
-                                                            <property name="tooltip" 
translatable="yes">Linear Encoder upside down</property>
+                                                            <property name="tooltip" 
translatable="yes">Linear encoder upside down</property>
                                                             <property 
name="use_action_appearance">False</property>
                                                             <property name="draw_indicator">True</property>
                                                             <property 
name="group">radiobutton_encoder_capture_linear</property>
@@ -12065,13 +12066,13 @@ on current Chronojump version.</property>
                                                             </packing>
                                                             </child>
                                                             <child>
-                                                            <widget class="GtkRadioButton" 
id="radiobutton_encoder_capture_rotary_inertial">
-                                                            <property name="label" translatable="yes">Rotary 
/ inertial</property>
+                                                            <widget class="GtkRadioButton" 
id="radiobutton_encoder_capture_rotary">
+                                                            <property name="label" 
translatable="yes">Rotary</property>
                                                             <property name="visible">True</property>
                                                             <property name="can_focus">True</property>
                                                             <property 
name="receives_default">False</property>
                                                             <property name="has_tooltip">True</property>
-                                                            <property name="tooltip" 
translatable="yes">Rotary encoder on inertial machine</property>
+                                                            <property name="tooltip" 
translatable="yes">Rotary encoder</property>
                                                             <property 
name="use_action_appearance">False</property>
                                                             <property name="draw_indicator">True</property>
                                                             <property 
name="group">radiobutton_encoder_capture_linear</property>
@@ -12089,6 +12090,59 @@ on current Chronojump version.</property>
                                                             <property name="position">1</property>
                                                             </packing>
                                                             </child>
+                                                            <child>
+                                                            <widget class="GtkHBox" 
id="hbox_encoder_capture_inertial">
+                                                            <property name="visible">True</property>
+                                                            <property name="can_focus">False</property>
+                                                            <property name="spacing">4</property>
+                                                            <child>
+                                                            <widget class="GtkCheckButton" 
id="checkbutton_encoder_capture_inertial">
+                                                            <property name="label" 
translatable="yes">Inertial</property>
+                                                            <property name="visible">True</property>
+                                                            <property name="can_focus">True</property>
+                                                            <property 
name="receives_default">False</property>
+                                                            <property name="tooltip" 
translatable="yes">Inertial machine (Yoyo, VersaPulley)</property>
+                                                            <property 
name="use_action_appearance">False</property>
+                                                            <property name="draw_indicator">True</property>
+                                                            <signal name="clicked" 
handler="on_checkbutton_encoder_capture_inertial_clicked" swapped="no"/>
+                                                            </widget>
+                                                            <packing>
+                                                            <property name="expand">False</property>
+                                                            <property name="fill">False</property>
+                                                            <property name="position">0</property>
+                                                            </packing>
+                                                            </child>
+                                                            <child>
+                                                            <widget class="GtkSpinButton" 
id="spin_encoder_capture_inertial">
+                                                            <property name="can_focus">True</property>
+                                                            <property name="has_tooltip">True</property>
+                                                            <property name="tooltip" 
translatable="yes">Inertia Momentum</property>
+                                                            <property name="invisible_char">●</property>
+                                                            <property 
name="invisible_char_set">True</property>
+                                                            <property 
name="primary_icon_activatable">False</property>
+                                                            <property 
name="secondary_icon_activatable">False</property>
+                                                            <property 
name="primary_icon_sensitive">True</property>
+                                                            <property 
name="secondary_icon_sensitive">True</property>
+                                                            <property name="adjustment">0.01 0 1 0.01 0.01 
0</property>
+                                                            <property name="climb_rate">1</property>
+                                                            <property name="digits">3</property>
+                                                            <property name="snap_to_ticks">True</property>
+                                                            <property name="numeric">True</property>
+                                                            </widget>
+                                                            <packing>
+                                                            <property name="expand">False</property>
+                                                            <property name="fill">False</property>
+                                                            <property name="position">1</property>
+                                                            </packing>
+                                                            </child>
+                                                            </widget>
+                                                            <packing>
+                                                            <property name="expand">False</property>
+                                                            <property name="fill">False</property>
+                                                            <property name="pack_type">end</property>
+                                                            <property name="position">2</property>
+                                                            </packing>
+                                                            </child>
                                                           </widget>
                                                           <packing>
                                                             <property name="expand">True</property>
@@ -12800,7 +12854,7 @@ on current Chronojump version.</property>
                                                   <widget class="GtkHBox" id="hbox77">
                                                     <property name="visible">True</property>
                                                     <property name="can_focus">False</property>
-                                                    <property name="spacing">10</property>
+                                                    <property name="spacing">8</property>
                                                     <child>
                                                       <widget class="GtkButton" 
id="button_encoder_load_signal">
                                                         <property name="visible">True</property>
@@ -12845,7 +12899,7 @@ on current Chronojump version.</property>
                                                       <widget class="GtkHBox" id="hbox107">
                                                         <property name="visible">True</property>
                                                         <property name="can_focus">False</property>
-                                                        <property name="spacing">4</property>
+                                                        <property name="spacing">8</property>
                                                         <child>
                                                           <widget class="GtkButton" 
id="button_encoder_capture_cancel">
                                                             <property name="visible">True</property>
@@ -12917,7 +12971,7 @@ on current Chronojump version.</property>
                                                   <widget class="GtkHBox" id="hbox82">
                                                     <property name="visible">True</property>
                                                     <property name="can_focus">False</property>
-                                                    <property name="spacing">10</property>
+                                                    <property name="spacing">8</property>
                                                     <child>
                                                       <widget class="GtkProgressBar" 
id="encoder_pulsebar_capture">
                                                         <property name="visible">True</property>
@@ -12969,7 +13023,7 @@ on current Chronojump version.</property>
                                                   <widget class="GtkHBox" id="hbox87">
                                                     <property name="visible">True</property>
                                                     <property name="can_focus">False</property>
-                                                    <property name="spacing">10</property>
+                                                    <property name="spacing">8</property>
                                                     <child>
                                                       <widget class="GtkHBox" id="hbox85">
                                                         <property name="width_request">150</property>
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index 69aad4c..24a4d03 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -37,7 +37,9 @@ public partial class ChronoJumpWindow
        
        [Widget] Gtk.RadioButton radiobutton_encoder_capture_linear;
        [Widget] Gtk.RadioButton radiobutton_encoder_capture_linear_inverted;
-       [Widget] Gtk.RadioButton radiobutton_encoder_capture_rotary_inertial;
+       [Widget] Gtk.RadioButton radiobutton_encoder_capture_rotary;
+       [Widget] Gtk.CheckButton checkbutton_encoder_capture_inertial;
+       [Widget] Gtk.SpinButton spin_encoder_capture_inertial;
 
        [Widget] Gtk.Button button_encoder_capture;
        [Widget] Gtk.RadioButton radiobutton_encoder_capture_safe;
@@ -200,6 +202,9 @@ public partial class ChronoJumpWindow
                //the glade cursor_changed does not work on mono 1.2.5 windows
                treeview_encoder_capture_curves.CursorChanged += 
on_treeview_encoder_capture_curves_cursor_changed; 
                createEncoderCombos();
+               
+               spin_encoder_capture_inertial.Value = Convert.ToDouble(Util.ChangeDecimalSeparator(
+                                       SqlitePreferences.Select("inertialmomentum")));
        }
        
        void on_button_encoder_capture_clicked (object o, EventArgs args) 
@@ -280,6 +285,9 @@ public partial class ChronoJumpWindow
                                
                lastRecalculateWasInverted = radiobutton_encoder_capture_linear_inverted.Active;
 
+               //Update inertia momentum of encoder if needed
+               SqlitePreferences.Update("inertialmomentum", Util.ConvertToPoint((double) 
spin_encoder_capture_inertial.Value), false);
+
                if (radiobutton_encoder_capture_external.Active) {
                        encoderStartVideoRecord();
                
@@ -313,6 +321,10 @@ public partial class ChronoJumpWindow
                }
        }
        
+       void on_checkbutton_encoder_capture_inertial_clicked (object o, EventArgs args) {
+               spin_encoder_capture_inertial.Visible = (checkbutton_encoder_capture_inertial.Active);
+       }
+
        void on_combo_encoder_exercise_changed (object o, EventArgs args) {
                if(UtilGtk.ComboGetActive(combo_encoder_exercise) != "") //needed because 
encoder_exercise_edit updates this combo and can be without values in the changing process
                        encoder_change_displaced_weight_and_1RM ();
@@ -489,8 +501,9 @@ public partial class ChronoJumpWindow
        {
                string analysis = "curves";
                //if(capturingRotaryInertial)
-               if(radiobutton_encoder_capture_rotary_inertial.Active)
-                       analysis = "curvesRI";
+               if(radiobutton_encoder_capture_rotary.Active && checkbutton_encoder_capture_inertial.Active)
+                       analysis = "curvesRI;" + Util.ConvertToPoint( //inertial momentum with '.' for R
+                                       (double) spin_encoder_capture_inertial.Value);
 
                string analysisOptions = "-";
                if(encoderPropulsive)
@@ -500,7 +513,7 @@ public partial class ChronoJumpWindow
                if(radiobutton_encoder_capture_linear_inverted.Active)
                        future3 = Constants.EncoderSignalMode.LINEARINVERTED.ToString();
                //if(capturingRotaryInertial)
-               if(radiobutton_encoder_capture_rotary_inertial.Active)
+               if(radiobutton_encoder_capture_rotary.Active && checkbutton_encoder_capture_inertial.Active)
                        future3 = Constants.EncoderSignalMode.ROTARYINERTIAL.ToString();
                
                //see explanation on the top of this file
@@ -1014,7 +1027,11 @@ public partial class ChronoJumpWindow
                                radiobutton_encoder_capture_linear_inverted.Active = 
                                        (es.future3 == Constants.EncoderSignalMode.LINEARINVERTED.ToString());
                                lastRecalculateWasInverted = 
radiobutton_encoder_capture_linear_inverted.Active;
-                               radiobutton_encoder_capture_rotary_inertial.Active = 
+                               radiobutton_encoder_capture_rotary.Active = 
+                                       (es.future3 == Constants.EncoderSignalMode.ROTARYINERTIAL.ToString());
+
+                               //TODO: add also spinbutton 
+                               checkbutton_encoder_capture_inertial.Active = 
                                        (es.future3 == Constants.EncoderSignalMode.ROTARYINERTIAL.ToString());
                        }
                }
@@ -1548,7 +1565,7 @@ public partial class ChronoJumpWindow
 
                //will start calcule curves thread
                if(capturedOk) {
-                       //capturingRotaryInertial = radiobutton_encoder_capture_rotary_inertial.Active;
+                       //capturingRotaryInertial = radiobutton_encoder_capture_rotaryl.Active && 
checkbutton_encoder_capture_inertial.Active
                        
                        calculeCurves();
                }
diff --git a/src/sqlite/main.cs b/src/sqlite/main.cs
index e538110..0fc164d 100644
--- a/src/sqlite/main.cs
+++ b/src/sqlite/main.cs
@@ -72,7 +72,7 @@ class Sqlite
         * Important, change this if there's any update to database
         * Important2: if database version get numbers higher than 1, check if the comparisons with 
currentVersion works ok
         */
-       static string lastChronojumpDatabaseVersion = "0.96";
+       static string lastChronojumpDatabaseVersion = "0.97";
 
        public Sqlite() {
        }
@@ -1303,6 +1303,17 @@ class Sqlite
 
                                currentVersion = "0.96";
                        }
+                       if(currentVersion == "0.96") {
+                               dbcon.Open();
+                               
+                               SqlitePreferences.Insert ("inertialmomentum", "0.01");
+                               Log.WriteLine("Added inertialmomentum in preferences");
+                               
+                               SqlitePreferences.Update ("databaseVersion", "0.97", true); 
+                               dbcon.Close();
+
+                               currentVersion = "0.97";
+                       }
                }
 
                //if changes are made here, remember to change also in CreateTables()
@@ -1442,6 +1453,7 @@ class Sqlite
                SqliteCountry.initialize();
                
                //changes [from - to - desc]
+               //0.96 - 0.97 Converted DB to 0.97 Added inertialmomentum in preferences
                //0.95 - 0.96 Converted DB to 0.96 Encoder signal future3 three modes
                //0.94 - 0.95 Converted DB to 0.95 Added encoder1RMMethod
                //0.93 - 0.94 Converted DB to 0.94 Added encoder1RM table
diff --git a/src/sqlite/preferences.cs b/src/sqlite/preferences.cs
index b6b40c5..30fa71a 100644
--- a/src/sqlite/preferences.cs
+++ b/src/sqlite/preferences.cs
@@ -76,6 +76,7 @@ class SqlitePreferences : Sqlite
                Insert ("encoderSmoothCon", "0.7");
                Insert ("videoDevice", "0"); //first
                Insert ("encoder1RMMethod", Constants.Encoder1RMMethod.WEIGHTED2.ToString());
+               Insert ("inertialmomentum", "0.01");
        }
 
        public static void Insert(string myName, string myValue)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]