From f92d479a70494f355e20b03ee057e04dee01be0d Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 17 Aug 2016 21:40:27 +0200 Subject: [PATCH] Add `TriangleSurface::getBoundingBox()`, return copy instead of ref --- src/Surfaces/BaseSurface.h | 2 +- src/Surfaces/GridWarpSurface.h | 2 +- src/Surfaces/QuadSurface.h | 2 +- src/Surfaces/TriangleSurface.cpp | 32 ++++++++++++++++++++++++++++++++ src/Surfaces/TriangleSurface.h | 2 +- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/Surfaces/BaseSurface.h b/src/Surfaces/BaseSurface.h index 3c80957..1662e3b 100644 --- a/src/Surfaces/BaseSurface.h +++ b/src/Surfaces/BaseSurface.h @@ -34,7 +34,7 @@ class BaseSurface { virtual vector & getVertices() = 0; virtual vector & getTexCoords() = 0; - virtual ofRectangle & getBoundingBox() = 0; + virtual ofRectangle getBoundingBox() = 0; virtual BaseSurface * clone() = 0; diff --git a/src/Surfaces/GridWarpSurface.h b/src/Surfaces/GridWarpSurface.h index 0d31f14..11301c6 100644 --- a/src/Surfaces/GridWarpSurface.h +++ b/src/Surfaces/GridWarpSurface.h @@ -36,7 +36,7 @@ class GridWarpSurface : public BaseSurface { vector & getVertices(); vector & getTexCoords(); - ofRectangle & getBoundingBox(){} + ofRectangle getBoundingBox(){} void createGridMesh(); diff --git a/src/Surfaces/QuadSurface.h b/src/Surfaces/QuadSurface.h index 7d84910..495a6e7 100644 --- a/src/Surfaces/QuadSurface.h +++ b/src/Surfaces/QuadSurface.h @@ -38,7 +38,7 @@ class QuadSurface : public BaseSurface { vector & getVertices(); vector & getTexCoords(); - ofRectangle & getBoundingBox(){} + ofRectangle getBoundingBox(){} void setPerspectiveWarping(bool b); bool getPerspectiveWarping(); diff --git a/src/Surfaces/TriangleSurface.cpp b/src/Surfaces/TriangleSurface.cpp index dc44df0..03a89fc 100644 --- a/src/Surfaces/TriangleSurface.cpp +++ b/src/Surfaces/TriangleSurface.cpp @@ -203,6 +203,38 @@ vector & TriangleSurface::getTexCoords(){ return mesh.getTexCoords(); } +ofRectangle TriangleSurface::getBoundingBox(){ + ofRectangle rect; + + // Find top left + rect.x = 999999; + rect.y = 999999; + for(unsigned int i = 0; i < mesh.getVertices().size(); ++i){ + if(mesh.getVertices()[i].x < rect.x){ + rect.x = mesh.getVertices()[i].x; + } + + if(mesh.getVertices()[i].y < rect.y){ + rect.y = mesh.getVertices()[i].y; + } + } + + // Find bottom right + rect.width = -999999; + rect.height = -999999; + for(unsigned int i = 0; i < mesh.getVertices().size(); ++i){ + if(rect.x + rect.width > mesh.getVertices()[i].x){ + rect.width = mesh.getVertices()[i].x - rect.x; + } + + if(rect.y + rect.height > mesh.getVertices()[i].y){ + rect.height = mesh.getVertices()[i].y - rect.y; + } + } + + return rect; +} + BaseSurface * TriangleSurface::clone(){ TriangleSurface * s = new TriangleSurface(); s->setVertices(getVertices()); diff --git a/src/Surfaces/TriangleSurface.h b/src/Surfaces/TriangleSurface.h index 7b6f76a..7c95493 100644 --- a/src/Surfaces/TriangleSurface.h +++ b/src/Surfaces/TriangleSurface.h @@ -36,7 +36,7 @@ class TriangleSurface : public BaseSurface { vector & getVertices(); vector & getTexCoords(); - ofRectangle & getBoundingBox(){} + ofRectangle getBoundingBox(); BaseSurface * clone(); };