[chronojump] CairoGraphRaceAnalyzer draws power bars on speed graph



commit 90f91fcc02fae18843bbc7d05668ee5ad230826d
Author: Xavier de Blas <xaviblas gmail com>
Date:   Mon May 9 17:59:06 2022 +0200

    CairoGraphRaceAnalyzer draws power bars on speed graph

 src/gui/app1/runEncoder.cs    |  6 ++---
 src/gui/cairo/raceAnalyzer.cs | 56 ++++++++++++++++++++++++++++++++++++-------
 src/gui/cairo/xy.cs           |  1 +
 3 files changed, 52 insertions(+), 11 deletions(-)
---
diff --git a/src/gui/app1/runEncoder.cs b/src/gui/app1/runEncoder.cs
index 15b231c80..70445269f 100644
--- a/src/gui/app1/runEncoder.cs
+++ b/src/gui/app1/runEncoder.cs
@@ -2294,7 +2294,7 @@ public partial class ChronoJumpWindow
                                        drawingarea_race_analyzer_capture_position_time, "title",
                                        Catalog.GetString("Distance"), "m",
                                        isSprint, false,
-                                       segmentCalcs, true);
+                                       segmentCalcs, false, true);
 
                cairoGraphRaceAnalyzer_dt.DoSendingList (preferences.fontType.ToString(),
                                cairoGraphRaceAnalyzerPoints_dt_l, triggerListRunEncoder,
@@ -2317,7 +2317,7 @@ public partial class ChronoJumpWindow
                                        drawingarea_race_analyzer_capture_speed_time, "title",
                                        Catalog.GetString("Speed"), "m/s",
                                        isSprint, true,
-                                       segmentCalcs, false);
+                                       segmentCalcs, true, false);
 
                cairoGraphRaceAnalyzer_st.DoSendingList (preferences.fontType.ToString(),
                                cairoGraphRaceAnalyzerPoints_st_l, triggerListRunEncoder,
@@ -2343,7 +2343,7 @@ public partial class ChronoJumpWindow
                                        drawingarea_race_analyzer_capture_accel_time, "title",
                                        Catalog.GetString("Accel"), "m/s^2",
                                        isSprint, false,
-                                       segmentCalcs, false);
+                                       segmentCalcs, false, false);
 
                cairoGraphRaceAnalyzer_at.DoSendingList (preferences.fontType.ToString(),
                                cairoGraphRaceAnalyzerPoints_at_l, triggerListRunEncoder,
diff --git a/src/gui/cairo/raceAnalyzer.cs b/src/gui/cairo/raceAnalyzer.cs
index f19b1c6e1..f3122a71a 100644
--- a/src/gui/cairo/raceAnalyzer.cs
+++ b/src/gui/cairo/raceAnalyzer.cs
@@ -31,6 +31,7 @@ public class CairoGraphRaceAnalyzer : CairoXY
        private bool isSprint;
        private bool plotMaxMark;
        private RunEncoderSegmentCalcs segmentCalcs;
+       private bool plotPowerBars;
        private bool useListOfDoublesOnY;
 
        //to avoid to have new data on PassData while the for is working on plotRealPoints
@@ -41,6 +42,7 @@ public class CairoGraphRaceAnalyzer : CairoXY
                        string yVariable, string yUnits,
                        bool isSprint, bool plotMaxMark,
                        RunEncoderSegmentCalcs segmentCalcs,
+                       bool plotPowerBars,
                        bool useListOfDoublesOnY) //for pos/time graph
        {
                this.area = area;
@@ -54,6 +56,7 @@ public class CairoGraphRaceAnalyzer : CairoXY
                this.isSprint = isSprint;
                this.plotMaxMark = plotMaxMark;
                this.segmentCalcs = segmentCalcs;
+               this.plotPowerBars = plotPowerBars;
                this.useListOfDoublesOnY = useListOfDoublesOnY;
                
 //             doing = false;
@@ -136,7 +139,6 @@ public class CairoGraphRaceAnalyzer : CairoXY
                                //vertical
                                if(segmentCalcs.Count > 0)
                                {
-                                       LogB.Information("dist ; time(s) ; speedCont ; accels ; forces ; 
powers");
                                        g.Save();
                                        g.SetDash(new double[]{1, 2}, 0);
                                        for(int i = 0 ; i < segmentCalcs.Count ; i ++)
@@ -146,13 +148,6 @@ public class CairoGraphRaceAnalyzer : CairoXY
                                                //seconds
                                                string xTextBottom = 
Util.TrimDecimals(segmentCalcs.Time_l[i]/1000000.0, 1).ToString();
                                                double xGraph = 
calculatePaintX(segmentCalcs.Time_l[i]/1000000.0);
-                                               LogB.Information(string.Format("{0} ; {1} ; {2} ; {3} : {4} ; 
{5}",
-                                                                       segmentCalcs.Dist_l[i],
-                                                                       segmentCalcs.Time_l[i]/1000000.0,
-                                                                       segmentCalcs.SpeedCont_l[i],
-                                                                       segmentCalcs.Accel_l[i],
-                                                                       segmentCalcs.Force_l[i],
-                                                                       segmentCalcs.Power_l[i] ));
 
                                                if(useListOfDoublesOnY)
                                                        paintVerticalGridLine(g, Convert.ToInt32(xGraph), 
xTextBottom, textHeight-3);
@@ -165,8 +160,53 @@ public class CairoGraphRaceAnalyzer : CairoXY
                                        {
                                                g.MoveTo(graphWidth - outerMargin, outerMargin);
                                                g.LineTo(outerMargin, outerMargin);
+                                               g.Stroke();
                                                printXAxisTopText();
                                        }
+
+                                       //graph the segmentCalcs
+                                       LogB.Information("dist ; time(s) ; speedCont ; accels ; forces ; 
powers");
+
+                                       if(plotPowerBars)
+                                       {
+                                               g.SetSourceColor (colorFromRGB (66,66,66));
+                                               double powerPropAt0 = MathUtil.GetProportion (0, 
segmentCalcs.Power_l);
+
+                                               //draw Y0 line
+                                               g.MoveTo (outerMargin, calculatePaintYProportion 
(powerPropAt0));
+                                               g.LineTo (calculatePaintX (points_list[points_list.Count 
-1].X), calculatePaintYProportion (powerPropAt0));
+                                               g.Stroke ();
+                                               printText(calculatePaintX (points_list[points_list.Count 
-1].X), calculatePaintYProportion (powerPropAt0),
+                                                               0, textHeight-3, " 0 " + powerstr, g, 
alignTypes.LEFT);
+
+                                               for(int i = 0 ; i < segmentCalcs.Count ; i ++)
+                                               {
+                                                       /* debug
+                                                          LogB.Information(string.Format("{0} ; {1} ; {2} ; 
{3} : {4} ; {5}", segmentCalcs.Dist_l[i], segmentCalcs.Time_l[i]/1000000.0,
+                                                          segmentCalcs.SpeedCont_l[i], 
segmentCalcs.Accel_l[i], segmentCalcs.Force_l[i], segmentCalcs.Power_l[i] ));
+                                                        */
+
+                                                       double powerProp = MathUtil.GetProportion 
(segmentCalcs.Power_l[i], segmentCalcs.Power_l);
+                                                       double xStart = calculatePaintX (points_list[0].X);
+                                                       if(i > 0)
+                                                               xStart = calculatePaintX 
(segmentCalcs.Time_l[i-1]/1000000.0);
+                                                       double xEnd = calculatePaintX 
(segmentCalcs.Time_l[i]/1000000.0);
+
+                                                       g.Rectangle (xStart, //x
+                                                                       calculatePaintYProportion 
(powerPropAt0), //y
+                                                                       xEnd - xStart, //width
+                                                                       calculatePaintYProportion (powerProp) 
- calculatePaintYProportion (powerPropAt0) );
+                                                       g.Fill();
+
+                                                       int textPadding = 1;
+                                                       if(segmentCalcs.Power_l[i] < 0)
+                                                               textPadding = -1;
+                                                       printText((xStart + xEnd) / 2, 
calculatePaintYProportion (powerProp) - (textHeight) * textPadding,
+                                                                       0, textHeight-3, 
Math.Round(segmentCalcs.Power_l[i],1).ToString() + " W", g, alignTypes.CENTER);
+                                               }
+                                       }
+                                       g.Stroke ();
+                                       g.SetSourceColor (black);
                                }
                                //else //maybe we have not arrived to any segment
                                //      paintGridNiceAutoValues (g, minX, absoluteMaxX, minY, absoluteMaxY, 
5, gridTypes.VERTICALLINES, textHeight-3);
diff --git a/src/gui/cairo/xy.cs b/src/gui/cairo/xy.cs
index 467ebbf22..7831c039c 100644
--- a/src/gui/cairo/xy.cs
+++ b/src/gui/cairo/xy.cs
@@ -92,6 +92,7 @@ public abstract class CairoXY : CairoGeneric
        protected string fallStr = Catalog.GetString("Fall");
        protected string speedStr = Catalog.GetString("Speed");
        protected string forceStr = Catalog.GetString("Force");
+       protected string powerStr = Catalog.GetString("Power");
        protected string dateStr = Catalog.GetString("Date");
        protected string timeStr = Catalog.GetString("Time");
        protected string distanceStr = Catalog.GetString("Distance");


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