diff --git a/vtk/src/helperClasses/Program.cpp b/vtk/src/helperClasses/Program.cpp index c7451be..6d411a8 100644 --- a/vtk/src/helperClasses/Program.cpp +++ b/vtk/src/helperClasses/Program.cpp @@ -40,39 +40,64 @@ void Program::setupTimer() { this->interact->CreateRepeatingTimer(17); // 60 fps == 1000 / 60 == 16.7 ms per frame } -Program::Program(Layer *bg, Layer *e, Layer *l) : background(bg), euler(e), lagrange(l), win(), interact() { +Program::Program() { this->win = vtkSmartPointer::New(); this->interact = vtkSmartPointer::New(); - this->win->SetNumberOfLayers(3); - this->win->AddRenderer(bg->getLayer()); - this->win->AddRenderer(e->getLayer()); - this->win->AddRenderer(l->getLayer()); + this->win->SetNumberOfLayers(0); setWinProperties(); setupTimer(); } +// Program::Program(Layer *bg, Layer *e, Layer *l) : background(bg), euler(e), lagrange(l), win(), interact() { +// this->win = vtkSmartPointer::New(); +// this->interact = vtkSmartPointer::New(); +// +// this->win->SetNumberOfLayers(3); +// this->win->AddRenderer(bg->getLayer()); +// this->win->AddRenderer(e->getLayer()); +// this->win->AddRenderer(l->getLayer()); +// setWinProperties(); +// setupTimer(); +// } -void Program::setBackground(Layer *bg) { - this->win->RemoveRenderer(this->background->getLayer()); - this->background = bg; - this->win->AddRenderer(bg->getLayer()); - +void Program::addLayer(Layer* layer) { + this->layers.push_back(layer); + this->win->AddRenderer(layer->getLayer()); + this->win->SetNumberOfLayers(this->win->GetNumberOfLayers()+1); +} + +void Program::removeLayer(Layer *layer) { + this->win->RemoveRenderer(layer->getLayer()); + + auto it = std::find(this->layers.begin(), this->layers.end(), layer); + if (it != this->layers.end()) { + this->layers.erase(it); + this->win->SetNumberOfLayers(this->win->GetNumberOfLayers()-1); + } } -void Program::setEuler(Layer *e) { - this->win->RemoveRenderer(this->euler->getLayer()); - this->euler = e; - this->win->AddRenderer(e->getLayer()); -} - - -void Program::setLagrange(Layer *l) { - this->win->RemoveRenderer(this->lagrange->getLayer()); - this->lagrange = l; - this->win->AddRenderer(l->getLayer()); -} +// void Program::setBackground(Layer *bg) { +// this->win->RemoveRenderer(this->background->getLayer()); +// this->background = bg; +// this->win->AddRenderer(bg->getLayer()); +// +// } +// +// +// void Program::setEuler(Layer *e) { +// this->win->RemoveRenderer(this->euler->getLayer()); +// this->euler = e; +// this->win->AddRenderer(e->getLayer()); +// } +// +// +// void Program::setLagrange(Layer *l) { +// this->win->RemoveRenderer(this->lagrange->getLayer()); +// this->lagrange = l; +// this->win->AddRenderer(l->getLayer()); +// // } void Program::setLagrangeInteractor(SpawnPointCallback *cb){ interact->AddObserver(vtkCommand::LeftButtonPressEvent, cb); @@ -84,8 +109,11 @@ void Program::setLagrangeInteractor(SpawnPointCallback *cb){ void Program::updateData(int t) { this->win->Render(); - this->lagrange->updateData(t); - this->euler->updateData(t); + for (Layer *l : layers) { + l->updateData(t); + } + // this->lagrange->updateData(t); + // this->euler->updateData(t); } diff --git a/vtk/src/helperClasses/Program.h b/vtk/src/helperClasses/Program.h index f6b2453..96939fe 100644 --- a/vtk/src/helperClasses/Program.h +++ b/vtk/src/helperClasses/Program.h @@ -10,9 +10,11 @@ class Program { private: - Layer *background; - Layer *euler; - Layer *lagrange; + // Layer *background; + // Layer *euler; + // Layer *lagrange; + + std::vector layers; vtkSmartPointer win; vtkSmartPointer interact; @@ -20,11 +22,15 @@ private: void setupTimer(); public: - Program(Layer *bg, Layer *e, Layer *l); + Program(); + // Program(Layer *bg, Layer *e, Layer *l); - void setBackground(Layer *bg); - void setEuler(Layer *e); - void setLagrange(Layer *l); + void addLayer(Layer *layer); + void removeLayer(Layer *layer); + + // void setBackground(Layer *bg); + // void setEuler(Layer *e); + // void setLagrange(Layer *l); void setLagrangeInteractor(SpawnPointCallback *cb); // void addInteractionStyle(vtkInteractorStyle style); diff --git a/vtk/src/main.cpp b/vtk/src/main.cpp index 78b1a3a..7be9e38 100644 --- a/vtk/src/main.cpp +++ b/vtk/src/main.cpp @@ -17,12 +17,15 @@ using namespace std; int main() { - auto bg = new BackgroundImage("../../../../data/map_661-661.png"); - auto e = new EGlyphLayer(); auto l = new LGlyphLayer(); l->spoofPoints(); - auto program = new Program(bg, e, l); + Program *program = new Program(); + program->addLayer(new BackgroundImage("../../../../data/map_661-661.png")); + program->addLayer(new EGlyphLayer()); + program->addLayer(l); + + // auto program = new Program(bg, e, l); program->setLagrangeInteractor(l->createSpawnPointCallback()); program->render();