hadif azli / Mbed 2 deprecated TEST123

Dependencies:   mbed Blynk

Committer:
lixianyu
Date:
Mon Jun 13 02:21:11 2016 +0000
Revision:
1:0e75de2a5d21
Parent:
0:d8f4c441e032
u8glib???????????????????????????Adafruit_GFX????OLED????????bitmap??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 0:d8f4c441e032 1 /*
lixianyu 0:d8f4c441e032 2
lixianyu 0:d8f4c441e032 3 u8g_ellipse.c
lixianyu 0:d8f4c441e032 4
lixianyu 0:d8f4c441e032 5 Utility to draw empty and filled ellipses.
lixianyu 0:d8f4c441e032 6
lixianyu 0:d8f4c441e032 7 Universal 8bit Graphics Library
lixianyu 0:d8f4c441e032 8
lixianyu 0:d8f4c441e032 9 Copyright (c) 2011, bjthom@gmail.com
lixianyu 0:d8f4c441e032 10 All rights reserved.
lixianyu 0:d8f4c441e032 11
lixianyu 0:d8f4c441e032 12 Redistribution and use in source and binary forms, with or without modification,
lixianyu 0:d8f4c441e032 13 are permitted provided that the following conditions are met:
lixianyu 0:d8f4c441e032 14
lixianyu 0:d8f4c441e032 15 * Redistributions of source code must retain the above copyright notice, this list
lixianyu 0:d8f4c441e032 16 of conditions and the following disclaimer.
lixianyu 0:d8f4c441e032 17
lixianyu 0:d8f4c441e032 18 * Redistributions in binary form must reproduce the above copyright notice, this
lixianyu 0:d8f4c441e032 19 list of conditions and the following disclaimer in the documentation and/or other
lixianyu 0:d8f4c441e032 20 materials provided with the distribution.
lixianyu 0:d8f4c441e032 21
lixianyu 0:d8f4c441e032 22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
lixianyu 0:d8f4c441e032 23 CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
lixianyu 0:d8f4c441e032 24 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
lixianyu 0:d8f4c441e032 25 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
lixianyu 0:d8f4c441e032 26 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
lixianyu 0:d8f4c441e032 27 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
lixianyu 0:d8f4c441e032 28 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
lixianyu 0:d8f4c441e032 29 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
lixianyu 0:d8f4c441e032 30 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
lixianyu 0:d8f4c441e032 31 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
lixianyu 0:d8f4c441e032 32 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
lixianyu 0:d8f4c441e032 33 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
lixianyu 0:d8f4c441e032 34 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
lixianyu 0:d8f4c441e032 35
lixianyu 0:d8f4c441e032 36 Addition to the U8G Library as of 02/29/12
lixianyu 0:d8f4c441e032 37 Adapted from Bresenham's Algorithm and the following websites:
lixianyu 0:d8f4c441e032 38 http://free.pages.at/easyfilter/bresenham.html
lixianyu 0:d8f4c441e032 39 http://homepage.smc.edu/kennedy_john/belipse.pdf
lixianyu 0:d8f4c441e032 40
lixianyu 0:d8f4c441e032 41 */
lixianyu 0:d8f4c441e032 42
lixianyu 0:d8f4c441e032 43 #include "u8g.h"
lixianyu 0:d8f4c441e032 44
lixianyu 0:d8f4c441e032 45
lixianyu 0:d8f4c441e032 46 #ifdef WORK_IN_PROGRESS
lixianyu 0:d8f4c441e032 47
lixianyu 0:d8f4c441e032 48 void u8g_DrawEllipseRect(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t x1, u8g_uint_t y1)
lixianyu 0:d8f4c441e032 49 {
lixianyu 0:d8f4c441e032 50 int a = abs(x1 - x0);
lixianyu 0:d8f4c441e032 51 int b = abs(y1 - y0); //get diameters
lixianyu 0:d8f4c441e032 52 int b1 = b&1;
lixianyu 0:d8f4c441e032 53 long dx = 4*(1-a)*b*b;
lixianyu 0:d8f4c441e032 54 long dy = 4*(b1+1)*a*a;
lixianyu 0:d8f4c441e032 55 long err = dx+dy+b1*a*a;
lixianyu 0:d8f4c441e032 56 long e2;
lixianyu 0:d8f4c441e032 57
lixianyu 0:d8f4c441e032 58 if (x0 > x1) { x0 = x1; x1 += a; }
lixianyu 0:d8f4c441e032 59 if (y0 > y1) { y0 = y1; }
lixianyu 0:d8f4c441e032 60 y0 += (b+1)/2;
lixianyu 0:d8f4c441e032 61 y1 = y0-b1;
lixianyu 0:d8f4c441e032 62 a *= 8*a;
lixianyu 0:d8f4c441e032 63 b1 = 8*b*b;
lixianyu 0:d8f4c441e032 64
lixianyu 0:d8f4c441e032 65 do {
lixianyu 0:d8f4c441e032 66 u8g_DrawPixel(u8g, x1, y0);
lixianyu 0:d8f4c441e032 67 u8g_DrawPixel(u8g, x0, y0);
lixianyu 0:d8f4c441e032 68 u8g_DrawPixel(u8g, x0, y1);
lixianyu 0:d8f4c441e032 69 u8g_DrawPixel(u8g, x1, y1);
lixianyu 0:d8f4c441e032 70 e2 = 2*err;
lixianyu 0:d8f4c441e032 71 if (e2 >= dx) {
lixianyu 0:d8f4c441e032 72 x0++;
lixianyu 0:d8f4c441e032 73 x1--;
lixianyu 0:d8f4c441e032 74 err += dx += b1;
lixianyu 0:d8f4c441e032 75 }
lixianyu 0:d8f4c441e032 76 if (e2 <= dy) {
lixianyu 0:d8f4c441e032 77 y0++;
lixianyu 0:d8f4c441e032 78 y1--;
lixianyu 0:d8f4c441e032 79 err += dy += a;
lixianyu 0:d8f4c441e032 80 }
lixianyu 0:d8f4c441e032 81 } while (x0 <= x1);
lixianyu 0:d8f4c441e032 82
lixianyu 0:d8f4c441e032 83 while (y0-y1 < b) {
lixianyu 0:d8f4c441e032 84 u8g_DrawPixel(u8g, x0-1, y0);
lixianyu 0:d8f4c441e032 85 u8g_DrawPixel(u8g, x1+1, y0++);
lixianyu 0:d8f4c441e032 86 u8g_DrawPixel(u8g, x0-1, y1);
lixianyu 0:d8f4c441e032 87 u8g_DrawPixel(u8g, x1+1, y1--);
lixianyu 0:d8f4c441e032 88 }
lixianyu 0:d8f4c441e032 89 }
lixianyu 0:d8f4c441e032 90
lixianyu 0:d8f4c441e032 91 void u8g_DrawEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t xr, u8g_uint_t yr)
lixianyu 0:d8f4c441e032 92 {
lixianyu 0:d8f4c441e032 93 u8g_DrawPixel(u8g, x0, y0+yr);
lixianyu 0:d8f4c441e032 94 u8g_DrawPixel(u8g, x0, y0-yr);
lixianyu 0:d8f4c441e032 95 u8g_DrawPixel(u8g, x0+xr, y0);
lixianyu 0:d8f4c441e032 96 u8g_DrawPixel(u8g, x0-xr, y0);
lixianyu 0:d8f4c441e032 97 }
lixianyu 0:d8f4c441e032 98
lixianyu 0:d8f4c441e032 99 #endif
lixianyu 0:d8f4c441e032 100
lixianyu 0:d8f4c441e032 101 #if defined(U8G_16BIT)
lixianyu 0:d8f4c441e032 102 typedef int32_t u8g_long_t;
lixianyu 0:d8f4c441e032 103 #else
lixianyu 0:d8f4c441e032 104 typedef int16_t u8g_long_t;
lixianyu 0:d8f4c441e032 105 #endif
lixianyu 0:d8f4c441e032 106
lixianyu 0:d8f4c441e032 107
lixianyu 0:d8f4c441e032 108 /*
lixianyu 0:d8f4c441e032 109 Source:
lixianyu 0:d8f4c441e032 110 ftp://pc.fk0.name/pub/books/programming/bezier-ellipse.pdf
lixianyu 0:d8f4c441e032 111 Foley, Computer Graphics, p 90
lixianyu 0:d8f4c441e032 112 */
lixianyu 0:d8f4c441e032 113 static void u8g_draw_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
lixianyu 0:d8f4c441e032 114 static void u8g_draw_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
lixianyu 0:d8f4c441e032 115 {
lixianyu 0:d8f4c441e032 116 /* upper right */
lixianyu 0:d8f4c441e032 117 if ( option & U8G_DRAW_UPPER_RIGHT )
lixianyu 0:d8f4c441e032 118 {
lixianyu 0:d8f4c441e032 119 u8g_DrawPixel(u8g, x0 + x, y0 - y);
lixianyu 0:d8f4c441e032 120 }
lixianyu 0:d8f4c441e032 121
lixianyu 0:d8f4c441e032 122 /* upper left */
lixianyu 0:d8f4c441e032 123 if ( option & U8G_DRAW_UPPER_LEFT )
lixianyu 0:d8f4c441e032 124 {
lixianyu 0:d8f4c441e032 125 u8g_DrawPixel(u8g, x0 - x, y0 - y);
lixianyu 0:d8f4c441e032 126 }
lixianyu 0:d8f4c441e032 127
lixianyu 0:d8f4c441e032 128 /* lower right */
lixianyu 0:d8f4c441e032 129 if ( option & U8G_DRAW_LOWER_RIGHT )
lixianyu 0:d8f4c441e032 130 {
lixianyu 0:d8f4c441e032 131 u8g_DrawPixel(u8g, x0 + x, y0 + y);
lixianyu 0:d8f4c441e032 132 }
lixianyu 0:d8f4c441e032 133
lixianyu 0:d8f4c441e032 134 /* lower left */
lixianyu 0:d8f4c441e032 135 if ( option & U8G_DRAW_LOWER_LEFT )
lixianyu 0:d8f4c441e032 136 {
lixianyu 0:d8f4c441e032 137 u8g_DrawPixel(u8g, x0 - x, y0 + y);
lixianyu 0:d8f4c441e032 138 }
lixianyu 0:d8f4c441e032 139 }
lixianyu 0:d8f4c441e032 140
lixianyu 0:d8f4c441e032 141 void u8g_draw_ellipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
lixianyu 0:d8f4c441e032 142 {
lixianyu 0:d8f4c441e032 143 u8g_uint_t x, y;
lixianyu 0:d8f4c441e032 144 u8g_long_t xchg, ychg;
lixianyu 0:d8f4c441e032 145 u8g_long_t err;
lixianyu 0:d8f4c441e032 146 u8g_long_t rxrx2;
lixianyu 0:d8f4c441e032 147 u8g_long_t ryry2;
lixianyu 0:d8f4c441e032 148 u8g_long_t stopx, stopy;
lixianyu 0:d8f4c441e032 149
lixianyu 0:d8f4c441e032 150 rxrx2 = rx;
lixianyu 0:d8f4c441e032 151 rxrx2 *= rx;
lixianyu 0:d8f4c441e032 152 rxrx2 *= 2;
lixianyu 0:d8f4c441e032 153
lixianyu 0:d8f4c441e032 154 ryry2 = ry;
lixianyu 0:d8f4c441e032 155 ryry2 *= ry;
lixianyu 0:d8f4c441e032 156 ryry2 *= 2;
lixianyu 0:d8f4c441e032 157
lixianyu 0:d8f4c441e032 158 x = rx;
lixianyu 0:d8f4c441e032 159 y = 0;
lixianyu 0:d8f4c441e032 160
lixianyu 0:d8f4c441e032 161 xchg = 1;
lixianyu 0:d8f4c441e032 162 xchg -= rx;
lixianyu 0:d8f4c441e032 163 xchg -= rx;
lixianyu 0:d8f4c441e032 164 xchg *= ry;
lixianyu 0:d8f4c441e032 165 xchg *= ry;
lixianyu 0:d8f4c441e032 166
lixianyu 0:d8f4c441e032 167 ychg = rx;
lixianyu 0:d8f4c441e032 168 ychg *= rx;
lixianyu 0:d8f4c441e032 169
lixianyu 0:d8f4c441e032 170 err = 0;
lixianyu 0:d8f4c441e032 171
lixianyu 0:d8f4c441e032 172 stopx = ryry2;
lixianyu 0:d8f4c441e032 173 stopx *= rx;
lixianyu 0:d8f4c441e032 174 stopy = 0;
lixianyu 0:d8f4c441e032 175
lixianyu 0:d8f4c441e032 176 while( stopx >= stopy )
lixianyu 0:d8f4c441e032 177 {
lixianyu 0:d8f4c441e032 178 u8g_draw_ellipse_section(u8g, x, y, x0, y0, option);
lixianyu 0:d8f4c441e032 179 y++;
lixianyu 0:d8f4c441e032 180 stopy += rxrx2;
lixianyu 0:d8f4c441e032 181 err += ychg;
lixianyu 0:d8f4c441e032 182 ychg += rxrx2;
lixianyu 0:d8f4c441e032 183 if ( 2*err+xchg > 0 )
lixianyu 0:d8f4c441e032 184 {
lixianyu 0:d8f4c441e032 185 x--;
lixianyu 0:d8f4c441e032 186 stopx -= ryry2;
lixianyu 0:d8f4c441e032 187 err += xchg;
lixianyu 0:d8f4c441e032 188 xchg += ryry2;
lixianyu 0:d8f4c441e032 189 }
lixianyu 0:d8f4c441e032 190 }
lixianyu 0:d8f4c441e032 191
lixianyu 0:d8f4c441e032 192 x = 0;
lixianyu 0:d8f4c441e032 193 y = ry;
lixianyu 0:d8f4c441e032 194
lixianyu 0:d8f4c441e032 195 xchg = ry;
lixianyu 0:d8f4c441e032 196 xchg *= ry;
lixianyu 0:d8f4c441e032 197
lixianyu 0:d8f4c441e032 198 ychg = 1;
lixianyu 0:d8f4c441e032 199 ychg -= ry;
lixianyu 0:d8f4c441e032 200 ychg -= ry;
lixianyu 0:d8f4c441e032 201 ychg *= rx;
lixianyu 0:d8f4c441e032 202 ychg *= rx;
lixianyu 0:d8f4c441e032 203
lixianyu 0:d8f4c441e032 204 err = 0;
lixianyu 0:d8f4c441e032 205
lixianyu 0:d8f4c441e032 206 stopx = 0;
lixianyu 0:d8f4c441e032 207
lixianyu 0:d8f4c441e032 208 stopy = rxrx2;
lixianyu 0:d8f4c441e032 209 stopy *= ry;
lixianyu 0:d8f4c441e032 210
lixianyu 0:d8f4c441e032 211
lixianyu 0:d8f4c441e032 212 while( stopx <= stopy )
lixianyu 0:d8f4c441e032 213 {
lixianyu 0:d8f4c441e032 214 u8g_draw_ellipse_section(u8g, x, y, x0, y0, option);
lixianyu 0:d8f4c441e032 215 x++;
lixianyu 0:d8f4c441e032 216 stopx += ryry2;
lixianyu 0:d8f4c441e032 217 err += xchg;
lixianyu 0:d8f4c441e032 218 xchg += ryry2;
lixianyu 0:d8f4c441e032 219 if ( 2*err+ychg > 0 )
lixianyu 0:d8f4c441e032 220 {
lixianyu 0:d8f4c441e032 221 y--;
lixianyu 0:d8f4c441e032 222 stopy -= rxrx2;
lixianyu 0:d8f4c441e032 223 err += ychg;
lixianyu 0:d8f4c441e032 224 ychg += rxrx2;
lixianyu 0:d8f4c441e032 225 }
lixianyu 0:d8f4c441e032 226 }
lixianyu 0:d8f4c441e032 227
lixianyu 0:d8f4c441e032 228 }
lixianyu 0:d8f4c441e032 229
lixianyu 0:d8f4c441e032 230 void u8g_DrawEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
lixianyu 0:d8f4c441e032 231 {
lixianyu 0:d8f4c441e032 232 /* check for bounding box */
lixianyu 0:d8f4c441e032 233 {
lixianyu 0:d8f4c441e032 234 u8g_uint_t rxp, rxp2;
lixianyu 0:d8f4c441e032 235 u8g_uint_t ryp, ryp2;
lixianyu 0:d8f4c441e032 236
lixianyu 0:d8f4c441e032 237 rxp = rx;
lixianyu 0:d8f4c441e032 238 rxp++;
lixianyu 0:d8f4c441e032 239 rxp2 = rxp;
lixianyu 0:d8f4c441e032 240 rxp2 *= 2;
lixianyu 0:d8f4c441e032 241
lixianyu 0:d8f4c441e032 242 ryp = ry;
lixianyu 0:d8f4c441e032 243 ryp++;
lixianyu 0:d8f4c441e032 244 ryp2 = ryp;
lixianyu 0:d8f4c441e032 245 ryp2 *= 2;
lixianyu 0:d8f4c441e032 246
lixianyu 0:d8f4c441e032 247 if ( u8g_IsBBXIntersection(u8g, x0-rxp, y0-ryp, rxp2, ryp2) == 0)
lixianyu 0:d8f4c441e032 248 return;
lixianyu 0:d8f4c441e032 249 }
lixianyu 0:d8f4c441e032 250
lixianyu 0:d8f4c441e032 251 u8g_draw_ellipse(u8g, x0, y0, rx, ry, option);
lixianyu 0:d8f4c441e032 252 }
lixianyu 0:d8f4c441e032 253
lixianyu 0:d8f4c441e032 254 static void u8g_draw_filled_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
lixianyu 0:d8f4c441e032 255 static void u8g_draw_filled_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
lixianyu 0:d8f4c441e032 256 {
lixianyu 0:d8f4c441e032 257 /* upper right */
lixianyu 0:d8f4c441e032 258 if ( option & U8G_DRAW_UPPER_RIGHT )
lixianyu 0:d8f4c441e032 259 {
lixianyu 0:d8f4c441e032 260 u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
lixianyu 0:d8f4c441e032 261 }
lixianyu 0:d8f4c441e032 262
lixianyu 0:d8f4c441e032 263 /* upper left */
lixianyu 0:d8f4c441e032 264 if ( option & U8G_DRAW_UPPER_LEFT )
lixianyu 0:d8f4c441e032 265 {
lixianyu 0:d8f4c441e032 266 u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
lixianyu 0:d8f4c441e032 267 }
lixianyu 0:d8f4c441e032 268
lixianyu 0:d8f4c441e032 269 /* lower right */
lixianyu 0:d8f4c441e032 270 if ( option & U8G_DRAW_LOWER_RIGHT )
lixianyu 0:d8f4c441e032 271 {
lixianyu 0:d8f4c441e032 272 u8g_DrawVLine(u8g, x0+x, y0, y+1);
lixianyu 0:d8f4c441e032 273 }
lixianyu 0:d8f4c441e032 274
lixianyu 0:d8f4c441e032 275 /* lower left */
lixianyu 0:d8f4c441e032 276 if ( option & U8G_DRAW_LOWER_LEFT )
lixianyu 0:d8f4c441e032 277 {
lixianyu 0:d8f4c441e032 278 u8g_DrawVLine(u8g, x0-x, y0, y+1);
lixianyu 0:d8f4c441e032 279 }
lixianyu 0:d8f4c441e032 280 }
lixianyu 0:d8f4c441e032 281
lixianyu 0:d8f4c441e032 282 void u8g_draw_filled_ellipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
lixianyu 0:d8f4c441e032 283 {
lixianyu 0:d8f4c441e032 284 u8g_uint_t x, y;
lixianyu 0:d8f4c441e032 285 u8g_long_t xchg, ychg;
lixianyu 0:d8f4c441e032 286 u8g_long_t err;
lixianyu 0:d8f4c441e032 287 u8g_long_t rxrx2;
lixianyu 0:d8f4c441e032 288 u8g_long_t ryry2;
lixianyu 0:d8f4c441e032 289 u8g_long_t stopx, stopy;
lixianyu 0:d8f4c441e032 290
lixianyu 0:d8f4c441e032 291 rxrx2 = rx;
lixianyu 0:d8f4c441e032 292 rxrx2 *= rx;
lixianyu 0:d8f4c441e032 293 rxrx2 *= 2;
lixianyu 0:d8f4c441e032 294
lixianyu 0:d8f4c441e032 295 ryry2 = ry;
lixianyu 0:d8f4c441e032 296 ryry2 *= ry;
lixianyu 0:d8f4c441e032 297 ryry2 *= 2;
lixianyu 0:d8f4c441e032 298
lixianyu 0:d8f4c441e032 299 x = rx;
lixianyu 0:d8f4c441e032 300 y = 0;
lixianyu 0:d8f4c441e032 301
lixianyu 0:d8f4c441e032 302 xchg = 1;
lixianyu 0:d8f4c441e032 303 xchg -= rx;
lixianyu 0:d8f4c441e032 304 xchg -= rx;
lixianyu 0:d8f4c441e032 305 xchg *= ry;
lixianyu 0:d8f4c441e032 306 xchg *= ry;
lixianyu 0:d8f4c441e032 307
lixianyu 0:d8f4c441e032 308 ychg = rx;
lixianyu 0:d8f4c441e032 309 ychg *= rx;
lixianyu 0:d8f4c441e032 310
lixianyu 0:d8f4c441e032 311 err = 0;
lixianyu 0:d8f4c441e032 312
lixianyu 0:d8f4c441e032 313 stopx = ryry2;
lixianyu 0:d8f4c441e032 314 stopx *= rx;
lixianyu 0:d8f4c441e032 315 stopy = 0;
lixianyu 0:d8f4c441e032 316
lixianyu 0:d8f4c441e032 317 while( stopx >= stopy )
lixianyu 0:d8f4c441e032 318 {
lixianyu 0:d8f4c441e032 319 u8g_draw_filled_ellipse_section(u8g, x, y, x0, y0, option);
lixianyu 0:d8f4c441e032 320 y++;
lixianyu 0:d8f4c441e032 321 stopy += rxrx2;
lixianyu 0:d8f4c441e032 322 err += ychg;
lixianyu 0:d8f4c441e032 323 ychg += rxrx2;
lixianyu 0:d8f4c441e032 324 if ( 2*err+xchg > 0 )
lixianyu 0:d8f4c441e032 325 {
lixianyu 0:d8f4c441e032 326 x--;
lixianyu 0:d8f4c441e032 327 stopx -= ryry2;
lixianyu 0:d8f4c441e032 328 err += xchg;
lixianyu 0:d8f4c441e032 329 xchg += ryry2;
lixianyu 0:d8f4c441e032 330 }
lixianyu 0:d8f4c441e032 331 }
lixianyu 0:d8f4c441e032 332
lixianyu 0:d8f4c441e032 333 x = 0;
lixianyu 0:d8f4c441e032 334 y = ry;
lixianyu 0:d8f4c441e032 335
lixianyu 0:d8f4c441e032 336 xchg = ry;
lixianyu 0:d8f4c441e032 337 xchg *= ry;
lixianyu 0:d8f4c441e032 338
lixianyu 0:d8f4c441e032 339 ychg = 1;
lixianyu 0:d8f4c441e032 340 ychg -= ry;
lixianyu 0:d8f4c441e032 341 ychg -= ry;
lixianyu 0:d8f4c441e032 342 ychg *= rx;
lixianyu 0:d8f4c441e032 343 ychg *= rx;
lixianyu 0:d8f4c441e032 344
lixianyu 0:d8f4c441e032 345 err = 0;
lixianyu 0:d8f4c441e032 346
lixianyu 0:d8f4c441e032 347 stopx = 0;
lixianyu 0:d8f4c441e032 348
lixianyu 0:d8f4c441e032 349 stopy = rxrx2;
lixianyu 0:d8f4c441e032 350 stopy *= ry;
lixianyu 0:d8f4c441e032 351
lixianyu 0:d8f4c441e032 352
lixianyu 0:d8f4c441e032 353 while( stopx <= stopy )
lixianyu 0:d8f4c441e032 354 {
lixianyu 0:d8f4c441e032 355 u8g_draw_filled_ellipse_section(u8g, x, y, x0, y0, option);
lixianyu 0:d8f4c441e032 356 x++;
lixianyu 0:d8f4c441e032 357 stopx += ryry2;
lixianyu 0:d8f4c441e032 358 err += xchg;
lixianyu 0:d8f4c441e032 359 xchg += ryry2;
lixianyu 0:d8f4c441e032 360 if ( 2*err+ychg > 0 )
lixianyu 0:d8f4c441e032 361 {
lixianyu 0:d8f4c441e032 362 y--;
lixianyu 0:d8f4c441e032 363 stopy -= rxrx2;
lixianyu 0:d8f4c441e032 364 err += ychg;
lixianyu 0:d8f4c441e032 365 ychg += rxrx2;
lixianyu 0:d8f4c441e032 366 }
lixianyu 0:d8f4c441e032 367 }
lixianyu 0:d8f4c441e032 368
lixianyu 0:d8f4c441e032 369 }
lixianyu 0:d8f4c441e032 370
lixianyu 0:d8f4c441e032 371 void u8g_DrawFilledEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
lixianyu 0:d8f4c441e032 372 {
lixianyu 0:d8f4c441e032 373 /* check for bounding box */
lixianyu 0:d8f4c441e032 374 {
lixianyu 0:d8f4c441e032 375 u8g_uint_t rxp, rxp2;
lixianyu 0:d8f4c441e032 376 u8g_uint_t ryp, ryp2;
lixianyu 0:d8f4c441e032 377
lixianyu 0:d8f4c441e032 378 rxp = rx;
lixianyu 0:d8f4c441e032 379 rxp++;
lixianyu 0:d8f4c441e032 380 rxp2 = rxp;
lixianyu 0:d8f4c441e032 381 rxp2 *= 2;
lixianyu 0:d8f4c441e032 382
lixianyu 0:d8f4c441e032 383 ryp = ry;
lixianyu 0:d8f4c441e032 384 ryp++;
lixianyu 0:d8f4c441e032 385 ryp2 = ryp;
lixianyu 0:d8f4c441e032 386 ryp2 *= 2;
lixianyu 0:d8f4c441e032 387
lixianyu 0:d8f4c441e032 388 if ( u8g_IsBBXIntersection(u8g, x0-rxp, y0-ryp, rxp2, ryp2) == 0)
lixianyu 0:d8f4c441e032 389 return;
lixianyu 0:d8f4c441e032 390 }
lixianyu 0:d8f4c441e032 391
lixianyu 0:d8f4c441e032 392 u8g_draw_filled_ellipse(u8g, x0, y0, rx, ry, option);
lixianyu 0:d8f4c441e032 393 }
lixianyu 0:d8f4c441e032 394