diff options
-rw-r--r-- | dive.c | 6 | ||||
-rw-r--r-- | dive.h | 3 | ||||
-rw-r--r-- | profile.c | 4 |
3 files changed, 11 insertions, 2 deletions
@@ -449,10 +449,10 @@ struct dive *fixup_dive(struct dive *dive) lastindex = index; lastpressure = pressure; - if (lastdepth) + if (lastdepth > SURFACE_THRESHOLD) end = time; - if (depth) { + if (depth > SURFACE_THRESHOLD) { if (start < 0) start = lasttime; if (depth > maxdepth) @@ -479,6 +479,8 @@ struct dive *fixup_dive(struct dive *dive) lastdepth = depth; lasttime = time; } + dive->start = start; + dive->end = end; /* if all the samples for a cylinder have pressure data that * is basically equidistant throw out the sample cylinder pressure * information but make sure we still have a valid start and end @@ -261,6 +261,7 @@ struct dive { tripflag_t tripflag; dive_trip_t *divetrip; int selected; + int start, end; timestamp_t when; char *location; char *notes; @@ -296,6 +297,8 @@ static inline int depth_to_mbar(int depth, struct dive *dive) return depth / 10.0 * specific_weight + surface_pressure + 0.5; } +#define SURFACE_THRESHOLD 750 /* somewhat arbitrary: only below 75cm is it really diving */ + /* this is a global spot for a temporary dive structure that we use to * be able to edit a dive without unintended side effects */ extern struct dive edit_dive; @@ -1704,6 +1704,10 @@ static struct plot_info *create_plot_info(struct dive *dive, int nr_samples, str int delay = 0; struct sample *sample = dive_sample+i; + if (sample->time.seconds < dive->start || sample->time.seconds > dive->end) { + pi_idx--; + continue; + } entry = pi->entry + i + pi_idx; while (ceil_ev && ceil_ev->time.seconds <= sample->time.seconds) { struct event *next_ceil_ev = get_next_event(ceil_ev->next, "ceiling"); |