[chronojump] CairoGraphRaceAnalyzer draws power bars on speed graph
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] CairoGraphRaceAnalyzer draws power bars on speed graph
- Date: Mon, 9 May 2022 15:59:34 +0000 (UTC)
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]