Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Graphics.cpp
00001 00002 #include "mbed.h" 00003 #include "Graphics.h" 00004 00005 00006 Graphics::Graphics(uint16_t *pFrmBuf, uint16_t dispWidth, uint16_t dispHeight) 00007 { 00008 this->windowX = dispWidth; 00009 this->windowY = dispHeight; 00010 this->pFrmBuf = pFrmBuf; 00011 } 00012 00013 void Graphics::setFrameBuffer( uint16_t *pFrmBuf ) 00014 { 00015 this->pFrmBuf = pFrmBuf; 00016 } 00017 00018 int32_t Graphics::abs(int32_t v1) const 00019 { 00020 if (v1 > 0) 00021 return v1; 00022 00023 return -v1; 00024 } 00025 00026 /*********************************************************************** 00027 * 00028 * Function: swim_put_line_raw 00029 * 00030 * Purpose: Draw a line on the physical display 00031 * 00032 * Processing: 00033 * See function. 00034 * 00035 * Parameters: 00036 * win : Window identifier 00037 * x1 : Physical X position of X line start 00038 * y1 : Physical Y position of Y line start 00039 * x2 : Physical X position of X line end 00040 * y2 : Physical Y position of Y line end 00041 * 00042 * Outputs: None 00043 * 00044 * Returns: Nothing 00045 * 00046 * Notes: None 00047 * 00048 **********************************************************************/ 00049 void Graphics::put_line(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int16_t color) 00050 { 00051 int32_t e2, sx, sy, dx, dy, err; 00052 00053 /* calculate delta_x and delta_y */ 00054 dx = abs(x2 - x1); 00055 dy = abs(y2 - y1); 00056 00057 /* set the direction for the step for both x and y, and 00058 initialize the error */ 00059 if (x1 < x2) 00060 sx = 1; 00061 else 00062 sx = -1; 00063 00064 if (y1 < y2) 00065 sy = 1; 00066 else 00067 sy = -1; 00068 00069 err = dx - dy; 00070 00071 while (1) 00072 { 00073 if ((x1 >= 0) && (x1 < this->windowX) && 00074 (y1 >= 0) && (y1 < this->windowY)) 00075 this->pFrmBuf[x1 + (this->windowX*y1)] = color; 00076 00077 if ((x1 == x2) && (y1 == y2)) 00078 return; 00079 00080 e2 = 2 * err; 00081 if (e2 > -dy) 00082 { 00083 err -= dy; 00084 x1 += sx; 00085 } 00086 if (e2 < dx) 00087 { 00088 err += dx; 00089 y1 += sy; 00090 } 00091 } 00092 } 00093 00094 /*********************************************************************** 00095 * 00096 * Function: plot4points 00097 * 00098 * Purpose: 00099 * 00100 * Processing: 00101 * See function. 00102 * 00103 * Parameters: 00104 * win : Window identifier 00105 * cx : 00106 * cy : 00107 * x : 00108 * y : 00109 * Filled : 00110 * 00111 * Outputs: None 00112 * 00113 * Returns: Nothing 00114 * 00115 * Notes: None 00116 * 00117 **********************************************************************/ 00118 void Graphics::plot4points( int32_t cx, int32_t cy, int32_t x, int32_t y, int16_t color, int32_t Filled ) 00119 { 00120 int16_t x0, x1, y0, y1; 00121 00122 y0 = cy + y; 00123 y1 = cy - y; 00124 if( Filled ) 00125 { 00126 for( x0=cx - x; x0<=cx + x; x0++ ) 00127 { 00128 if ((x0>=0) && (x0<this->windowX) && (y0>=0) && (y0<this->windowY)) 00129 this->pFrmBuf[x0 + (this->windowX*y0)] = color; 00130 if ((x0>=0) && (x0<this->windowX) && (y1>=0) && (y1<this->windowY)) 00131 this->pFrmBuf[x0 + (this->windowX*y1)] = color; 00132 } 00133 } 00134 else 00135 { 00136 x0 = cx + x; 00137 x1 = cx - x; 00138 if ((x0>=0) && (x0<this->windowX) && (y0>=0) && (y0<this->windowY)) 00139 this->pFrmBuf[x0 + (this->windowX*y0)] = color; 00140 if ((x != 0) && 00141 (x1>=0) && (x1<this->windowX) && (y0>=0) && (y0<this->windowY)) 00142 this->pFrmBuf[x1 + (this->windowX*y0)] = color; 00143 if ((y != 0) && 00144 (x0>=0) && (x0<this->windowX) && (y1>=0) && (y1<this->windowY)) 00145 this->pFrmBuf[x0 + (this->windowX*y1)] = color; 00146 if ((x != 0 && y != 0) && 00147 (x1>=0) && (x1<this->windowX) && (y1>=0) && (y1<this->windowY)) 00148 this->pFrmBuf[x1 + (this->windowX*y1)] = color; 00149 } 00150 } 00151 00152 /*********************************************************************** 00153 * 00154 * Function: plot8points 00155 * 00156 * Purpose: 00157 * 00158 * Processing: 00159 * See function. 00160 * 00161 * Parameters: 00162 * win : Window identifier 00163 * cx : 00164 * cy : 00165 * x : 00166 * y : 00167 * Filled : 00168 * 00169 * Outputs: None 00170 * 00171 * Returns: Nothing 00172 * 00173 * Notes: None 00174 * 00175 **********************************************************************/ 00176 void Graphics::plot8points( int32_t cx, int32_t cy, int32_t x, int32_t y, int16_t color, int32_t Filled ) 00177 { 00178 plot4points( cx, cy, x, y, color, Filled ); 00179 if (x != y) 00180 plot4points( cx, cy, y, x, color, Filled ); 00181 } 00182 00183 /*********************************************************************** 00184 * 00185 * Function: swim_put_circle 00186 * 00187 * Purpose: 00188 * 00189 * Processing: 00190 * See function. 00191 * 00192 * Parameters: 00193 * win : Window identifier 00194 * cx : 00195 * cy : 00196 * radius : 00197 * Filled : 00198 * 00199 * Outputs: None 00200 * 00201 * Returns: Nothing 00202 * 00203 * Notes: None 00204 * 00205 **********************************************************************/ 00206 void Graphics::put_circle( int32_t cx, int32_t cy, int16_t color, int32_t radius, int32_t Filled ) 00207 { 00208 int32_t Error = -radius; 00209 int16_t x = radius; 00210 int16_t y = 0; 00211 00212 while( x >= y ) 00213 { 00214 plot8points( cx, cy, x, y, color, Filled ); 00215 00216 Error += y; 00217 ++y; 00218 Error += y; 00219 00220 if( Error >= 0 ) 00221 { 00222 --x; 00223 Error -= x; 00224 Error -= x; 00225 } 00226 } 00227 } 00228 00229 void Graphics::put_dot( int32_t cx, int32_t cy, int16_t color ) 00230 { 00231 int size = 1; 00232 for (int y1 = cy - size; y1 <= (cy + size); y1++) { 00233 for (int x1 = cx - size; x1 <= (cx + size); x1++) { 00234 if ((x1 >= 0) && (x1 < this->windowX) && (y1 >= 0) && (y1 < this->windowY)) { 00235 this->pFrmBuf[x1 + (this->windowX*y1)] = color; 00236 } 00237 } 00238 } 00239 } 00240 00241
Generated on Wed Jul 13 2022 20:04:53 by
