Browse Source

Add editMode capability and two types of joints - for texture and projection mapping

master
Krisjanis Rijnieks 11 years ago
parent
commit
6039cf842b
  1. 74
      src/ofxSurfaceGui.cpp
  2. 20
      src/ofxSurfaceGui.h

74
src/ofxSurfaceGui.cpp

@ -3,6 +3,7 @@
ofxSurfaceGui::ofxSurfaceGui() ofxSurfaceGui::ofxSurfaceGui()
{ {
surface = NULL; surface = NULL;
mode = PROJECTION_MAPPING;
} }
ofxSurfaceGui::~ofxSurfaceGui() ofxSurfaceGui::~ofxSurfaceGui()
@ -13,62 +14,99 @@ ofxSurfaceGui::~ofxSurfaceGui()
void ofxSurfaceGui::setup(ofxTriangleSurface& surfaceForGui) void ofxSurfaceGui::setup(ofxTriangleSurface& surfaceForGui)
{ {
surface = &surfaceForGui; surface = &surfaceForGui;
addNumJoints(3); addNumProjectionMappingJoints(3);
addNumTextureMappingJoints(3);
} }
void ofxSurfaceGui::update() void ofxSurfaceGui::update()
{ {
if (surface == NULL) return; if (surface == NULL) return;
if (mode == NONE) return;
for ( int i=0; i<joints.size(); i++ ) { for ( int i=0; i<projectionMappingJoints.size(); i++ ) {
joints[i].update(); projectionMappingJoints[i].update();
} }
} }
void ofxSurfaceGui::draw() void ofxSurfaceGui::draw()
{ {
if (surface == NULL) return; if (surface == NULL) return;
for ( int i=0; i<joints.size(); i++ ) { if (mode == NONE) return;
joints[i].draw();
for ( int i=0; i<projectionMappingJoints.size(); i++ ) {
projectionMappingJoints[i].draw();
} }
} }
void ofxSurfaceGui::mousePressed(int x, int y, int button) void ofxSurfaceGui::mousePressed(int x, int y, int button)
{ {
if (surface == NULL) return; if (surface == NULL) return;
for ( int i=0; i<joints.size(); i++ ) { if (mode == NONE) return;
joints[i].mousePressed(x, y, button);
for ( int i=0; i<projectionMappingJoints.size(); i++ ) {
projectionMappingJoints[i].mousePressed(x, y, button);
} }
} }
void ofxSurfaceGui::mouseReleased(int x, int y, int button) void ofxSurfaceGui::mouseReleased(int x, int y, int button)
{ {
if (surface == NULL) return; if (surface == NULL) return;
for ( int i=0; i<joints.size(); i++ ) { if (mode == NONE) return;
joints[i].mouseReleased(x, y, button);
for ( int i=0; i<projectionMappingJoints.size(); i++ ) {
projectionMappingJoints[i].mouseReleased(x, y, button);
} }
} }
void ofxSurfaceGui::mouseDragged(int x, int y, int button) void ofxSurfaceGui::mouseDragged(int x, int y, int button)
{ {
if (surface == NULL) return; if (surface == NULL) return;
for ( int i=0; i<joints.size(); i++ ) { if (mode == NONE) return;
joints[i].mouseDragged(x, y, button);
if ( joints[i].isDragged() ) { for ( int i=0; i<projectionMappingJoints.size(); i++ ) {
surface->setVertex(i, joints[i].position); projectionMappingJoints[i].mouseDragged(x, y, button);
if ( projectionMappingJoints[i].isDragged() ) {
surface->setVertex(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; i<num; i++ ) {
addProjectionMappingJoint();
}
}
void ofxSurfaceGui::addTextureMappingJoint()
{ {
joints.push_back(ofxCircleJoint()); textureMappingJoings.push_back(ofxCircleJoint());
//textureMappingJoings.back().position = surface->getTex
} }
void ofxSurfaceGui::addNumJoints(int num) void ofxSurfaceGui::addNumTextureMappingJoints(int num)
{ {
for ( int i=0; i<num; i++ ) { for ( int i=0; i<num; i++ ) {
addJoint(); addTextureMappingJoint();
joints[i].position = surface->getVertex(i);
} }
} }

20
src/ofxSurfaceGui.h

@ -11,19 +11,33 @@ public:
ofxSurfaceGui(); ofxSurfaceGui();
~ofxSurfaceGui(); ~ofxSurfaceGui();
enum editMode {
NONE,
TEXTURE_MAPPING,
PROJECTION_MAPPING
};
void setup(ofxTriangleSurface& surfaceForGui); void setup(ofxTriangleSurface& surfaceForGui);
void update(); void update();
void draw(); void draw();
void mousePressed(int x, int y, int button); void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button); void mouseReleased(int x, int y, int button);
void mouseDragged(int x, int y, int button); void mouseDragged(int x, int y, int button);
void setMode(editMode newMode);
editMode getMode();
private: private:
editMode mode;
ofxTriangleSurface* surface; ofxTriangleSurface* surface;
vector<ofxCircleJoint> joints;
void addJoint(); vector<ofxCircleJoint> projectionMappingJoints;
void addNumJoints(int num); vector<ofxCircleJoint> textureMappingJoings;
void addProjectionMappingJoint();
void addNumProjectionMappingJoints(int num);
void addTextureMappingJoint();
void addNumTextureMappingJoints(int num);
}; };
#endif #endif
Loading…
Cancel
Save