From c4db1d000e67b9bd6507964477c1c24883cef776 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Sun, 10 Jan 2016 15:55:58 +0100 Subject: [PATCH] Implement `SurfaceFactory` Code that creates triangle or quad surface with default vertex and texCoord values --- src/Surfaces/SurfaceFactory.cpp | 46 +++++++++++++++++++++++++++++++-- src/Surfaces/SurfaceFactory.h | 2 ++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/Surfaces/SurfaceFactory.cpp b/src/Surfaces/SurfaceFactory.cpp index 8d8c598..2841a0b 100644 --- a/src/Surfaces/SurfaceFactory.cpp +++ b/src/Surfaces/SurfaceFactory.cpp @@ -14,9 +14,51 @@ SurfaceFactory * SurfaceFactory::instance(){ BaseSurface * SurfaceFactory::createSurface(int type){ if(type == SurfaceType::TRIANGLE_SURFACE){ - // TODO: Create triangle surface + + vector vertices; + float margin = 50.0f; + vertices.push_back(ofVec2f((float)ofGetWidth() / 2.0f, margin)); + vertices.push_back(ofVec2f((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); + vertices.push_back(ofVec2f(margin, (float)ofGetHeight() - margin)); + + vector texCoords; + texCoords.push_back(ofVec2f(0.5f, 0.0f)); + texCoords.push_back(ofVec2f(1.0f, 1.0f)); + texCoords.push_back(ofVec2f(0.0f, 1.0f)); + + TriangleSurface * triangleSurface = new TriangleSurface(); + + for(int i = 0; i < 3; i++){ + triangleSurface->setVertex(i, vertices[i]); + triangleSurface->setTexCoord(i, texCoords[i]); + } + + return triangleSurface; + }else if(type == SurfaceType::QUAD_SURFACE){ - // TODO: Create quad surface + + vector vertices; + float margin = 50.0f; + vertices.push_back(ofVec2f(margin, margin)); + vertices.push_back(ofVec2f((float)ofGetWidth() - margin, margin)); + vertices.push_back(ofVec2f((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); + vertices.push_back(ofVec2f(margin, (float)ofGetHeight() - margin)); + + vector texCoords; + texCoords.push_back(ofVec2f(ofVec2f(0.0f, 0.0f))); + texCoords.push_back(ofVec2f(ofVec2f(1.0f, 0.0f))); + texCoords.push_back(ofVec2f(ofVec2f(1.0f, 1.0f))); + texCoords.push_back(ofVec2f(ofVec2f(0.0f, 1.0f))); + + QuadSurface * quadSurface = new QuadSurface(); + + for(int i = 0; i < 4; i++){ + quadSurface->setVertex(i, vertices[i]); + quadSurface->setTexCoord(i, texCoords[i]); + } + + return quadSurface; + }else{ throw runtime_error("Undefined surface type"); } diff --git a/src/Surfaces/SurfaceFactory.h b/src/Surfaces/SurfaceFactory.h index 6160396..228a925 100644 --- a/src/Surfaces/SurfaceFactory.h +++ b/src/Surfaces/SurfaceFactory.h @@ -3,6 +3,8 @@ #include "ofMain.h" #include "BaseSurface.h" #include "SurfaceType.h" +#include "TriangleSurface.h" +#include "QuadSurface.h" namespace ofx { namespace piMapper {