static int draw_boundaries(void) { if (Rast_raster_cmp(bl, br, map_type) != 0) draw_bot(); if (Rast_raster_cmp(tr, br, map_type) != 0) draw_rite(); return 0; } /* draw_boundaries */
/************************************************************************ getpoint-- finds crossing point using linear interpolation, converts from row-column to x-y space, and adds point to current line. ************************************************************************/ static void getpoint(struct cell *curr, double level, struct Cell_head Cell, struct line_pnts *Points) { double x, y; double ratio; int p1, p2; p1 = curr->edge; p2 = (curr->edge + 1) % 4; if (Rast_raster_cmp(&curr->z[p1], &curr->z[p2], DCELL_TYPE) == 0) ratio = 1; else if (Rast_is_d_null_value(&curr->z[p1])) ratio = 1 / 2; else if (Rast_is_d_null_value(&curr->z[p2])) ratio = 1 / 2; else ratio = (level - curr->z[p1]) / (curr->z[p2] - curr->z[p1]); switch (curr->edge) { case 0: y = curr->r; x = curr->c + ratio; break; case 1: y = curr->r + ratio; x = curr->c + 1; break; case 2: y = curr->r + 1; x = curr->c + 1 - ratio; break; case 3: y = curr->r + 1 - ratio; x = curr->c; break; default: G_fatal_error(_("Edge number out of range")); } /* convert r/c values to x/y values */ y = Cell.north - (y + .5) * Cell.ns_res; x = Cell.west + (x + .5) * Cell.ew_res; Vect_append_point(Points, x, y, level); }