X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=profile.c;h=247a9c487cd9af314177c1c7a1ec2e804e75c3cf;hb=0f139718697035fa8e1b26f908403ad27bb36554;hp=df1b22b30caeedad3cd81220ed4d6529a00d277d;hpb=2d26dbc9f7d6affc50de2e1013de4589034e55e0;p=ext%2Fsubsurface.git diff --git a/profile.c b/profile.c index df1b22b..247a9c4 100644 --- a/profile.c +++ b/profile.c @@ -669,10 +669,7 @@ static void plot_cylinder_pressure(struct graphics_context *gc, struct plot_info if (!last_entry) { last = i; last_entry = entry; - if (first_plot) { - /* don't start with a sac of 0, so just calculate the first one */ - sac = GET_LOCAL_SAC(entry, pi->entry + i + 1, dive); - } + sac = GET_LOCAL_SAC(entry, pi->entry + i + 1, dive); } else { int j; sac = 0; @@ -717,7 +714,7 @@ static void plot_pressure_value(struct graphics_context *gc, int mbar, int sec, plot_text(gc, &tro, sec, mbar, "%d %s", pressure, unit); } -static void plot_cylinder_pressure_text(struct graphics_context *gc, struct plot_info *pi, struct dive *dive) +static void plot_cylinder_pressure_text(struct graphics_context *gc, struct plot_info *pi) { int i; int mbar, cyl; @@ -763,10 +760,7 @@ static void plot_cylinder_pressure_text(struct graphics_context *gc, struct plot for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { if (last_time[cyl]) { - if (dive->cylinder[cyl].end.mbar) - plot_pressure_value(gc, dive->cylinder[cyl].end.mbar, last_time[cyl], CENTER, TOP); - else - plot_pressure_value(gc, last_pressure[cyl], last_time[cyl], CENTER, TOP); + plot_pressure_value(gc, last_pressure[cyl], last_time[cyl], CENTER, TOP); } } } @@ -952,6 +946,21 @@ static void list_free(pr_track_t *list) free(list); } +static void dump_pr_track(pr_track_t **track_pr) +{ + int cyl; + pr_track_t *list; + + for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { + list = track_pr[cyl]; + while (list) { + printf("cyl%d: start %d end %d t_start %d t_end %d pt %6.3f\n", cyl, + list->start, list->end, list->t_start, list->t_end, list->pressure_time); + list = list->next; + } + } +} + static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, pr_track_t **track_pr) { @@ -962,6 +971,10 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, struct plot_data *entry; int cur_pr[MAX_CYLINDERS]; + if (0) { + /* another great debugging tool */ + dump_pr_track(track_pr); + } for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { cur_pr[cyl] = track_pr[cyl]->start; } @@ -1007,7 +1020,7 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, double cur_pt = (entry->sec - (entry-1)->sec) * (1 + (entry->depth + (entry-1)->depth) / 20000.0); INTERPOLATED_PRESSURE(entry) = - cur_pr[entry->cylinderindex] + cur_pt * magic; + cur_pr[entry->cylinderindex] + cur_pt * magic + 0.5; cur_pr[entry->cylinderindex] = INTERPOLATED_PRESSURE(entry); } else INTERPOLATED_PRESSURE(entry) = cur_pr[entry->cylinderindex]; @@ -1144,8 +1157,13 @@ static struct plot_info *create_plot_info(struct dive *dive, int nr_samples, str while (ev && ev->time.seconds < sample->time.seconds) { /* insert two fake plot info structures for the end of * the old tank and the start of the new tank */ - entry->sec = ev->time.seconds; - (entry+1)->sec = ev->time.seconds + 1; + if (ev->time.seconds == sample->time.seconds - 1) { + entry->sec = ev->time.seconds - 1; + (entry+1)->sec = ev->time.seconds; + } else { + entry->sec = ev->time.seconds; + (entry+1)->sec = ev->time.seconds + 1; + } /* we need a fake depth - let's interpolate */ if (i) { entry->depth = sample->depth.mm - @@ -1325,7 +1343,7 @@ void plot(struct graphics_context *gc, cairo_rectangle_int_t *drawing_area, stru /* Text on top of all graphs.. */ plot_temperature_text(gc, pi); plot_depth_text(gc, pi); - plot_cylinder_pressure_text(gc, pi, dive); + plot_cylinder_pressure_text(gc, pi); /* Bounding box last */ gc->leftx = 0; gc->rightx = 1.0;