From fb6eedfb3260be8a14a6f83d5bfa29e4fb6f68a5 Mon Sep 17 00:00:00 2001 From: Omar Ali Hassan <36759605+OmarAli3@users.noreply.github.com> Date: Tue, 17 Mar 2020 18:10:42 +0200 Subject: [PATCH 1/3] Add implementation for ellipse function --- keywords.txt | 1 + src/ArduinoGraphics.cpp | 17 +++++++++++++++++ src/ArduinoGraphics.h | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/keywords.txt b/keywords.txt index 5c7d60b..5fb1096 100644 --- a/keywords.txt +++ b/keywords.txt @@ -33,6 +33,7 @@ line KEYWORD2 point KEYWORD2 quad KEYWORD2 rect KEYWORD2 +ellipse KEYWORD2 text KEYWORD2 textFont KEYWORD2 diff --git a/src/ArduinoGraphics.cpp b/src/ArduinoGraphics.cpp index bedd1a7..32bbed8 100644 --- a/src/ArduinoGraphics.cpp +++ b/src/ArduinoGraphics.cpp @@ -124,6 +124,23 @@ void ArduinoGraphics::noStroke() _stroke = false; } +void ArduinoGraphics::ellipse(int x, int y, int width, int height) +{ + if (!_stroke) { + 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); + set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); + } +} + 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..1c39add 100644 --- a/src/ArduinoGraphics.h +++ b/src/ArduinoGraphics.h @@ -58,7 +58,7 @@ 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 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); From faf2968d894ce1ed52bfa2fb07b294e8478ca305 Mon Sep 17 00:00:00 2001 From: Omar Ali Hassan <36759605+OmarAli3@users.noreply.github.com> Date: Tue, 17 Mar 2020 18:53:27 +0200 Subject: [PATCH 2/3] Add implementation for circle function --- keywords.txt | 3 ++- src/ArduinoGraphics.cpp | 32 ++++++++++++++++++++++++++++++-- src/ArduinoGraphics.h | 1 + 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/keywords.txt b/keywords.txt index 5fb1096..49df5f7 100644 --- a/keywords.txt +++ b/keywords.txt @@ -29,11 +29,12 @@ noFill KEYWORD2 stroke KEYWORD2 noStroke KEYWORD2 +ellipse KEYWORD2 +circle KEYWORD2 line KEYWORD2 point KEYWORD2 quad KEYWORD2 rect KEYWORD2 -ellipse KEYWORD2 text KEYWORD2 textFont KEYWORD2 diff --git a/src/ArduinoGraphics.cpp b/src/ArduinoGraphics.cpp index 32bbed8..b4c04ac 100644 --- a/src/ArduinoGraphics.cpp +++ b/src/ArduinoGraphics.cpp @@ -126,7 +126,7 @@ void ArduinoGraphics::noStroke() void ArduinoGraphics::ellipse(int x, int y, int width, int height) { - if (!_stroke) { + if (!_stroke && !_fill) { return; } @@ -137,7 +137,35 @@ void ArduinoGraphics::ellipse(int x, int y, int width, int height) theta = angle * 3.14 / 180; int xi = r1 * cos(theta); int yi = r2 * sin(theta); - set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); + if (_stroke) { + // stroke + set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); + } else 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); + } else if (_fill) { + // fill + set(x + xi, y - yi, _fillR, _fillG, _fillB); + } } } diff --git a/src/ArduinoGraphics.h b/src/ArduinoGraphics.h index 1c39add..745f5ec 100644 --- a/src/ArduinoGraphics.h +++ b/src/ArduinoGraphics.h @@ -59,6 +59,7 @@ class ArduinoGraphics : public Print { //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 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); From fcb7e2fc4594769716434cdbbb697dabda1e18a1 Mon Sep 17 00:00:00 2001 From: Omar Ali Hassan <36759605+OmarAli3@users.noreply.github.com> Date: Sun, 22 Mar 2020 17:35:11 +0200 Subject: [PATCH 3/3] fix fill and indentation --- src/ArduinoGraphics.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/ArduinoGraphics.cpp b/src/ArduinoGraphics.cpp index b4c04ac..ad2e2b9 100644 --- a/src/ArduinoGraphics.cpp +++ b/src/ArduinoGraphics.cpp @@ -138,12 +138,13 @@ void ArduinoGraphics::ellipse(int x, int y, int width, int height) int xi = r1 * cos(theta); int yi = r2 * sin(theta); if (_stroke) { - // stroke - set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); - } else if (_fill) { - // fill - set(x + xi, y - yi, _fillR, _fillG, _fillB); - } + // stroke + set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); + } + if (_fill) { + // fill + set(x + xi, y - yi, _fillR, _fillG, _fillB); + } } } @@ -160,12 +161,13 @@ void ArduinoGraphics::circle(int x, int y, int radius) int xi = radius * cos(theta); int yi = radius * sin(theta); if (_stroke) { - // stroke - set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); - } else if (_fill) { - // fill - set(x + xi, y - yi, _fillR, _fillG, _fillB); - } + // stroke + set(x + xi, y - yi, _strokeR, _strokeG, _strokeB); + } + if (_fill) { + // fill + set(x + xi, y - yi, _fillR, _fillG, _fillB); + } } }