/** * @brief Draws a full poly-line (between many points). * @param Points: Pointer to the points array * @param PointCount: Number of points * @retval None */ void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) { int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; IMAGE_LEFT = IMAGE_RIGHT = Points->X; IMAGE_TOP= IMAGE_BOTTOM = Points->Y; for(counter = 1; counter < PointCount; counter++) { pixelX = POLY_X(counter); if(pixelX < IMAGE_LEFT) { IMAGE_LEFT = pixelX; } if(pixelX > IMAGE_RIGHT) { IMAGE_RIGHT = pixelX; } pixelY = POLY_Y(counter); if(pixelY < IMAGE_TOP) { IMAGE_TOP = pixelY; } if(pixelY > IMAGE_BOTTOM) { IMAGE_BOTTOM = pixelY; } } if(PointCount < 2) { return; } X_center = (IMAGE_LEFT + IMAGE_RIGHT)/2; Y_center = (IMAGE_BOTTOM + IMAGE_TOP)/2; X_first = Points->X; Y_first = Points->Y; while(--PointCount) { X = Points->X; Y = Points->Y; Points++; X2 = Points->X; Y2 = Points->Y; FillTriangle(X, X2, X_center, Y, Y2, Y_center); FillTriangle(X, X_center, X2, Y, Y_center, Y2); FillTriangle(X_center, X2, X, Y_center, Y2, Y); } FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); }
/** * @brief Displays a full poly-line (between many points). * @param Points: pointer to the points array * @param PointCount: Number of points */ void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) { int16_t x = 0, y = 0, x2 = 0, y2 = 0, xcenter = 0, ycenter = 0, xfirst = 0, yfirst = 0, pixelx = 0, pixely = 0, counter = 0; uint16_t imageleft = 0, imageright = 0, imagetop = 0, imagebottom = 0; imageleft = imageright = Points->X; imagetop= imagebottom = Points->Y; for(counter = 1; counter < PointCount; counter++) { pixelx = POLY_X(counter); if(pixelx < imageleft) { imageleft = pixelx; } if(pixelx > imageright) { imageright = pixelx; } pixely = POLY_Y(counter); if(pixely < imagetop) { imagetop = pixely; } if(pixely > imagebottom) { imagebottom = pixely; } } if(PointCount < 2) { return; } xcenter = (imageleft + imageright)/2; ycenter = (imagebottom + imagetop)/2; xfirst = Points->X; yfirst = Points->Y; while(--PointCount) { x = Points->X; y = Points->Y; Points++; x2 = Points->X; y2 = Points->Y; BSP_LCD_FillTriangle(x, x2, xcenter, y, y2, ycenter); BSP_LCD_FillTriangle(x, xcenter, x2, y, ycenter, y2); BSP_LCD_FillTriangle(xcenter, x2, x, ycenter, y2, y); } BSP_LCD_FillTriangle(xfirst, x2, xcenter, yfirst, y2, ycenter); BSP_LCD_FillTriangle(xfirst, xcenter, x2, yfirst, ycenter, y2); BSP_LCD_FillTriangle(xcenter, x2, xfirst, ycenter, y2, yfirst); }
/** * @brief Draws a full poly-line (between many points). * @param Points: Pointer to the points array * @param PointCount: Number of points * @retval None */ void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) { int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; uint16_t image_left = 0, image_right = 0, image_top = 0, image_bottom = 0; image_left = image_right = Points->X; image_top= image_bottom = Points->Y; for(counter = 1; counter < PointCount; counter++) { pixelX = POLY_X(counter); if(pixelX < image_left) { image_left = pixelX; } if(pixelX > image_right) { image_right = pixelX; } pixelY = POLY_Y(counter); if(pixelY < image_top) { image_top = pixelY; } if(pixelY > image_bottom) { image_bottom = pixelY; } } if(PointCount < 2) { return; } X_center = (image_left + image_right)/2; Y_center = (image_bottom + image_top)/2; X_first = Points->X; Y_first = Points->Y; while(--PointCount) { X = Points->X; Y = Points->Y; Points++; X2 = Points->X; Y2 = Points->Y; FillTriangle(X, X2, X_center, Y, Y2, Y_center); FillTriangle(X, X_center, X2, Y, Y_center, Y2); FillTriangle(X_center, X2, X, Y_center, Y2, Y); } FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); }