diff options
author | Anton Lundin <glance@acc.umu.se> | 2013-10-14 23:48:43 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-10-17 14:54:11 -0700 |
commit | 437246d3ed280e2275fddc125f2f14005cc11dab (patch) | |
tree | 221b4afa6334acc31af1a1cafd7e170687c0d3ef | |
parent | 0bdf11b09406672853473132929fed1de1bcd492 (diff) | |
download | subsurface-437246d3ed280e2275fddc125f2f14005cc11dab.tar.gz |
Move sac-calculation to profile.c
Signed-off-by: Anton Lundin <glance@acc.umu.se>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | profile.c | 30 | ||||
-rw-r--r-- | profile.h | 3 | ||||
-rw-r--r-- | qt-ui/profilegraphics.cpp | 22 |
3 files changed, 32 insertions, 23 deletions
@@ -203,7 +203,7 @@ int get_cylinder_pressure_range(struct graphics_context *gc) /* Get local sac-rate (in ml/min) between entry1 and entry2 */ -int get_local_sac(struct plot_data *entry1, struct plot_data *entry2, struct dive *dive) +static int get_local_sac(struct plot_data *entry1, struct plot_data *entry2, struct dive *dive) { int index = entry1->cylinderindex; cylinder_t *cyl; @@ -821,6 +821,31 @@ static void populate_cylinder_pressure_data(int idx, int start, int end, struct } } +static void calculate_sac(struct dive *dive, struct plot_info *pi) +{ + int i = 0, last = 0; + struct plot_data *last_entry = NULL; + + for (i = 0; i < pi->nr; i++) { + struct plot_data *entry = pi->entry+i; + if (!last_entry || last_entry->cylinderindex != entry->cylinderindex) { + last = i; + last_entry = entry; + entry->sac = get_local_sac(entry, pi->entry + i + 1, dive); + } else { + int j; + entry->sac = 0; + for (j = last; j < i; j++) + entry->sac += get_local_sac(pi->entry + j, pi->entry + j + 1, dive); + entry->sac /= (i - last); + if (entry->sec - last_entry->sec >= SAC_WINDOW) { + last++; + last_entry = pi->entry + last; + } + } + } +} + static void populate_secondary_sensor_data(struct divecomputer *dc, struct plot_info *pi) { /* We should try to see if it has interesting pressure data here */ @@ -1103,6 +1128,9 @@ struct plot_info *create_plot_info(struct dive *dive, struct divecomputer *dc, s /* .. calculate missing pressure entries */ populate_pressure_information(dive, dc, pi); + /* Calculate sac */ + calculate_sac(dive, pi); + /* Then, calculate partial pressures and deco information */ if (prefs.profile_calc_ceiling) calculate_deco_information(dive, dc, pi); @@ -28,6 +28,7 @@ struct plot_data { int stopdepth; int cns; int smoothed; + int sac; double po2, pn2, phe; double mod, ead, end, eadd; velocity_t velocity; @@ -63,8 +64,6 @@ int get_maxtime(struct plot_info *pi); * partial pressure graphs */ int get_maxdepth(struct plot_info *pi); -int get_local_sac(struct plot_data *entry1, struct plot_data *entry2, struct dive *dive); - void setup_pp_limits(struct graphics_context *gc); diff --git a/qt-ui/profilegraphics.cpp b/qt-ui/profilegraphics.cpp index e5b5cd50a..cba803de2 100644 --- a/qt-ui/profilegraphics.cpp +++ b/qt-ui/profilegraphics.cpp @@ -694,11 +694,9 @@ void ProfileGraphicsView::plot_single_temp_text(int sec, int mkelvin) void ProfileGraphicsView::plot_cylinder_pressure() { int i; - int last = -1, last_index = -1; + int last_index = -1; int lift_pen = FALSE; int first_plot = TRUE; - int sac = 0; - struct plot_data *last_entry = NULL; if (!get_cylinder_pressure_range(&gc)) return; @@ -711,29 +709,13 @@ void ProfileGraphicsView::plot_cylinder_pressure() mbar = GET_PRESSURE(entry); if (entry->cylinderindex != last_index) { lift_pen = TRUE; - last_entry = NULL; } if (!mbar) { lift_pen = TRUE; continue; } - if (!last_entry) { - last = i; - last_entry = entry; - sac = get_local_sac(entry, gc.pi.entry + i + 1, dive); - } else { - int j; - sac = 0; - for (j = last; j < i; j++) - sac += get_local_sac(gc.pi.entry + j, gc.pi.entry + j + 1, dive); - sac /= (i - last); - if (entry->sec - last_entry->sec >= SAC_WINDOW) { - last++; - last_entry = gc.pi.entry + last; - } - } - QColor c = get_sac_color(sac, dive->sac); + QColor c = get_sac_color(entry->sac, dive->sac); if (lift_pen) { if (!first_plot && entry->cylinderindex == last_index) { |