diff --git a/vtk/src/Program.cpp b/vtk/src/Program.cpp index f5d1a93..bcb3e61 100644 --- a/vtk/src/Program.cpp +++ b/vtk/src/Program.cpp @@ -37,6 +37,7 @@ void Program::setupTimer() { auto callback = vtkSmartPointer::New(this); callback->SetClientData(this); this->interact->AddObserver(vtkCommand::TimerEvent, callback); + this->interact->AddObserver(vtkCommand::KeyPressEvent, callback); this->interact->CreateRepeatingTimer(17); // 60 fps == 1000 / 60 == 16.7 ms per frame } diff --git a/vtk/src/commands/TimerCallbackCommand.cpp b/vtk/src/commands/TimerCallbackCommand.cpp index 94e9de9..8e91b58 100644 --- a/vtk/src/commands/TimerCallbackCommand.cpp +++ b/vtk/src/commands/TimerCallbackCommand.cpp @@ -7,10 +7,16 @@ TimerCallbackCommand::TimerCallbackCommand() : dt(3600), maxTime(3600*24*365), t TimerCallbackCommand* TimerCallbackCommand::New(Program *program) { TimerCallbackCommand *cb = new TimerCallbackCommand(); cb->setProgram(program); + cb->setPaused(false); return cb; } void TimerCallbackCommand::Execute(vtkObject* caller, unsigned long eventId, void* vtkNotUsed(callData)) { + auto intr = reinterpret_cast(caller); + + if (eventId == vtkCommand::KeyPressEvent and not strcmp("space", intr->GetKeySym())) { + this->paused = ! this->paused; + } else if (eventId == vtkCommand::TimerEvent and not this->paused) { this->time += this->dt; if (this->time >= this->maxTime) { @@ -19,10 +25,16 @@ void TimerCallbackCommand::Execute(vtkObject* caller, unsigned long eventId, voi } this->program->updateData(this->time); -} + } +} void TimerCallbackCommand::setProgram(Program *program) { this->program = program; } + + +void TimerCallbackCommand::setPaused(const bool val) { + this->paused = val; +} diff --git a/vtk/src/commands/TimerCallbackCommand.h b/vtk/src/commands/TimerCallbackCommand.h index 618c7bf..2ff65ea 100644 --- a/vtk/src/commands/TimerCallbackCommand.h +++ b/vtk/src/commands/TimerCallbackCommand.h @@ -11,11 +11,13 @@ public: void Execute(vtkObject* caller, unsigned long eventId, void* vtkNotUsed(callData)) override; void setProgram(Program *program); + void setPaused(const bool val); private: int time; int dt; int maxTime; + bool paused; Program *program; };