diff --git a/src/ofxSurfaceGui.cpp b/src/ofxSurfaceGui.cpp index 2279e7d..0aca9a3 100644 --- a/src/ofxSurfaceGui.cpp +++ b/src/ofxSurfaceGui.cpp @@ -3,6 +3,7 @@ ofxSurfaceGui::ofxSurfaceGui() { surface = NULL; + mode = PROJECTION_MAPPING; } ofxSurfaceGui::~ofxSurfaceGui() @@ -13,62 +14,99 @@ ofxSurfaceGui::~ofxSurfaceGui() void ofxSurfaceGui::setup(ofxTriangleSurface& surfaceForGui) { surface = &surfaceForGui; - addNumJoints(3); + addNumProjectionMappingJoints(3); + addNumTextureMappingJoints(3); } void ofxSurfaceGui::update() { if (surface == NULL) return; + if (mode == NONE) return; - for ( int i=0; isetVertex(i, joints[i].position); + if (mode == NONE) return; + + for ( int i=0; isetVertex(i, projectionMappingJoints[i].position); } } } -void ofxSurfaceGui::addJoint() +void ofxSurfaceGui::setMode(ofxSurfaceGui::editMode newMode) +{ + if (mode != NONE || + mode != PROJECTION_MAPPING || + mode != TEXTURE_MAPPING) { + throw std::runtime_error("Trying to set invalid mode."); + }; +} + +ofxSurfaceGui::editMode ofxSurfaceGui::getMode() +{ + return mode; +} + +void ofxSurfaceGui::addProjectionMappingJoint() +{ + projectionMappingJoints.push_back(ofxCircleJoint()); + projectionMappingJoints.back().position = surface->getVertex(projectionMappingJoints.size()-1); +} + +void ofxSurfaceGui::addNumProjectionMappingJoints(int num) +{ + for ( int i=0; igetTex } -void ofxSurfaceGui::addNumJoints(int num) +void ofxSurfaceGui::addNumTextureMappingJoints(int num) { for ( int i=0; igetVertex(i); + addTextureMappingJoint(); } } \ No newline at end of file diff --git a/src/ofxSurfaceGui.h b/src/ofxSurfaceGui.h index 27c9d12..aaf1f12 100644 --- a/src/ofxSurfaceGui.h +++ b/src/ofxSurfaceGui.h @@ -11,19 +11,33 @@ public: ofxSurfaceGui(); ~ofxSurfaceGui(); + enum editMode { + NONE, + TEXTURE_MAPPING, + PROJECTION_MAPPING + }; + void setup(ofxTriangleSurface& surfaceForGui); void update(); void draw(); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void mouseDragged(int x, int y, int button); + void setMode(editMode newMode); + + editMode getMode(); private: + editMode mode; ofxTriangleSurface* surface; - vector joints; - void addJoint(); - void addNumJoints(int num); + vector projectionMappingJoints; + vector textureMappingJoings; + + void addProjectionMappingJoint(); + void addNumProjectionMappingJoints(int num); + void addTextureMappingJoint(); + void addNumTextureMappingJoints(int num); }; #endif \ No newline at end of file