You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
60 lines
1.5 KiB
#include "SurfaceStack.h"
|
|
|
|
namespace ofx {
|
|
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);
|
|
}
|
|
|
|
void SurfaceStack::swap(int a, int b){
|
|
std::swap(_surfaces[a], _surfaces[b]);
|
|
}
|
|
|
|
void SurfaceStack::draw(){
|
|
for(int i = 0; i < _surfaces.size(); ++i){
|
|
_surfaces[i]->draw();
|
|
}
|
|
}
|
|
|
|
int SurfaceStack::size(){
|
|
return _surfaces.size();
|
|
}
|
|
|
|
BaseSurface * SurfaceStack::operator[](int i){
|
|
if(i >= _surfaces.size()){
|
|
throw runtime_error("SurfaceStack index out of bounds");
|
|
}
|
|
return _surfaces[i];
|
|
}
|
|
|
|
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
|