Skip to content

Commit 881f850

Browse files
committed
STYLE: Simplify interactor style leveraging base class implementation
Removes functions `OnSelect3D`, `OnMove3D`, `OnViewerMovement3D`, `StartAction`, `EndAction`, `Movement3D` and `SetInteractor` functions that are available in the base class.
1 parent 3352dea commit 881f850

File tree

2 files changed

+0
-343
lines changed

2 files changed

+0
-343
lines changed

VirtualReality/MRML/vtkVirtualRealityViewInteractorStyle.cxx

Lines changed: 0 additions & 320 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
#include <vtkCallbackCommand.h>
3939
#include <vtkInteractorStyle.h>
4040
#include <vtkMath.h>
41-
#include <vtkVRMenuWidget.h>
4241
#include <vtkObjectFactory.h>
4342
#include <vtkPoints.h>
4443
#include <vtkRenderer.h>
@@ -251,222 +250,12 @@ void vtkVirtualRealityViewInteractorStyle::PrintSelf(ostream& os, vtkIndent inde
251250
this->Superclass::PrintSelf(os,indent);
252251
}
253252

254-
//----------------------------------------------------------------------------
255-
void vtkVirtualRealityViewInteractorStyle::SetInteractor(vtkRenderWindowInteractor *i)
256-
{
257-
if (i == this->Interactor)
258-
{
259-
return;
260-
}
261-
262-
this->Superclass::SetInteractor(i);
263-
}
264-
265253
//----------------------------------------------------------------------------
266254
void vtkVirtualRealityViewInteractorStyle::SetDisplayableManagers(vtkMRMLDisplayableManagerGroup* displayableManagers)
267255
{
268256
this->DisplayableManagers = displayableManagers;
269257
}
270258

271-
//----------------------------------------------------------------------------
272-
void vtkVirtualRealityViewInteractorStyle::OnMove3D(vtkEventData* edata)
273-
{
274-
vtkEventDataDevice3D* edd = edata->GetAsEventDataDevice3D();
275-
if (!edd)
276-
{
277-
return;
278-
}
279-
280-
// Retrieve device type
281-
int idev = static_cast<int>(edd->GetDevice());
282-
283-
if (edd->GetDevice() == vtkEventDataDevice::HeadMountedDisplay)
284-
{
285-
edd->GetWorldDirection(this->HeadsetDir);
286-
}
287-
288-
// Update current state
289-
int x = this->Interactor->GetEventPosition()[0];
290-
int y = this->Interactor->GetEventPosition()[1];
291-
292-
// Set current state and interaction prop
293-
this->InteractionProp = this->InteractionProps[idev];
294-
295-
auto interactionState = this->InteractionState[idev];
296-
switch (interactionState)
297-
{
298-
case VTKIS_POSITION_PROP:
299-
this->FindPokedRenderer(x, y);
300-
this->PositionProp(edd);
301-
this->InvokeEvent(vtkCommand::InteractionEvent, nullptr);
302-
break;
303-
case VTKIS_DOLLY:
304-
case VTKIS_GROUNDMOVEMENT:
305-
case VTKIS_ELEVATION:
306-
this->FindPokedRenderer(x, y);
307-
this->Movement3D(interactionState, edd);
308-
this->InvokeEvent(vtkCommand::InteractionEvent, nullptr);
309-
break;
310-
case VTKIS_CLIP:
311-
this->FindPokedRenderer(x, y);
312-
this->Clip(edd);
313-
this->InvokeEvent(vtkCommand::InteractionEvent, nullptr);
314-
break;
315-
case VTKIS_USCALE:
316-
this->FindPokedRenderer(x, y);
317-
this->UniformScale();
318-
this->InvokeEvent(vtkCommand::InteractionEvent, nullptr);
319-
break;
320-
default:
321-
vtkDebugMacro(<< "OnMove3D: unknown interaction state " << idev << ": "
322-
<< this->InteractionState[idev]);
323-
break;
324-
}
325-
326-
// Update rays
327-
this->UpdateRay(edd->GetDevice());
328-
}
329-
330-
//----------------------------------------------------------------------------
331-
void vtkVirtualRealityViewInteractorStyle::OnSelect3D(vtkEventData* edata)
332-
{
333-
vtkEventDataDevice3D* bd = edata->GetAsEventDataDevice3D();
334-
if (!bd)
335-
{
336-
return;
337-
}
338-
339-
int x = this->Interactor->GetEventPosition()[0];
340-
int y = this->Interactor->GetEventPosition()[1];
341-
this->FindPokedRenderer(x, y);
342-
343-
decltype(this->InputMap)::key_type key(vtkCommand::Select3DEvent, bd->GetAction());
344-
auto it = this->InputMap.find(key);
345-
if (it == this->InputMap.end())
346-
{
347-
return;
348-
}
349-
350-
int state = it->second;
351-
352-
// if grab mode then convert event data into where the ray is intersecting geometry
353-
switch (bd->GetAction())
354-
{
355-
case vtkEventDataAction::Press:
356-
case vtkEventDataAction::Touch:
357-
this->StartAction(state, bd);
358-
break;
359-
case vtkEventDataAction::Release:
360-
case vtkEventDataAction::Untouch:
361-
this->EndAction(state, bd);
362-
break;
363-
default:
364-
break;
365-
}
366-
}
367-
368-
//------------------------------------------------------------------------------
369-
void vtkVirtualRealityViewInteractorStyle::OnViewerMovement3D(vtkEventData* edata)
370-
{
371-
if (this->Style == vtkVRInteractorStyle::FLY_STYLE)
372-
{
373-
this->Movement3D(VTKIS_DOLLY, edata);
374-
}
375-
else if (this->Style == vtkVRInteractorStyle::GROUNDED_STYLE)
376-
{
377-
this->Movement3D(VTKIS_GROUNDMOVEMENT, edata);
378-
}
379-
}
380-
381-
//------------------------------------------------------------------------------
382-
void vtkVirtualRealityViewInteractorStyle::Movement3D(int interactionState, vtkEventData* edata)
383-
{
384-
vtkEventDataDevice3D* edd = edata->GetAsEventDataDevice3D();
385-
if (!edd)
386-
{
387-
return;
388-
}
389-
390-
// Retrieve device type
391-
int idev = static_cast<int>(edd->GetDevice());
392-
393-
// Update current state
394-
int x = this->Interactor->GetEventPosition()[0];
395-
int y = this->Interactor->GetEventPosition()[1];
396-
this->FindPokedRenderer(x, y);
397-
398-
// Set current state and interaction prop
399-
this->InteractionProp = this->InteractionProps[idev];
400-
401-
double const* pos = edd->GetTrackPadPosition();
402-
403-
if (edd->GetAction() == vtkEventDataAction::Press)
404-
{
405-
this->StartAction(interactionState, edd);
406-
this->LastTrackPadPosition[0] = 0.0;
407-
this->LastTrackPadPosition[1] = 0.0;
408-
this->LastGroundMovementTrackPadPosition[0] = 0.0;
409-
this->LastGroundMovementTrackPadPosition[1] = 0.0;
410-
this->LastElevationTrackPadPosition[0] = 0.0;
411-
this->LastElevationTrackPadPosition[1] = 0.0;
412-
return;
413-
}
414-
415-
if (edd->GetAction() == vtkEventDataAction::Release)
416-
{
417-
this->EndAction(interactionState, edd);
418-
return;
419-
}
420-
421-
// If the input event is from a joystick and is away from the center then
422-
// call start. When the joystick returns to the center, call end.
423-
if ((edd->GetInput() == vtkEventDataDeviceInput::Joystick ||
424-
edd->GetInput() == vtkEventDataDeviceInput::TrackPad) &&
425-
this->InteractionState[idev] != interactionState && fabs(pos[1]) > 0.1)
426-
{
427-
this->StartAction(interactionState, edd);
428-
this->LastTrackPadPosition[0] = 0.0;
429-
this->LastTrackPadPosition[1] = 0.0;
430-
this->LastGroundMovementTrackPadPosition[0] = 0.0;
431-
this->LastGroundMovementTrackPadPosition[1] = 0.0;
432-
this->LastElevationTrackPadPosition[0] = 0.0;
433-
this->LastElevationTrackPadPosition[1] = 0.0;
434-
return;
435-
}
436-
437-
if (this->InteractionState[idev] == interactionState)
438-
{
439-
// Stop when returning to the center on the joystick
440-
if ((edd->GetInput() == vtkEventDataDeviceInput::Joystick ||
441-
edd->GetInput() == vtkEventDataDeviceInput::TrackPad) &&
442-
fabs(pos[1]) < 0.1)
443-
{
444-
this->EndAction(interactionState, edd);
445-
return;
446-
}
447-
448-
// Do the 3D movement corresponding to the interaction state
449-
switch (interactionState)
450-
{
451-
case VTKIS_DOLLY:
452-
this->Dolly3D(edd);
453-
break;
454-
case VTKIS_GROUNDMOVEMENT:
455-
this->GroundMovement3D(edd);
456-
break;
457-
case VTKIS_ELEVATION:
458-
this->Elevation3D(edd);
459-
break;
460-
default:
461-
break;
462-
}
463-
464-
this->InvokeEvent(vtkCommand::InteractionEvent, nullptr);
465-
return;
466-
}
467-
}
468-
469-
470259
//----------------------------------------------------------------------------
471260
// Interaction methods
472261
//----------------------------------------------------------------------------
@@ -823,115 +612,6 @@ int vtkVirtualRealityViewInteractorStyle::GetMappedAction(vtkCommand::EventIds e
823612
return VTKIS_NONE;
824613
}
825614

826-
//----------------------------------------------------------------------------
827-
void vtkVirtualRealityViewInteractorStyle::StartAction(int state, vtkEventDataDevice3D* edata)
828-
{
829-
switch (state)
830-
{
831-
case VTKIS_POSITION_PROP:
832-
this->StartPositionProp(edata);
833-
break;
834-
case VTKIS_DOLLY:
835-
this->StartMovement3D(state, edata);
836-
this->LastDolly3DEventTime->StartTimer();
837-
break;
838-
case VTKIS_GROUNDMOVEMENT:
839-
this->StartMovement3D(state, edata);
840-
this->LastGroundMovement3DEventTime->StartTimer();
841-
break;
842-
case VTKIS_ELEVATION:
843-
this->StartMovement3D(state, edata);
844-
this->LastElevation3DEventTime->StartTimer();
845-
break;
846-
case VTKIS_CLIP:
847-
this->StartClip(edata);
848-
break;
849-
case VTKIS_PICK:
850-
this->StartPick(edata);
851-
break;
852-
case VTKIS_LOAD_CAMERA_POSE:
853-
this->StartLoadCamPose(edata);
854-
break;
855-
case VTKIS_MENU:
856-
// Menu is only displayed upon action end (e.g. button release)
857-
break;
858-
default:
859-
vtkDebugMacro(<< "StartAction: unknown state " << state);
860-
break;
861-
}
862-
}
863-
864-
//----------------------------------------------------------------------------
865-
void vtkVirtualRealityViewInteractorStyle::EndAction(int state, vtkEventDataDevice3D* edata)
866-
{
867-
switch (state)
868-
{
869-
case VTKIS_POSITION_PROP:
870-
this->EndPositionProp(edata);
871-
break;
872-
case VTKIS_DOLLY:
873-
this->EndMovement3D(edata);
874-
this->LastDolly3DEventTime->StopTimer();
875-
break;
876-
case VTKIS_GROUNDMOVEMENT:
877-
this->EndMovement3D(edata);
878-
this->LastGroundMovement3DEventTime->StopTimer();
879-
break;
880-
case VTKIS_ELEVATION:
881-
this->EndMovement3D(edata);
882-
this->LastElevation3DEventTime->StopTimer();
883-
break;
884-
case VTKIS_CLIP:
885-
this->EndClip(edata);
886-
break;
887-
case VTKIS_PICK:
888-
this->EndPick(edata);
889-
break;
890-
case VTKIS_MENU:
891-
this->Menu->SetInteractor(this->Interactor);
892-
this->Menu->Show(edata);
893-
break;
894-
case VTKIS_LOAD_CAMERA_POSE:
895-
this->EndLoadCamPose(edata);
896-
break;
897-
case VTKIS_TOGGLE_DRAW_CONTROLS:
898-
this->ToggleDrawControls();
899-
break;
900-
case VTKIS_EXIT:
901-
if (this->Interactor)
902-
{
903-
this->Interactor->ExitCallback();
904-
}
905-
break;
906-
case VTKIS_TELEPORTATION:
907-
this->Teleportation3D(edata);
908-
break;
909-
case VTKIS_USCALE:
910-
this->EndUniformScale();
911-
break;
912-
default:
913-
vtkDebugMacro(<< "EndAction: unknown state " << state);
914-
break;
915-
}
916-
917-
// Reset complex gesture state because a button has been released
918-
for (int d = 0; d < vtkEventDataNumberOfDevices; ++d)
919-
{
920-
switch (this->InteractionState[d])
921-
{
922-
case VTKIS_PAN:
923-
case VTKIS_ZOOM:
924-
case VTKIS_ROTATE:
925-
this->InteractionState[d] = VTKIS_NONE;
926-
break;
927-
default:
928-
vtkDebugMacro(<< "EndAction: unknown interaction state " << d << ": "
929-
<< this->InteractionState[d]);
930-
break;
931-
}
932-
}
933-
}
934-
935615
//---------------------------------------------------------------------------
936616
vtkMRMLScene* vtkVirtualRealityViewInteractorStyle::GetMRMLScene()
937617
{

0 commit comments

Comments
 (0)