From 11f4cd4451ed7f4da53598aa0f0b4ae6f4f841a4 Mon Sep 17 00:00:00 2001 From: djairoh Date: Sun, 5 May 2024 21:54:52 +0200 Subject: [PATCH 1/2] feat: implemented pause functionality on space press --- vtk/src/Program.cpp | 1 + vtk/src/commands/TimerCallbackCommand.cpp | 14 +++++++++++++- vtk/src/commands/TimerCallbackCommand.h | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) 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; }; From ee9b71fb1732c5715fc94d781e24d435f85a0666 Mon Sep 17 00:00:00 2001 From: djairoh Date: Sun, 5 May 2024 21:56:06 +0200 Subject: [PATCH 2/2] fix: update renderWindow when drawing new points while the timer is paused --- vtk/src/commands/SpawnPointCallback.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vtk/src/commands/SpawnPointCallback.cpp b/vtk/src/commands/SpawnPointCallback.cpp index e29d190..a0f38cd 100644 --- a/vtk/src/commands/SpawnPointCallback.cpp +++ b/vtk/src/commands/SpawnPointCallback.cpp @@ -50,8 +50,7 @@ void SpawnPointCallback::Execute(vtkObject *caller, unsigned long evId, void *ca vtkSmartPointer vertices = vtkSmartPointer::New(); vertices->InsertNextCell(vertex); data->SetVerts(vertices); -// data->Modified(); // These might be needed im not sure. -// ren->GetRenderWindow()->Render(); + ren->GetRenderWindow()->Render(); }