From 707ade1f2ffbfd4671441da87caafdfbc99ce965 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 24 Oct 2012 22:21:49 +0200 Subject: [PATCH] graph - added boundary checks --- src/graph.c | 55 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/src/graph.c b/src/graph.c index c01b66e7..8a270251 100644 --- a/src/graph.c +++ b/src/graph.c @@ -54,11 +54,6 @@ void graphDrawSystem(Graph *g) { g->y1 = g->origin_y - abs(g->ymax); /* X - Axis */ - gdispDrawLine(g->x0, g->origin_y, g->x1, g->origin_y, g->axis_color); - if(g->arrows) { - gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y+5, g->axis_color); - gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y-5, g->axis_color); - } if(g->full_grid) { for(i = 1; i <= ((g->origin_y - g->y1) / g->grid_size); i++) { _horizontalDotLine(g->x0, g->origin_y - g->grid_size * i, g->x1, g->dot_space, g->grid_color); @@ -67,14 +62,13 @@ void graphDrawSystem(Graph *g) { _horizontalDotLine(g->x0, g->origin_y + g->grid_size * i, g->x1, g->dot_space, g->grid_color); } } - + gdispDrawLine(g->x0, g->origin_y, g->x1, g->origin_y, g->axis_color); + if(g->arrows) { + gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y+5, g->axis_color); + gdispDrawLine(g->x1, g->origin_y, g->x1-5, g->origin_y-5, g->axis_color); + } /* Y - Axis */ - gdispDrawLine(g->origin_x, g->y0, g->origin_x, g->y1, g->axis_color); - if(g->arrows) { - gdispDrawLine(g->origin_x, g->y1, g->origin_x-5, g->y1+5, g->axis_color); - gdispDrawLine(g->origin_x, g->y1, g->origin_x+5, g->y1+5, g->axis_color); - } if(g->full_grid) { for(i = 1; i <= ((g->origin_x - g->x0) / g->grid_size); i++) { _verticalDotLine(g->origin_x - g->grid_size * i, g->y1, g->y0, g->dot_space, g->grid_color); @@ -83,9 +77,30 @@ void graphDrawSystem(Graph *g) { _verticalDotLine(g->origin_x + g->grid_size * i, g->y1, g->y0, g->dot_space, g->grid_color); } } + gdispDrawLine(g->origin_x, g->y0, g->origin_x, g->y1, g->axis_color); + if(g->arrows) { + gdispDrawLine(g->origin_x, g->y1, g->origin_x-5, g->y1+5, g->axis_color); + gdispDrawLine(g->origin_x, g->y1, g->origin_x+5, g->y1+5, g->axis_color); + } +} + +bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) { + if(g->origin_x + x > g->x1) + return 1; + if(g->origin_x + x < g->x0) + return 1; + if(g->origin_y + y < g->y1) + return 1; + if(g->origin_y + y > g->y0) + return 1; + + return 0; } void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color) { + if(_boundaryCheck(g, x, y)) + return; + if(radius == 0) gdispDrawPixel(g->origin_x + x, g->origin_y + y, color); else @@ -96,6 +111,9 @@ void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t i; for(i = 0; i < entries; i++) { + if(_boundaryCheck(g, coord[i][0], coord[i][1])) + continue; + if(radius == 0) gdispDrawPixel(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], color); else @@ -106,11 +124,22 @@ void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t lineColor, uint16_t dotColor) { uint16_t i; - for(i = 0; i < entries; ++i) + /* draw lines */ + for(i = 0; i < entries; ++i) { + if(_boundaryCheck(g, coord[i][0], coord[i][1])) + continue; + gdispDrawLine(coord[i-1][0] + g->origin_x, g->origin_y - coord[i-1][1], coord[i][0] + g->origin_x, g->origin_y - coord[i][1], lineColor); - for(i = 0; i < entries; ++i) + } + + /* draw dots */ + for(i = 0; i < entries; ++i) { + if(_boundaryCheck(g, coord[i][0], coord[i][1])) + continue; + if(radius != 0) lcdFillCircle(coord[i][0] + g->origin_x, g->origin_y - coord[i][1], radius, dotColor); + } } #endif /* GFX_USE_GRAPH */