diff --git a/keywords.txt b/keywords.txt index 5c7d60b..49df5f7 100644 --- a/keywords.txt +++ b/keywords.txt @@ -29,6 +29,8 @@ noFill KEYWORD2 stroke KEYWORD2 noStroke KEYWORD2 +ellipse KEYWORD2 +circle KEYWORD2 line KEYWORD2 point KEYWORD2 quad KEYWORD2 diff --git a/src/ArduinoGraphics.cpp b/src/ArduinoGraphics.cpp index bedd1a7..ad2e2b9 100644 --- a/src/ArduinoGraphics.cpp +++ b/src/ArduinoGraphics.cpp @@ -124,6 +124,53 @@ void ArduinoGraphics::noStroke() _stroke = false; } +void ArduinoGraphics::ellipse(int x, int y, int width, int height) +{ + if (!_stroke && !_fill) { + return; + } + + float theta; + int r1 = width / 2; + int r2 = height / 2; + for (int angle = 0; angle < 360; angle += 1) { + theta = angle * 3.14 / 180; + int xi = r1 * cos(theta); + int yi = r2 * sin(theta); + if (_stroke) { + // stroke + set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); + } + if (_fill) { + // fill + set(x + xi, y - yi, _fillR, _fillG, _fillB); + } + } +} + +void ArduinoGraphics::circle(int x, int y, int radius) +{ + //ellipse(x, y, 2 * radius, 2 * radius); + if (!_stroke && !_fill) { + return; + } + + float theta; + for (int angle = 0; angle < 360; angle += 1) { + theta = angle * 3.14 / 180; + int xi = radius * cos(theta); + int yi = radius * sin(theta); + if (_stroke) { + // stroke + set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); + } + if (_fill) { + // fill + set(x + xi, y - yi, _fillR, _fillG, _fillB); + } + } +} + void ArduinoGraphics::line(int x1, int y1, int x2, int y2) { if (!_stroke) { diff --git a/src/ArduinoGraphics.h b/src/ArduinoGraphics.h index f5468b0..745f5ec 100644 --- a/src/ArduinoGraphics.h +++ b/src/ArduinoGraphics.h @@ -58,7 +58,8 @@ class ArduinoGraphics : public Print { void noStroke(); //virtual void arc(int x, int y, int width, int height, int start, int stop); - //virtual void ellipse(int x, int y, int width, int height); + virtual void ellipse(int x, int y, int width, int height); + virtual void circle(int x, int y, int radius); virtual void line(int x1, int y1, int x2, int y2); virtual void point(int x, int y); //virtual void quad(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);