From 18ae7b7b42ea27944d950e6dd5b84f680bb64fc0 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 4 Mar 2016 21:20:38 +0100 Subject: [PATCH] Add `clone()` and `deleteSurface()` methods to `BaseSurface` --- src/Surfaces/BaseSurface.h | 2 ++ src/Surfaces/GridWarpSurface.cpp | 20 +++++++++++++++++++- src/Surfaces/GridWarpSurface.h | 3 +++ src/Surfaces/QuadSurface.cpp | 20 ++++++++++++++++++++ src/Surfaces/QuadSurface.h | 3 +++ src/Surfaces/TriangleSurface.cpp | 20 ++++++++++++++++++++ src/Surfaces/TriangleSurface.h | 3 +++ 7 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/Surfaces/BaseSurface.h b/src/Surfaces/BaseSurface.h index f7d8c0c..784bf17 100644 --- a/src/Surfaces/BaseSurface.h +++ b/src/Surfaces/BaseSurface.h @@ -30,6 +30,8 @@ class BaseSurface { virtual ofPolyline getTextureHitArea(){} virtual vector & getVertices(){} virtual vector & getTexCoords(){} + + virtual BaseSurface * clone(){} void drawTexture(ofVec2f position); void setSource(BaseSource * newSource); diff --git a/src/Surfaces/GridWarpSurface.cpp b/src/Surfaces/GridWarpSurface.cpp index 16be445..9ebee3c 100644 --- a/src/Surfaces/GridWarpSurface.cpp +++ b/src/Surfaces/GridWarpSurface.cpp @@ -160,6 +160,18 @@ void GridWarpSurface::setVertices(vector v){ ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); } +void GridWarpSurface::setVertices(vector v){ + if(v.size() != mesh.getVertices().size()){ + throw runtime_error("Wrong number of vertices"); + } + + for(int i = 0; i < v.size(); ++i){ + mesh.setVertex(i, v[i]); + } + + ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); +} + void GridWarpSurface::setTexCoord(int index, ofVec2f t){ if(index >= mesh.getVertices().size()){ throw runtime_error("Texture coordinate with provided index does not exist"); @@ -231,7 +243,13 @@ void GridWarpSurface::createGridMesh(){ ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); } - +BaseSurface * GridWarpSurface::clone(){ + GridWarpSurface * s = new GridWarpSurface(); + s->setVertices(getVertices()); + s->setTexCoords(getTexCoords()); + s->setSource(getSource()); + return s; +} } // namespace piMapper } // namespace ofx \ No newline at end of file diff --git a/src/Surfaces/GridWarpSurface.h b/src/Surfaces/GridWarpSurface.h index 14a047b..5c8dba9 100644 --- a/src/Surfaces/GridWarpSurface.h +++ b/src/Surfaces/GridWarpSurface.h @@ -28,12 +28,15 @@ class GridWarpSurface : public BaseSurface { void setVertex(int index, ofVec2f p); void setVertices(vector v); + void setVertices(vector v); void setTexCoord(int index, ofVec2f t); void setTexCoords(vector t); vector & getVertices(); vector & getTexCoords(); void createGridMesh(); + + BaseSurface * clone(); private: int _gridCols; diff --git a/src/Surfaces/QuadSurface.cpp b/src/Surfaces/QuadSurface.cpp index 2e8f6b3..eb8888e 100644 --- a/src/Surfaces/QuadSurface.cpp +++ b/src/Surfaces/QuadSurface.cpp @@ -114,6 +114,18 @@ void QuadSurface::setVertices(vector v){ ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); } +void QuadSurface::setVertices(vector v){ + if(v.size() != 4){ + throw runtime_error("Wrong number of vertices"); + } + + for(int i = 0; i < 4; ++i){ + mesh.setVertex(i, v[i]); + } + + ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); +} + void QuadSurface::setTexCoord(int index, ofVec2f t){ if(index > 3){ ofLog() << "Texture coordinate with this index does not exist: " << index @@ -277,5 +289,13 @@ ofRectangle QuadSurface::getMeshBoundingBox(){ return boundingBox; } +BaseSurface * QuadSurface::clone(){ + QuadSurface * s = new QuadSurface(); + s->setVertices(getVertices()); + s->setTexCoords(getTexCoords()); + s->setSource(getSource()); + return s; +} + } // namespace piMapper } // namespace ofx \ No newline at end of file diff --git a/src/Surfaces/QuadSurface.h b/src/Surfaces/QuadSurface.h index f82c1d1..61d7efe 100644 --- a/src/Surfaces/QuadSurface.h +++ b/src/Surfaces/QuadSurface.h @@ -22,6 +22,7 @@ class QuadSurface : public BaseSurface { void setVertex(int index, ofVec2f p); void setVertices(vector v); + void setVertices(vector v); void setTexCoord(int index, ofVec2f t); void setTexCoords(vector t); @@ -41,6 +42,8 @@ class QuadSurface : public BaseSurface { bool getPerspectiveWarping(); ofRectangle getMeshBoundingBox(); + + BaseSurface * clone(); private: void calculateHomography(); diff --git a/src/Surfaces/TriangleSurface.cpp b/src/Surfaces/TriangleSurface.cpp index 0ade7a8..4fcdbf2 100644 --- a/src/Surfaces/TriangleSurface.cpp +++ b/src/Surfaces/TriangleSurface.cpp @@ -79,6 +79,18 @@ void TriangleSurface::setVertices(vector v){ ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); } +void TriangleSurface::setVertices(vector v){ + if(v.size() != 3){ + throw runtime_error("Wrong number of vertices"); + } + + for(int i = 0; i < 3; ++i){ + mesh.setVertex(i, v[i]); + } + + ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); +} + void TriangleSurface::setTexCoord(int index, ofVec2f t){ if(index > 2){ ofLog() << "Texture coordinate with this index does not exist: " << index @@ -173,5 +185,13 @@ vector & TriangleSurface::getTexCoords(){ return mesh.getTexCoords(); } +BaseSurface * TriangleSurface::clone(){ + TriangleSurface * s = new TriangleSurface(); + s->setVertices(getVertices()); + s->setTexCoords(getTexCoords()); + s->setSource(getSource()); + return s; +} + } // namespace piMapper } // namespace ofx \ No newline at end of file diff --git a/src/Surfaces/TriangleSurface.h b/src/Surfaces/TriangleSurface.h index c3d9317..f3797e9 100644 --- a/src/Surfaces/TriangleSurface.h +++ b/src/Surfaces/TriangleSurface.h @@ -19,6 +19,7 @@ class TriangleSurface : public BaseSurface { void setVertex(int index, ofVec2f p); void setVertices(vector v); + void setVertices(vector v); void setTexCoord(int index, ofVec2f t); void setTexCoords(vector t); @@ -33,6 +34,8 @@ class TriangleSurface : public BaseSurface { ofPolyline getTextureHitArea(); vector & getVertices(); vector & getTexCoords(); + + BaseSurface * clone(); }; } // namespace piMapper