diff --git a/core/plannernotes.cpp b/core/plannernotes.cpp index 4cea0a792..7c39b2578 100644 --- a/core/plannernotes.cpp +++ b/core/plannernotes.cpp @@ -443,7 +443,7 @@ void diveplan::add_plan_to_notes(struct dive &dive, bool show_disclaimer, planne { const char *depth_unit; - int altitude = (int) get_depth_units((int) (pressure_to_altitude(surface_pressure)), NULL, &depth_unit); + int altitude = (int) get_depth_units(pressure_to_altitude(surface_pressure).mm, NULL, &depth_unit); buf += casprintf_loc(translate("gettextFromC", "ATM pressure: %dmbar (%d%s)
\n\n"), surface_pressure, altitude, depth_unit); } diff --git a/core/units.cpp b/core/units.cpp index 7d855840e..c32810e2e 100644 --- a/core/units.cpp +++ b/core/units.cpp @@ -204,3 +204,8 @@ depth_t m_or_ft(int m, int ft) int mm = prefs.units.length == units::METERS ? m * 1000 : feet_to_mm(ft); return depth_t::from_base(mm); } + +depth_t pressure_to_altitude(pressure_t pressure) +{ // returns altitude in mm above sea level + return depth_t::from_base(static_cast(log(1013.0 / pressure.mbar) * 7800000)); +} diff --git a/core/units.h b/core/units.h index 5e6718084..79ad9ac98 100644 --- a/core/units.h +++ b/core/units.h @@ -436,10 +436,7 @@ static inline pressure_t altitude_to_pressure(int32_t altitude) { // altitude i return pressure_t { .mbar = int_cast (1013.0 * exp(- altitude / 7800000.0)) }; } -static inline int32_t pressure_to_altitude(pressure_t pressure) -{ // returns altitude in mm above sea level - return (int32_t) (log(1013.0 / pressure.mbar) * 7800000); -} +depth_t pressure_to_altitude(pressure_t pressure); /* * We keep our internal data in well-specified units, but diff --git a/desktop-widgets/diveplanner.cpp b/desktop-widgets/diveplanner.cpp index 2184f6fce..5015fd542 100644 --- a/desktop-widgets/diveplanner.cpp +++ b/desktop-widgets/diveplanner.cpp @@ -163,7 +163,7 @@ void DivePlannerWidget::settingsChanged() } ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::DEPTH, new SpinBoxDelegate(0, maxDepth, 1, this)); ui.atmHeight->blockSignals(true); - ui.atmHeight->setValue((int) get_depth_units((int) pressure_to_altitude(DivePlannerPointsModel::instance()->getSurfacePressure()), NULL, NULL)); + ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(DivePlannerPointsModel::instance()->getSurfacePressure()).mm, NULL, NULL)); ui.atmHeight->blockSignals(false); ui.dateEdit->setDisplayFormat(QString::fromStdString(prefs.date_format)); @@ -175,7 +175,7 @@ void DivePlannerWidget::atmPressureChanged(int pressure_in_mbar) pressure_t pressure { .mbar = pressure_in_mbar }; DivePlannerPointsModel::instance()->setSurfacePressure(pressure); ui.atmHeight->blockSignals(true); - ui.atmHeight->setValue((int) get_depth_units((int) pressure_to_altitude(pressure), NULL, NULL)); + ui.atmHeight->setValue((int) get_depth_units(pressure_to_altitude(pressure).mm, NULL, NULL)); ui.atmHeight->blockSignals(false); } diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.cpp b/desktop-widgets/tab-widgets/TabDiveInformation.cpp index b4ce8576d..61e8e0baa 100644 --- a/desktop-widgets/tab-widgets/TabDiveInformation.cpp +++ b/desktop-widgets/tab-widgets/TabDiveInformation.cpp @@ -442,12 +442,12 @@ void TabDiveInformation::updateTextBox(int event) // Either the text box has bee } else { // i.e. event == COMBO_CHANGED, that is, "m" or "ft" was selected from combobox // Show estimated altitude bool ok; - double convertVal = 0.0010; // Metric conversion fro mm to m pressure_t pressure = { .mbar = ui->atmPressVal->text().toInt(&ok,10) }; if (ok && ui->atmPressVal->text().length()) { // Show existing atm press as an altitude: - if (prefs.units.length == units::FEET) // For imperial units - convertVal = mm_to_feet(1); // convert from mm to ft - ui->atmPressVal->setText(QString::number((int)(pressure_to_altitude(pressure) * convertVal))); + double convertVal = (prefs.units.length == units::FEET) ? + mm_to_feet(1) : // convert from mm to ft + 0.001; // Metric conversion fro mm to m + ui->atmPressVal->setText(QString::number((int)(pressure_to_altitude(pressure).mm * convertVal))); } } break;