Browse Source

Simplify surface creation code. Use `SurfaceFactory` class.

master
Krisjanis Rijnieks 10 years ago
parent
commit
3ec8ba7abb
  1. 152
      src/Surfaces/SurfaceManager.cpp
  2. 7
      src/Surfaces/SurfaceManager.h

152
src/Surfaces/SurfaceManager.cpp

@ -37,117 +37,6 @@ void SurfaceManager::draw(){
*/ */
} }
void SurfaceManager::createSurface(int surfaceType, vector <ofVec2f> vertices,
vector <ofVec2f> texCoords){
if(surfaceType == SurfaceType::TRIANGLE_SURFACE){
if(vertices.size() < 3){
throw runtime_error(
"There must be 3 vertices for a triangle surface.");
}else if(texCoords.size() < 3){
throw runtime_error(
"There must be 3 texture coordinates for a triangle surface.");
}
_surfaces.push_back(new TriangleSurface());
//surfaces.push_back(new TriangleSurface());
for(int i = 0; i < 3; i++){
_surfaces.back()->setVertex(i, vertices[i]);
_surfaces.back()->setTexCoord(i, texCoords[i]);
/*
surfaces.back()->setVertex(i, vertices[i]);
surfaces.back()->setTexCoord(i, texCoords[i]);
*/
}
}else if(surfaceType == SurfaceType::QUAD_SURFACE){
if(vertices.size() < 4){
throw runtime_error("There must be 4 vertices for a quad surface.");
}else if(texCoords.size() < 4){
throw runtime_error(
"There must be 4 texture coordinates for a quad surface.");
}
_surfaces.push_back(new QuadSurface());
//surfaces.push_back(new QuadSurface());
for(int i = 0; i < 4; i++){
_surfaces.back()->setVertex(i, vertices[i]);
_surfaces.back()->setTexCoord(i, texCoords[i]);
/*
surfaces.back()->setVertex(i, vertices[i]);
surfaces.back()->setTexCoord(i, texCoords[i]);
*/
}
}else{
ofLogFatalError("SurfaceManager") << "Attempt to add non-existing surface type";
exit(EXIT_FAILURE);
}
}
void SurfaceManager::createSurface(int surfaceType, BaseSource * newSource,
vector <ofVec2f> vertices,
vector <ofVec2f> texCoords){
if(surfaceType == SurfaceType::TRIANGLE_SURFACE){
if(vertices.size() < 3){
throw runtime_error(
"There must be 3 vertices for a triangle surface.");
}else if(texCoords.size() < 3){
throw runtime_error(
"Thre must be 3 texture coordinates for a triangle surface.");
}
_surfaces.push_back(new TriangleSurface());
_surfaces.back()->setSource(newSource);
/*
surfaces.push_back(new TriangleSurface());
surfaces.back()->setSource(newSource);
*/
for(int i = 0; i < 3; i++){
_surfaces.back()->setVertex(i, vertices[i]);
_surfaces.back()->setTexCoord(i, texCoords[i]);
/*
surfaces.back()->setVertex(i, vertices[i]);
surfaces.back()->setTexCoord(i, texCoords[i]);
*/
}
}else if(surfaceType == SurfaceType::QUAD_SURFACE){
if(vertices.size() < 4){
throw runtime_error("There must be 4 vertices for a quad surface.");
}else if(texCoords.size() < 4){
throw runtime_error(
"Thre must be 4 texture coordinates for a quad surface.");
}
_surfaces.push_back(new QuadSurface());
_surfaces.back()->setSource(newSource);
/*
surfaces.push_back(new QuadSurface());
surfaces.back()->setSource(newSource);
*/
for(int i = 0; i < 4; i++){
_surfaces.back()->setVertex(i, vertices[i]);
_surfaces.back()->setTexCoord(i, texCoords[i]);
/*
surfaces.back()->setVertex(i, vertices[i]);
surfaces.back()->setTexCoord(i, texCoords[i]);
*/
}
}else{
ofLogFatalError("SurfaceManager") << "Attempt to add non-existing surface type";
exit(EXIT_FAILURE);
}
}
// Add existing surface // Add existing surface
void SurfaceManager::addSurface(BaseSurface * surface){ void SurfaceManager::addSurface(BaseSurface * surface){
_surfaces.push_back(surface); _surfaces.push_back(surface);
@ -314,9 +203,8 @@ bool SurfaceManager::loadXmlSettings(string fileName){
xmlSettings.pushTag("vertices"); xmlSettings.pushTag("vertices");
vector <ofVec2f> vertices; vector <ofVec2f> vertices;
int vertexCount = xmlSettings.getNumTags("vertex"); int vertexCount = xmlSettings.getNumTags("vertex");
// it's a triangle ?
if(vertexCount == 3){ if(vertexCount == 3){
//ofLog(OF_LOG_NOTICE, "create Triangle");
xmlSettings.pushTag("vertex", 0); xmlSettings.pushTag("vertex", 0);
vertices.push_back(ofVec2f(xmlSettings.getValue("x", 0.0f), vertices.push_back(ofVec2f(xmlSettings.getValue("x", 0.0f),
xmlSettings.getValue("y", 0.0f))); xmlSettings.getValue("y", 0.0f)));
@ -355,18 +243,20 @@ bool SurfaceManager::loadXmlSettings(string fileName){
xmlSettings.popTag(); // texCoords xmlSettings.popTag(); // texCoords
// now we have variables sourceName and sourceTexture // Create and add a triangle surface
// by checking those we can use one or another addSurface method BaseSurface * triangleSurface =
SurfaceFactory::instance()->createSurface(
SurfaceType::TRIANGLE_SURFACE);
triangleSurface->setVertices(vertices);
triangleSurface->setTexCoords(texCoords);
if(sourceName != "none" && source != 0){ if(sourceName != "none" && source != 0){
createSurface(SurfaceType::TRIANGLE_SURFACE, source, vertices, triangleSurface->setSource(source);
texCoords);
}else{
createSurface(SurfaceType::TRIANGLE_SURFACE, vertices, texCoords);
} }
}
// it's a quad ? addSurface(triangleSurface);
else if(vertexCount == 4){
// if (surface-type == QUAD_SURFACE) }else if(vertexCount == 4){
xmlSettings.pushTag("vertex", 0); xmlSettings.pushTag("vertex", 0);
vertices.push_back(ofVec2f(xmlSettings.getValue("x", 0.0f), vertices.push_back(ofVec2f(xmlSettings.getValue("x", 0.0f),
xmlSettings.getValue("y", 0.0f))); xmlSettings.getValue("y", 0.0f)));
@ -415,14 +305,18 @@ bool SurfaceManager::loadXmlSettings(string fileName){
xmlSettings.popTag(); // texCoords xmlSettings.popTag(); // texCoords
// now we have variables sourceName and sourceTexture // Create and add quad surface
// by checking those we can use one or another addSurface method BaseSurface * quadSurface =
SurfaceFactory::instance()->createSurface(
SurfaceType::QUAD_SURFACE);
quadSurface->setVertices(vertices);
quadSurface->setTexCoords(texCoords);
if(sourceName != "none" && source != 0){ if(sourceName != "none" && source != 0){
createSurface(SurfaceType::QUAD_SURFACE, source, vertices, quadSurface->setSource(source);
texCoords);
}else{
createSurface(SurfaceType::QUAD_SURFACE, vertices, texCoords);
} }
addSurface(quadSurface);
} }
xmlSettings.popTag(); // surface xmlSettings.popTag(); // surface

7
src/Surfaces/SurfaceManager.h

@ -8,6 +8,7 @@
#include "BaseSource.h" #include "BaseSource.h"
#include "SourceType.h" #include "SourceType.h"
#include "SurfaceStack.h" #include "SurfaceStack.h"
#include "SurfaceFactory.h"
#include "ofEvents.h" #include "ofEvents.h"
#include "ofxXmlSettings.h" #include "ofxXmlSettings.h"
@ -25,12 +26,6 @@ class SurfaceManager {
void draw(); void draw();
void createSurface(int surfaceType, vector <ofVec2f> vertices,
vector <ofVec2f> texCoords);
void createSurface(int surfaceType, BaseSource * newSource,
vector <ofVec2f> vertices, vector <ofVec2f> texCoords);
// Except this, as it adds existing surface
void addSurface(BaseSurface * surface); void addSurface(BaseSurface * surface);
void removeSelectedSurface(); void removeSelectedSurface();

Loading…
Cancel
Save