summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Anton Lundin <glance@acc.umu.se>2013-10-14 23:48:43 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-10-17 14:54:11 -0700
commit437246d3ed280e2275fddc125f2f14005cc11dab (patch)
tree221b4afa6334acc31af1a1cafd7e170687c0d3ef
parent0bdf11b09406672853473132929fed1de1bcd492 (diff)
downloadsubsurface-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.c30
-rw-r--r--profile.h3
-rw-r--r--qt-ui/profilegraphics.cpp22
3 files changed, 32 insertions, 23 deletions
diff --git a/profile.c b/profile.c
index 7f03db518..80b0dbc97 100644
--- a/profile.c
+++ b/profile.c
@@ -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);
diff --git a/profile.h b/profile.h
index 2329b2150..beb973ba8 100644
--- a/profile.h
+++ b/profile.h
@@ -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) {