Browse Source

Make surfaces emit events when vertices change

master
Krisjanis Rijnieks 9 years ago
parent
commit
5726357069
  1. 2
      src/Surfaces/BaseSurface.h
  2. 10
      src/Surfaces/GridWarpSurface.cpp
  3. 8
      src/Surfaces/QuadSurface.cpp
  4. 14
      src/Surfaces/SurfaceManager.cpp
  5. 7
      src/Surfaces/SurfaceManager.h
  6. 13
      src/Surfaces/SurfaceManagerGui.cpp
  7. 3
      src/Surfaces/SurfaceManagerGui.h
  8. 14
      src/Surfaces/SurfaceStack.cpp
  9. 6
      src/Surfaces/SurfaceStack.h
  10. 10
      src/Surfaces/TriangleSurface.cpp

2
src/Surfaces/BaseSurface.h

@ -42,6 +42,8 @@ class BaseSurface {
ofMesh getMesh();
// TODO: The surface should emit an event once vertex has changed
ofEvent <vector<ofVec3f>> verticesChangedEvent;
ofEvent <ofVec3f> vertexChangedEvent;
protected:
ofMesh mesh;

10
src/Surfaces/GridWarpSurface.cpp

@ -25,10 +25,13 @@ void GridWarpSurface::draw(){
void GridWarpSurface::moveBy(ofVec2f v){
vector <ofVec3f> & vertices = getVertices();
for(int i = 0; i < vertices.size(); i++){
vertices[i] += v;
}
setMoved(true);
ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this);
}
int GridWarpSurface::getType(){
@ -139,7 +142,10 @@ void GridWarpSurface::setVertex(int index, ofVec2f p){
if(index >= mesh.getVertices().size()){
throw runtime_error("Vertex with provided index does not exist");
}
mesh.setVertex(index, p);
ofVec3f v = mesh.getVertex(index);
ofNotifyEvent(vertexChangedEvent, v, this);
}
void GridWarpSurface::setVertices(vector<ofVec2f> v){
@ -150,6 +156,8 @@ void GridWarpSurface::setVertices(vector<ofVec2f> v){
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){
@ -220,7 +228,7 @@ void GridWarpSurface::createGridMesh(){
}
}
ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this);
}

8
src/Surfaces/QuadSurface.cpp

@ -96,15 +96,20 @@ void QuadSurface::setVertex(int index, ofVec2f p){
}
mesh.setVertex(index, p);
ofVec3f v = mesh.getVertex(index);
ofNotifyEvent(vertexChangedEvent, v, this);
}
void QuadSurface::setVertices(vector<ofVec2f> 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){
@ -128,10 +133,13 @@ void QuadSurface::setTexCoords(vector<ofVec2f> t){
void QuadSurface::moveBy(ofVec2f v){
vector <ofVec3f> & vertices = getVertices();
for(int i = 0; i < vertices.size(); i++){
vertices[i] += v;
}
setMoved(true);
ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this);
}
int QuadSurface::getType(){

14
src/Surfaces/SurfaceManager.cpp

@ -6,10 +6,8 @@ namespace piMapper {
SurfaceManager::SurfaceManager(){
mediaServer = 0;
selectedSurface = 0;
}
SurfaceManager::~SurfaceManager(){
clear();
ofAddListener(_surfaces.vertexChangedEvent, this, &SurfaceManager::onVertexChanged);
ofAddListener(_surfaces.verticesChangedEvent, this, &SurfaceManager::onVerticesChanged);
}
void SurfaceManager::draw(){
@ -115,5 +113,13 @@ int SurfaceManager::size(){
return _surfaces.size();
}
void SurfaceManager::onVertexChanged(ofVec3f & vertex){
ofNotifyEvent(vertexChangedEvent, vertex, this);
}
void SurfaceManager::onVerticesChanged(vector<ofVec3f> & vertices){
ofNotifyEvent(verticesChangedEvent, vertices, this);
}
} // namespace piMapper
} // namespace ofx

7
src/Surfaces/SurfaceManager.h

@ -23,7 +23,6 @@ class SurfaceManager {
public:
SurfaceManager();
~SurfaceManager();
void draw();
@ -44,6 +43,12 @@ class SurfaceManager {
int size();
ofEvent <ofVec3f> vertexChangedEvent;
ofEvent <vector<ofVec3f>> verticesChangedEvent;
void onVertexChanged(ofVec3f & vertex);
void onVerticesChanged(vector<ofVec3f> & vertices);
private:
BaseSurface * selectedSurface;
ofxXmlSettings xmlSettings;

13
src/Surfaces/SurfaceManagerGui.cpp

@ -228,6 +228,10 @@ void SurfaceManagerGui::mouseDragged(ofMouseEventArgs & args){
void SurfaceManagerGui::setSurfaceManager(SurfaceManager * newSurfaceManager){
surfaceManager = newSurfaceManager;
ofAddListener(newSurfaceManager->vertexChangedEvent, this, &SurfaceManagerGui::onVertexChanged);
ofAddListener(newSurfaceManager->verticesChangedEvent, this, &SurfaceManagerGui::onVerticesChanged);
projectionEditor.setSurfaceManager(surfaceManager);
sourcesEditor.setSurfaceManager(surfaceManager);
}
@ -328,5 +332,14 @@ ProjectionEditor * SurfaceManagerGui::getProjectionEditor(){
return &projectionEditor;
}
void SurfaceManagerGui::onVertexChanged(ofVec3f & vertex){
//cout << "VERTEX CHANGED: " << vertex.x << ", " << vertex.y << endl;
}
void SurfaceManagerGui::onVerticesChanged(vector<ofVec3f> & vertices){
//cout << "VERTICES CHANGED: " << vertices.size() << endl;
projectionEditor.createJoints();
}
} // namespace piMapper
} // namespace ofx

3
src/Surfaces/SurfaceManagerGui.h

@ -46,6 +46,9 @@ class SurfaceManagerGui {
void stopDrag();
ProjectionEditor * getProjectionEditor();
void onVertexChanged(ofVec3f & vertex);
void onVerticesChanged(vector<ofVec3f> & vertices);
private:
SurfaceManager * surfaceManager;

14
src/Surfaces/SurfaceStack.cpp

@ -6,14 +6,20 @@ namespace piMapper {
SurfaceStack::SurfaceStack(){}
void SurfaceStack::push_back(BaseSurface * s){
ofAddListener(s->verticesChangedEvent, this, &SurfaceStack::onVerticesChanged);
ofAddListener(s->vertexChangedEvent, this, &SurfaceStack::onVertexChanged);
_surfaces.push_back(s);
}
void SurfaceStack::pop_back(){
ofRemoveListener(_surfaces.back()->verticesChangedEvent, this, &SurfaceStack::onVerticesChanged);
ofRemoveListener(_surfaces.back()->vertexChangedEvent, this, &SurfaceStack::onVertexChanged);
_surfaces.pop_back();
}
void SurfaceStack::erase(int i){
ofRemoveListener(_surfaces[i]->verticesChangedEvent, this, &SurfaceStack::onVerticesChanged);
ofRemoveListener(_surfaces[i]->vertexChangedEvent, this, &SurfaceStack::onVertexChanged);
_surfaces.erase(_surfaces.begin() + i);
}
@ -42,5 +48,13 @@ BaseSurface * SurfaceStack::back(){
return _surfaces.back();
}
void SurfaceStack::onVerticesChanged(vector<ofVec3f> & vertices){
ofNotifyEvent(verticesChangedEvent, vertices, this);
}
void SurfaceStack::onVertexChanged(ofVec3f & vertex){
ofNotifyEvent(vertexChangedEvent, vertex, this);
}
} // namespace piMapper
} // namespace ofx

6
src/Surfaces/SurfaceStack.h

@ -22,6 +22,12 @@ class SurfaceStack {
BaseSurface * operator[](int i);
BaseSurface * back();
ofEvent <vector<ofVec3f>> verticesChangedEvent;
ofEvent <ofVec3f> vertexChangedEvent;
void onVerticesChanged(vector<ofVec3f> & vertices);
void onVertexChanged(ofVec3f & vertex);
private:
vector<BaseSurface *> _surfaces;
};

10
src/Surfaces/TriangleSurface.cpp

@ -61,17 +61,22 @@ void TriangleSurface::setVertex(int index, ofVec2f p){
ofLog() << "Vertex with this index does not exist: " << index << endl;
return;
}
mesh.setVertex(index, p);
ofVec3f v = mesh.getVertex(index);
ofNotifyEvent(vertexChangedEvent, v, this);
}
void TriangleSurface::setVertices(vector<ofVec2f> 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){
@ -95,10 +100,13 @@ void TriangleSurface::setTexCoords(vector<ofVec2f> t){
void TriangleSurface::moveBy(ofVec2f v){
vector <ofVec3f> & vertices = getVertices();
for(int i = 0; i < vertices.size(); i++){
vertices[i] += v;
}
setMoved(true);
ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this);
}
int TriangleSurface::getType(){

Loading…
Cancel
Save