Generalize Power Zones for any sport

All sports defined as values for Sport metadata field can have
specifics Power Zones and default to Bike zones otherwise.
Similar to current power zones for Run.
Part 3 of #3280
This commit is contained in:
Alejandro Martinez
2021-05-26 12:42:17 -03:00
parent 380dc47ac7
commit 3a07cc52d7
36 changed files with 298 additions and 300 deletions

View File

@@ -208,35 +208,35 @@ Bindings::athleteZones(PyObject* date, QString sport) const
gcZoneConfig swim("bike");
// BIKE POWER
if (context->athlete->zones(false)) {
if (context->athlete->zones("Bike")) {
// run through the bike zones
int range=context->athlete->zones(false)->whichRange(forDate);
int range=context->athlete->zones("Bike")->whichRange(forDate);
if (range >= 0) {
bike.date = forDate;
bike.cp = context->athlete->zones(false)->getCP(range);
bike.wprime = context->athlete->zones(false)->getWprime(range);
bike.pmax = context->athlete->zones(false)->getPmax(range);
bike.aetp = context->athlete->zones(false)->getAeT(range);
bike.ftp = context->athlete->zones(false)->getFTP(range);
bike.zoneslow = context->athlete->zones(false)->getZoneLows(range);
bike.cp = context->athlete->zones("Bike")->getCP(range);
bike.wprime = context->athlete->zones("Bike")->getWprime(range);
bike.pmax = context->athlete->zones("Bike")->getPmax(range);
bike.aetp = context->athlete->zones("Bike")->getAeT(range);
bike.ftp = context->athlete->zones("Bike")->getFTP(range);
bike.zoneslow = context->athlete->zones("Bike")->getZoneLows(range);
}
}
// RUN POWER
if (context->athlete->zones(false)) {
if (context->athlete->zones("Run")) {
// run through the bike zones
int range=context->athlete->zones(true)->whichRange(forDate);
int range=context->athlete->zones("Run")->whichRange(forDate);
if (range >= 0) {
run.date = forDate;
run.cp = context->athlete->zones(true)->getCP(range);
run.wprime = context->athlete->zones(true)->getWprime(range);
run.pmax = context->athlete->zones(true)->getPmax(range);
run.aetp = context->athlete->zones(true)->getAeT(range);
run.ftp = context->athlete->zones(true)->getFTP(range);
run.zoneslow = context->athlete->zones(true)->getZoneLows(range);
run.cp = context->athlete->zones("Run")->getCP(range);
run.wprime = context->athlete->zones("Run")->getWprime(range);
run.pmax = context->athlete->zones("Run")->getPmax(range);
run.aetp = context->athlete->zones("Run")->getAeT(range);
run.ftp = context->athlete->zones("Run")->getFTP(range);
run.zoneslow = context->athlete->zones("Run")->getZoneLows(range);
}
}
@@ -299,41 +299,41 @@ Bindings::athleteZones(PyObject* date, QString sport) const
} else {
// BIKE POWER
if (context->athlete->zones(false)) {
if (context->athlete->zones("Bike")) {
for (int range=0; range < context->athlete->zones(false)->getRangeSize(); range++) {
for (int range=0; range < context->athlete->zones("Bike")->getRangeSize(); range++) {
// run through the bike zones
gcZoneConfig c("bike");
c.date = context->athlete->zones(false)->getStartDate(range);
c.cp = context->athlete->zones(false)->getCP(range);
c.wprime = context->athlete->zones(false)->getWprime(range);
c.pmax = context->athlete->zones(false)->getPmax(range);
c.aetp = context->athlete->zones(false)->getAeT(range);
c.ftp = context->athlete->zones(false)->getFTP(range);
c.zoneslow = context->athlete->zones(false)->getZoneLows(range);
c.date = context->athlete->zones("Bike")->getStartDate(range);
c.cp = context->athlete->zones("Bike")->getCP(range);
c.wprime = context->athlete->zones("Bike")->getWprime(range);
c.pmax = context->athlete->zones("Bike")->getPmax(range);
c.aetp = context->athlete->zones("Bike")->getAeT(range);
c.ftp = context->athlete->zones("Bike")->getFTP(range);
c.zoneslow = context->athlete->zones("Bike")->getZoneLows(range);
config << c;
}
}
// RUN POWER
if (context->athlete->zones(false)) {
if (context->athlete->zones("Run")) {
// run through the bike zones
for (int range=0; range < context->athlete->zones(true)->getRangeSize(); range++) {
for (int range=0; range < context->athlete->zones("Run")->getRangeSize(); range++) {
// run through the bike zones
gcZoneConfig c("run");
c.date = context->athlete->zones(true)->getStartDate(range);
c.cp = context->athlete->zones(true)->getCP(range);
c.wprime = context->athlete->zones(true)->getWprime(range);
c.pmax = context->athlete->zones(true)->getPmax(range);
c.aetp = context->athlete->zones(true)->getAeT(range);
c.ftp = context->athlete->zones(true)->getFTP(range);
c.zoneslow = context->athlete->zones(true)->getZoneLows(range);
c.date = context->athlete->zones("Run")->getStartDate(range);
c.cp = context->athlete->zones("Run")->getCP(range);
c.wprime = context->athlete->zones("Run")->getWprime(range);
c.pmax = context->athlete->zones("Run")->getPmax(range);
c.aetp = context->athlete->zones("Run")->getAeT(range);
c.ftp = context->athlete->zones("Run")->getFTP(range);
c.zoneslow = context->athlete->zones("Run")->getZoneLows(range);
config << c;
}