From 4d32f95bfe3236ebdcd801f15a055761ff8bafa8 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Wed, 20 Dec 2023 15:20:38 -0500 Subject: [PATCH] BUG: Do not report "Unrecognized device" if handling complex gesture Since complex gesture are not associated with a specific controller, the associated event will be a synthesized one not associated with any particular device. --- VirtualReality/MRML/vtkVirtualRealityViewInteractor.cxx | 6 ++++++ VirtualReality/MRML/vtkVirtualRealityViewInteractor.h | 6 ++++++ .../MRML/vtkVirtualRealityViewInteractorObserver.cxx | 7 ++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/VirtualReality/MRML/vtkVirtualRealityViewInteractor.cxx b/VirtualReality/MRML/vtkVirtualRealityViewInteractor.cxx index f8d0e62..73cec43 100644 --- a/VirtualReality/MRML/vtkVirtualRealityViewInteractor.cxx +++ b/VirtualReality/MRML/vtkVirtualRealityViewInteractor.cxx @@ -41,6 +41,12 @@ vtkVirtualRealityViewInteractor::~vtkVirtualRealityViewInteractor() { } +//------------------------------------------------------------------------------ +vtkCommand::EventIds vtkVirtualRealityViewInteractor::GetCurrentGesture() const +{ + return this->CurrentGesture; +} + //------------------------------------------------------------------------------ void vtkVirtualRealityViewInteractor::HandleComplexGestureEvents(vtkEventData* ed) { diff --git a/VirtualReality/MRML/vtkVirtualRealityViewInteractor.h b/VirtualReality/MRML/vtkVirtualRealityViewInteractor.h index f782660..969579e 100644 --- a/VirtualReality/MRML/vtkVirtualRealityViewInteractor.h +++ b/VirtualReality/MRML/vtkVirtualRealityViewInteractor.h @@ -42,6 +42,12 @@ class VTK_SLICER_VIRTUALREALITY_MODULE_MRML_EXPORT vtkVirtualRealityViewInteract virtual void SetInteractorStyle(vtkInteractorObserver*) override; + /// Return the identifier of the complex gesture being handled. + /// \sa HandleComplexGestureEvents(), RecognizeComplexGesture() + /// \sa vtkVirtualRealityViewInteractorStyle::OnStartGesture() + /// \sa vtkVirtualRealityViewInteractorStyle::OnEndGesture() + vtkCommand::EventIds GetCurrentGesture() const; + ///@{ /// Define Slicer specific heuristic for handling complex gestures. /// diff --git a/VirtualReality/MRML/vtkVirtualRealityViewInteractorObserver.cxx b/VirtualReality/MRML/vtkVirtualRealityViewInteractorObserver.cxx index 630398a..5605f3c 100644 --- a/VirtualReality/MRML/vtkVirtualRealityViewInteractorObserver.cxx +++ b/VirtualReality/MRML/vtkVirtualRealityViewInteractorObserver.cxx @@ -19,6 +19,7 @@ #include "vtkVirtualRealityViewInteractorObserver.h" // SlicerVirtualReality includes +#include "vtkVirtualRealityViewInteractor.h" #include "vtkVirtualRealityViewInteractorStyle.h" // MRML includes @@ -222,6 +223,9 @@ bool vtkVirtualRealityViewInteractorObserver::DelegateInteractionEventDataToDisp vtkRenderer* currentRenderer = this->GetInteractorStyle()->GetCurrentRenderer(); ed->SetRenderer(currentRenderer); + vtkVirtualRealityViewInteractor* vrViewInteractor = + vtkVirtualRealityViewInteractor::SafeDownCast(this->GetInteractor()); + std::string interactionContextName; if (ed->GetDevice() == vtkEventDataDevice::LeftController) { @@ -235,8 +239,9 @@ bool vtkVirtualRealityViewInteractorObserver::DelegateInteractionEventDataToDisp { interactionContextName = "HeadMountedDisplay"; } - else + else if (vrViewInteractor && vrViewInteractor->GetCurrentGesture() == vtkCommand::NoEvent) { + // Report an error message only if the interactor is not processing a complex gesture. vtkErrorMacro("DelegateInteractionEventDataToDisplayableManagers: Unrecognized device"); } ed->SetInteractionContextName(interactionContextName);