From e88ad4166548d774e96e7a1322c98f64ba08f2f8 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 14 May 2014 00:37:27 +0100 Subject: [PATCH] Initial code for a Triangle class --- dgl/Geometry.hpp | 49 ++++++++++++++ dgl/src/Geometry.cpp | 151 +++++++++++++++++++++++++++---------------- 2 files changed, 146 insertions(+), 54 deletions(-) diff --git a/dgl/Geometry.hpp b/dgl/Geometry.hpp index 6ad966e8..9ba38e58 100644 --- a/dgl/Geometry.hpp +++ b/dgl/Geometry.hpp @@ -25,6 +25,7 @@ START_NAMESPACE_DGL // Forward class names template class Line; +template class Triangle; template class Rectangle; // ----------------------------------------------------------------------- @@ -98,6 +99,7 @@ public: private: T fX, fY; template friend class Line; + template friend class Triangle; template friend class Rectangle; }; @@ -306,6 +308,53 @@ private: Point fPosStart, fPosEnd; }; +// ----------------------------------------------------------------------- +// Triangle + +template +class Triangle +{ +public: + /** + Constructor for null triangle. + */ + Triangle() noexcept; + + /** + Constructor using custom X and Y values. + */ + Triangle(const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, const T& y3) noexcept; + + /** + Constructor using custom position values. + */ + Triangle(const Point& pos1, const Point& pos2, const Point& pos3) noexcept; + + /** + Constructor using another Triangle class values. + */ + Triangle(const Triangle& tri) noexcept; + + /** + Draw this triangle using the current OpenGL state. + */ + void draw(); + + /** + Draw lines (outline of this triangle) using the current OpenGL state. + */ + void drawOutline(); + + Triangle& operator=(const Triangle& tri) noexcept; + bool operator==(const Triangle& tri) const noexcept; + bool operator!=(const Triangle& tri) const noexcept; + +private: + Point fPos1, fPos2, fPos3; + + void _draw(const bool isOutline); +}; + // ----------------------------------------------------------------------- // Rectangle diff --git a/dgl/src/Geometry.cpp b/dgl/src/Geometry.cpp index 600685ac..69e16730 100644 --- a/dgl/src/Geometry.cpp +++ b/dgl/src/Geometry.cpp @@ -24,23 +24,17 @@ START_NAMESPACE_DGL template Point::Point() noexcept : fX(0), - fY(0) -{ -} + fY(0) {} template Point::Point(const T& x, const T& y) noexcept : fX(x), - fY(y) -{ -} + fY(y) {} template Point::Point(const Point& pos) noexcept : fX(pos.fX), - fY(pos.fY) -{ -} + fY(pos.fY) {} template const T& Point::getX() const noexcept @@ -136,23 +130,17 @@ bool Point::operator!=(const Point& pos) const noexcept template Size::Size() noexcept : fWidth(0), - fHeight(0) -{ -} + fHeight(0) {} template Size::Size(const T& width, const T& height) noexcept : fWidth(width), - fHeight(height) -{ -} + fHeight(height) {} template Size::Size(const Size& size) noexcept : fWidth(size.fWidth), - fHeight(size.fHeight) -{ -} + fHeight(size.fHeight) {} template const T& Size::getWidth() const noexcept @@ -264,44 +252,32 @@ bool Size::operator!=(const Size& size) const noexcept template Line::Line() noexcept : fPosStart(0, 0), - fPosEnd(0, 0) -{ -} + fPosEnd(0, 0) {} template Line::Line(const T& startX, const T& startY, const T& endX, const T& endY) noexcept : fPosStart(startX, startY), - fPosEnd(endX, endY) -{ -} + fPosEnd(endX, endY) {} template Line::Line(const T& startX, const T& startY, const Point& endPos) noexcept : fPosStart(startX, startY), - fPosEnd(endPos) -{ -} + fPosEnd(endPos) {} template Line::Line(const Point& startPos, const T& endX, const T& endY) noexcept : fPosStart(startPos), - fPosEnd(endX, endY) -{ -} + fPosEnd(endX, endY) {} template Line::Line(const Point& startPos, const Point& endPos) noexcept : fPosStart(startPos), - fPosEnd(endPos) -{ -} + fPosEnd(endPos) {} template Line::Line(const Line& line) noexcept : fPosStart(line.fPosStart), - fPosEnd(line.fPosEnd) -{ -} + fPosEnd(line.fPosEnd) {} template const T& Line::getStartX() const noexcept @@ -436,50 +412,112 @@ bool Line::operator!=(const Line& line) const noexcept return !operator==(line); } +// ----------------------------------------------------------------------- +// Triangle + +template +Triangle::Triangle() noexcept + : fPos1(0, 0), + fPos2(0, 0), + fPos3(0, 0) {} + +template +Triangle::Triangle(const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, const T& y3) noexcept + : fPos1(x1, y1), + fPos2(x2, y2), + fPos3(x3, y3) {} + +template +Triangle::Triangle(const Point& pos1, const Point& pos2, const Point& pos3) noexcept + : fPos1(pos1), + fPos2(pos2), + fPos3(pos3) {} + +template +Triangle::Triangle(const Triangle& tri) noexcept + : fPos1(tri.fPos1), + fPos2(tri.fPos2), + fPos3(tri.fPos3) {} + +template +void Triangle::draw() +{ + _draw(false); +} + +template +void Triangle::drawOutline() +{ + _draw(true); +} + +template +Triangle& Triangle::operator=(const Triangle& tri) noexcept +{ + fPos1 = tri.fPos1; + fPos2 = tri.fPos2; + fPos3 = tri.fPos3; + return *this; +} + +template +bool Triangle::operator==(const Triangle& tri) const noexcept +{ + return (fPos1 == tri.fPos1 && fPos2 == tri.fPos2 && fPos3 == tri.fPos3); +} + +template +bool Triangle::operator!=(const Triangle& tri) const noexcept +{ + return !operator==(tri); +} + +template +void Triangle::_draw(const bool isOutline) +{ + glBegin(isOutline ? GL_LINE_LOOP : GL_TRIANGLES); + + { + glVertex2i(fPos1.fX, fPos1.fY); + glVertex2i(fPos2.fX, fPos2.fY); + glVertex2i(fPos3.fX, fPos3.fY); + } + + glEnd(); +} + // ----------------------------------------------------------------------- // Rectangle template Rectangle::Rectangle() noexcept : fPos(0, 0), - fSize(0, 0) -{ -} + fSize(0, 0) {} template Rectangle::Rectangle(const T& x, const T& y, const T& width, const T& height) noexcept : fPos(x, y), - fSize(width, height) -{ -} + fSize(width, height) {} template Rectangle::Rectangle(const T& x, const T& y, const Size& size) noexcept : fPos(x, y), - fSize(size) -{ -} + fSize(size) {} template Rectangle::Rectangle(const Point& pos, const T& width, const T& height) noexcept : fPos(pos), - fSize(width, height) -{ -} + fSize(width, height) {} template Rectangle::Rectangle(const Point& pos, const Size& size) noexcept : fPos(pos), - fSize(size) -{ -} + fSize(size) {} template Rectangle::Rectangle(const Rectangle& rect) noexcept : fPos(rect.fPos), - fSize(rect.fSize) -{ -} + fSize(rect.fSize) {} template const T& Rectangle::getX() const noexcept @@ -706,6 +744,11 @@ template class Line; template class Line; template class Line; +template class Triangle; +template class Triangle; +template class Triangle; +template class Triangle; + template class Rectangle; template class Rectangle; template class Rectangle;