Implement height-to-pressure functions in planner

The units.h file has two functions to convert atm pressure to mbar
and also to convert mbar to atm pressure. Implement these two
functions in the planner.

Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za>
This commit is contained in:
willemferguson 2019-05-15 18:39:29 +02:00 committed by bstoeger
parent 9590709e8c
commit a969d1dd45
2 changed files with 7 additions and 5 deletions

View file

@ -11,6 +11,7 @@
#include <string.h> #include <string.h>
#include "dive.h" #include "dive.h"
#include "deco.h" #include "deco.h"
#include "units.h"
#include "divelist.h" #include "divelist.h"
#include "planner.h" #include "planner.h"
#include "gettext.h" #include "gettext.h"
@ -420,7 +421,7 @@ void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool show_d
put_string(&buf, "<br>"); put_string(&buf, "<br>");
const char *depth_unit; const char *depth_unit;
int altitude = (int) get_depth_units((int) (log(1013.0 / diveplan->surface_pressure) * 7800000), NULL, &depth_unit); int altitude = (int) get_depth_units((int) (pressure_to_altitude(diveplan->surface_pressure)), NULL, &depth_unit);
put_format_loc(&buf, translate("gettextFromC", "ATM pressure: %dmbar (%d%s)<br></div>"), diveplan->surface_pressure, altitude, depth_unit); put_format_loc(&buf, translate("gettextFromC", "ATM pressure: %dmbar (%d%s)<br></div>"), diveplan->surface_pressure, altitude, depth_unit);

View file

@ -4,6 +4,7 @@
#include "desktop-widgets/mainwindow.h" #include "desktop-widgets/mainwindow.h"
#include "core/planner.h" #include "core/planner.h"
#include "core/qthelper.h" #include "core/qthelper.h"
#include "core/units.h"
#include "core/settings/qPrefDivePlanner.h" #include "core/settings/qPrefDivePlanner.h"
#include "core/gettextfromc.h" #include "core/gettextfromc.h"
@ -235,7 +236,7 @@ void DivePlannerWidget::settingsChanged()
ui.atmHeight->setMaximum(3000); ui.atmHeight->setMaximum(3000);
} }
ui.atmHeight->blockSignals(true); ui.atmHeight->blockSignals(true);
ui.atmHeight->setValue((int) get_depth_units((int) (log(1013.0 / plannerModel->getSurfacePressure()) * 7800000), NULL,NULL)); ui.atmHeight->setValue((int) get_depth_units((int) pressure_to_altitude(plannerModel->getSurfacePressure()), NULL,NULL));
ui.atmHeight->blockSignals(false); ui.atmHeight->blockSignals(false);
} }
@ -243,13 +244,13 @@ void DivePlannerWidget::atmPressureChanged(const int pressure)
{ {
plannerModel->setSurfacePressure(pressure); plannerModel->setSurfacePressure(pressure);
ui.atmHeight->blockSignals(true); ui.atmHeight->blockSignals(true);
ui.atmHeight->setValue((int) get_depth_units((int) (log(1013.0 / pressure) * 7800000), NULL,NULL)); ui.atmHeight->setValue((int) get_depth_units((int) pressure_to_altitude(pressure), NULL,NULL));
ui.atmHeight->blockSignals(false); ui.atmHeight->blockSignals(false);
} }
void DivePlannerWidget::heightChanged(const int height) void DivePlannerWidget::heightChanged(const int height)
{ { // height is in ft or in meters
int pressure = (int) (1013.0 * exp(- (double) units_to_depth((double) height).mm / 7800000.0)); int pressure = (int) (altitude_to_pressure(units_to_depth((double) height).mm));
ui.ATMPressure->blockSignals(true); ui.ATMPressure->blockSignals(true);
ui.ATMPressure->setValue(pressure); ui.ATMPressure->setValue(pressure);
ui.ATMPressure->blockSignals(false); ui.ATMPressure->blockSignals(false);