#include "SpawnPointCallback.h" #include #include #include #include #include #include #include "../CartographicTransformation.h" void SpawnPointCallback::Execute(vtkObject *caller, unsigned long evId, void *callData) { // Note the use of reinterpret_cast to cast the caller to the expected type. auto interactor = reinterpret_cast(caller); if (evId == vtkCommand::LeftButtonPressEvent) { dragging = true; } if (evId == vtkCommand::LeftButtonReleaseEvent) { dragging = false; } if (!dragging) { return; } int x, y; interactor->GetEventPosition(x, y); double worldPos[4] = {2, 0 ,0, 0}; double displayPos[3] = {static_cast(x), static_cast(y), 0.0}; ren->SetDisplayPoint(displayPos); ren->DisplayToWorld(); ren->GetWorldPoint(worldPos); inverseCartographicProjection->TransformPoint(worldPos, worldPos); points->InsertNextPoint(worldPos[0], worldPos[1], 0); this->particlesBeached->InsertNextValue(0); this->particlesAge->InsertNextValue(0); this->lutIdx->InsertNextValue(0); // FIXME: The below lines cause some weird interaction with our vtkTimer. // see github issue https://github.com/MakeNEnjoy/interactive-track-and-trace/issues/28 this->points->Modified(); ren->GetRenderWindow()->Render(); } SpawnPointCallback::SpawnPointCallback() : points(nullptr), inverseCartographicProjection(nullptr), uvGrid(nullptr) { } SpawnPointCallback *SpawnPointCallback::New() { return new SpawnPointCallback; } void SpawnPointCallback::setPoints(const vtkSmartPointer &points) { this->points = points; } void SpawnPointCallback::setRen(const vtkSmartPointer &ren) { this->ren = ren; } void SpawnPointCallback::setUVGrid(const std::shared_ptr &uvGrid) { this->uvGrid = uvGrid; inverseCartographicProjection = createInverseCartographicTransformFilter(uvGrid)->GetTransform(); } void SpawnPointCallback::setBeached(const vtkSmartPointer &ints) { this->particlesBeached = ints; } void SpawnPointCallback::setAge(const vtkSmartPointer &ints) { this->particlesAge = ints; } void SpawnPointCallback::setIdx(const vtkSmartPointer &idx) { this->lutIdx = idx; }