Plot OC-pO2 graph for SCR dives

This commit allows plotting the OC-equivalent pO2 graph for PSCR
dives. This happens in both the cases where there is no external
O2-monitoring AND when there is external pO2 monitoring. The
calculations are only done for PSCR dives and is achieved as
follows:

1) Within plot-info create a pressure-t called OC_pO2 in
   profile.h and populate this variable with the open-circuit
   pO2 values in profile.c.
2) Create a new partialPressureGasItem ocpo2GasItem in
   profilewidget2.h and, in profilewidget2.cpp, initialise it
   to read the plot-info OC_pO2 values and enable its
   display by using the setVisible method. The
   diveplotdatamodel was also touched in order to achieve
   this.
3) Create a pref button that controls the display of OC-pO2 for SCR dives
4) Change the colour of the OC-pO2 grpah to orange
5) Change the connection of the crr_OC_pO2 signal to be appropriate
6) rename the OC_pO2 attribute to scr_OC-pO2

Signed-off-by: Willem Ferguson <willemferguson@zoology.up.ac.za>
This commit is contained in:
Willem Ferguson 2018-03-14 17:13:37 +02:00 committed by Lubomir I. Ivanov
parent e9fd4cb7dc
commit 81a812539c
14 changed files with 107 additions and 52 deletions

View file

@ -32,6 +32,8 @@ void fill_profile_color()
profile_color[CCRSENSOR1] = COLOR(TUNDORA1_MED_TRANS, BLACK1_LOW_TRANS, TUNDORA1_MED_TRANS);
profile_color[CCRSENSOR2] = COLOR(ROYALBLUE2_LOW_TRANS, BLACK1_LOW_TRANS, ROYALBLUE2_LOW_TRANS);
profile_color[CCRSENSOR3] = COLOR(PEANUT, BLACK1_LOW_TRANS, PEANUT);
profile_color[SCR_OCPO2] = COLOR(PIRATEGOLD1_MED_TRANS, BLACK1_LOW_TRANS, PIRATEGOLD1_MED_TRANS);
profile_color[PP_LINES] = COLOR(BLACK1_HIGH_TRANS, BLACK1_LOW_TRANS, BLACK1_HIGH_TRANS);
profile_color[TEXT_BACKGROUND] = COLOR(CONCRETE1_LOWER_TRANS, WHITE1, CONCRETE1_LOWER_TRANS);

View file

@ -29,6 +29,7 @@
#define PERSIANRED1 QColor::fromRgbF(0.8, 0.2, 0.2, 1)
#define TUSCANY1 QColor::fromRgbF(0.8, 0.4, 0.2, 1)
#define PIRATEGOLD1 QColor::fromRgbF(0.8, 0.5, 0.0, 1)
#define PIRATEGOLD1_MED_TRANS QColor::fromRgbF(0.8, 0.5, 0.0, 0.75)
#define HOKEYPOKEY1 QColor::fromRgbF(0.8, 0.6, 0.2, 1)
#define CINNABAR1 QColor::fromRgbF(0.9, 0.3, 0.2, 1)
#define REDORANGE1 QColor::fromRgbF(1.0, 0.2, 0.2, 1)
@ -102,6 +103,7 @@ typedef enum {
CCRSENSOR1,
CCRSENSOR2,
CCRSENSOR3,
SCR_OCPO2,
PP_LINES,
/* Other colors */

View file

@ -87,6 +87,7 @@ struct preferences {
bool gf_low_at_maxdepth;
bool show_ccr_setpoint;
bool show_ccr_sensors;
bool show_scr_ocpo2;
bool display_invalid_dives;
short unit_system;
struct units units;

View file

@ -1214,6 +1214,8 @@ static void calculate_gas_information_new(struct dive *dive, struct divecomputer
fill_pressures(&entry->pressures, amb_pressure, gasmix, entry->o2pressure.mbar / 1000.0, dive->dc.divemode);
fn2 = (int)(1000.0 * entry->pressures.n2 / amb_pressure);
fhe = (int)(1000.0 * entry->pressures.he / amb_pressure);
if (dc->divemode == PSCR) // OC pO2 is calulated for PSCR with or without external PO2 monitoring.
entry->scr_OC_pO2.mbar = (int) depth_to_mbar(entry->depth, dive) * get_o2(get_gasmix(dive, dc, entry->sec, &ev, gasmix)) / 1000;
/* Calculate MOD, EAD, END and EADD based on partial pressures calculated before
* so there is no difference in calculating between OC and CC

View file

@ -46,6 +46,7 @@ struct plot_data {
pressure_t o2pressure; // for rebreathers, this is consensus measured po2, or setpoint otherwise. 0 for OC.
pressure_t o2sensor[3]; //for rebreathers with up to 3 PO2 sensors
pressure_t o2setpoint;
pressure_t scr_OC_pO2;
double mod, ead, end, eadd;
velocity_t velocity;
int speed;

View file

@ -392,6 +392,11 @@ bool TechnicalDetailsSettings::rulerGraph() const
return prefs.rulergraph;
}
bool TechnicalDetailsSettings::showSCROCpO2() const
{
return prefs.show_scr_ocpo2;
}
bool TechnicalDetailsSettings::showCCRSetpoint() const
{
return prefs.show_ccr_setpoint;
@ -667,6 +672,18 @@ void TechnicalDetailsSettings::setShowCCRSetpoint(bool value)
emit showCCRSetpointChanged(value);
}
void TechnicalDetailsSettings::setShowSCROCpO2(bool value)
{
if (value == prefs.show_scr_ocpo2)
return;
QSettings s;
s.beginGroup(group);
s.setValue("show_scr_ocpo2", value);
prefs.show_scr_ocpo2 = value;
emit showSCROCpO2Changed(value);
}
void TechnicalDetailsSettings::setShowCCRSensors(bool value)
{
if (value == prefs.show_ccr_sensors)
@ -2222,6 +2239,7 @@ void SettingsObjectWrapper::load()
GET_BOOL("gf_low_at_maxdepth", gf_low_at_maxdepth);
GET_BOOL("show_ccr_setpoint",show_ccr_setpoint);
GET_BOOL("show_ccr_sensors",show_ccr_sensors);
GET_BOOL("show_scr_ocpo2",show_scr_ocpo2);
GET_BOOL("zoomed_plot", zoomed_plot);
set_gf(prefs.gflow, prefs.gfhigh);
set_vpmb_conservatism(prefs.vpmb_conservatism);

View file

@ -135,6 +135,7 @@ class TechnicalDetailsSettings : public QObject {
Q_PROPERTY(bool rulergraph READ rulerGraph WRITE setRulerGraph NOTIFY rulerGraphChanged)
Q_PROPERTY(bool show_ccr_setpoint READ showCCRSetpoint WRITE setShowCCRSetpoint NOTIFY showCCRSetpointChanged)
Q_PROPERTY(bool show_ccr_sensors READ showCCRSensors WRITE setShowCCRSensors NOTIFY showCCRSensorsChanged)
Q_PROPERTY(bool show_scr_ocpo2 READ showSCROCpO2 WRITE setShowSCROCpO2 NOTIFY showSCROCpO2Changed)
Q_PROPERTY(bool zoomed_plot READ zoomedPlot WRITE setZoomedPlot NOTIFY zoomedPlotChanged)
Q_PROPERTY(bool show_sac READ showSac WRITE setShowSac NOTIFY showSacChanged)
Q_PROPERTY(bool display_unused_tanks READ displayUnusedTanks WRITE setDisplayUnusedTanks NOTIFY displayUnusedTanksChanged)
@ -165,6 +166,7 @@ public:
bool rulerGraph() const;
bool showCCRSetpoint() const;
bool showCCRSensors() const;
bool showSCROCpO2() const;
bool zoomedPlot() const;
bool showSac() const;
bool displayUnusedTanks() const;
@ -193,6 +195,7 @@ public slots:
void setRulerGraph(bool value);
void setShowCCRSetpoint(bool value);
void setShowCCRSensors(bool value);
void setShowSCROCpO2(bool value);
void setZoomedPlot(bool value);
void setShowSac(bool value);
void setDisplayUnusedTanks(bool value);
@ -221,6 +224,7 @@ signals:
void rulerGraphChanged(bool value);
void showCCRSetpointChanged(bool value);
void showCCRSensorsChanged(bool value);
void showSCROCpO2Changed(bool value);
void zoomedPlotChanged(bool value);
void showSacChanged(bool value);
void displayUnusedTanksChanged(bool value);

View file

@ -42,6 +42,7 @@ struct preferences default_prefs = {
.gf_low_at_maxdepth = false,
.show_ccr_setpoint = false,
.show_ccr_sensors = false,
.show_scr_ocpo2 = false,
.font_size = -1,
.display_invalid_dives = false,
.show_sac = false,