Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

269 lines
8.6 KiB

2 years ago
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkInteractorStyleSwitch.cxx,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkInteractorStyleSwitch.h"
#include "vtkCallbackCommand.h"
#include "vtkCommand.h"
#include "vtkInteractorStyleJoystickActor.h"
#include "vtkInteractorStyleJoystickCamera.h"
#include "vtkInteractorStyleTrackballActor.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkObjectFactory.h"
#include "vtkRenderWindowInteractor.h"
vtkCxxRevisionMacro(vtkInteractorStyleSwitch, "$Revision: 1.24 $");
vtkStandardNewMacro(vtkInteractorStyleSwitch);
//----------------------------------------------------------------------------
vtkInteractorStyleSwitch::vtkInteractorStyleSwitch()
{
this->JoystickActor = vtkInteractorStyleJoystickActor::New();
this->JoystickCamera = vtkInteractorStyleJoystickCamera::New();
this->TrackballActor = vtkInteractorStyleTrackballActor::New();
this->TrackballCamera = vtkInteractorStyleTrackballCamera::New();
this->JoystickOrTrackball = VTKIS_JOYSTICK;
this->CameraOrActor = VTKIS_CAMERA;
this->CurrentStyle = 0;
}
//----------------------------------------------------------------------------
vtkInteractorStyleSwitch::~vtkInteractorStyleSwitch()
{
this->JoystickActor->Delete();
this->JoystickActor = NULL;
this->JoystickCamera->Delete();
this->JoystickCamera = NULL;
this->TrackballActor->Delete();
this->TrackballActor = NULL;
this->TrackballCamera->Delete();
this->TrackballCamera = NULL;
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::SetAutoAdjustCameraClippingRange( int value )
{
if ( value == this->AutoAdjustCameraClippingRange )
{
return;
}
if ( value < 0 || value > 1 )
{
vtkErrorMacro("Value must be between 0 and 1 for" <<
" SetAutoAdjustCameraClippingRange");
return;
}
this->AutoAdjustCameraClippingRange = value;
this->JoystickActor->SetAutoAdjustCameraClippingRange( value );
this->JoystickCamera->SetAutoAdjustCameraClippingRange( value );
this->TrackballActor->SetAutoAdjustCameraClippingRange( value );
this->TrackballCamera->SetAutoAdjustCameraClippingRange( value );
this->Modified();
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::SetCurrentStyleToJoystickActor()
{
this->JoystickOrTrackball = VTKIS_JOYSTICK;
this->CameraOrActor = VTKIS_ACTOR;
this->SetCurrentStyle();
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::SetCurrentStyleToJoystickCamera()
{
this->JoystickOrTrackball = VTKIS_JOYSTICK;
this->CameraOrActor = VTKIS_CAMERA;
this->SetCurrentStyle();
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::SetCurrentStyleToTrackballActor()
{
this->JoystickOrTrackball = VTKIS_TRACKBALL;
this->CameraOrActor = VTKIS_ACTOR;
this->SetCurrentStyle();
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::SetCurrentStyleToTrackballCamera()
{
this->JoystickOrTrackball = VTKIS_TRACKBALL;
this->CameraOrActor = VTKIS_CAMERA;
this->SetCurrentStyle();
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::OnChar()
{
switch (this->Interactor->GetKeyCode())
{
case 'j':
case 'J':
this->JoystickOrTrackball = VTKIS_JOYSTICK;
this->EventCallbackCommand->SetAbortFlag(1);
break;
case 't':
case 'T':
this->JoystickOrTrackball = VTKIS_TRACKBALL;
this->EventCallbackCommand->SetAbortFlag(1);
break;
case 'c':
case 'C':
this->CameraOrActor = VTKIS_CAMERA;
this->EventCallbackCommand->SetAbortFlag(1);
break;
case 'a':
case 'A':
this->CameraOrActor = VTKIS_ACTOR;
this->EventCallbackCommand->SetAbortFlag(1);
break;
}
// Set the CurrentStyle pointer to the picked style
this->SetCurrentStyle();
}
//----------------------------------------------------------------------------
// this will do nothing if the CurrentStyle matchs
// JoystickOrTrackball and CameraOrActor
// It should! If the this->Interactor was changed (using SetInteractor()),
// and the currentstyle should not change.
void vtkInteractorStyleSwitch::SetCurrentStyle()
{
// if the currentstyle does not match JoystickOrTrackball
// and CameraOrActor ivars, then call SetInteractor(0)
// on the Currentstyle to remove all of the observers.
// Then set the Currentstyle and call SetInteractor with
// this->Interactor so the callbacks are set for the
// currentstyle.
if (this->JoystickOrTrackball == VTKIS_JOYSTICK &&
this->CameraOrActor == VTKIS_CAMERA)
{
if(this->CurrentStyle != this->JoystickCamera)
{
if(this->CurrentStyle)
{
this->CurrentStyle->SetInteractor(0);
}
this->CurrentStyle = this->JoystickCamera;
}
}
else if (this->JoystickOrTrackball == VTKIS_JOYSTICK &&
this->CameraOrActor == VTKIS_ACTOR)
{
if(this->CurrentStyle != this->JoystickActor)
{
if(this->CurrentStyle)
{
this->CurrentStyle->SetInteractor(0);
}
this->CurrentStyle = this->JoystickActor;
}
}
else if (this->JoystickOrTrackball == VTKIS_TRACKBALL &&
this->CameraOrActor == VTKIS_CAMERA)
{
if(this->CurrentStyle != this->TrackballCamera)
{
if(this->CurrentStyle)
{
this->CurrentStyle->SetInteractor(0);
}
this->CurrentStyle = this->TrackballCamera;
}
}
else if (this->JoystickOrTrackball == VTKIS_TRACKBALL &&
this->CameraOrActor == VTKIS_ACTOR)
{
if(this->CurrentStyle != this->TrackballActor)
{
if(this->CurrentStyle)
{
this->CurrentStyle->SetInteractor(0);
}
this->CurrentStyle = this->TrackballActor;
}
}
if (this->CurrentStyle)
{
this->CurrentStyle->SetInteractor(this->Interactor);
}
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::SetInteractor(vtkRenderWindowInteractor *iren)
{
if(iren == this->Interactor)
{
return;
}
// if we already have an Interactor then stop observing it
if(this->Interactor)
{
this->Interactor->RemoveObserver(this->EventCallbackCommand);
}
this->Interactor = iren;
// add observers for each of the events handled in ProcessEvents
if(iren)
{
iren->AddObserver(vtkCommand::CharEvent,
this->EventCallbackCommand,
this->Priority);
iren->AddObserver(vtkCommand::DeleteEvent,
this->EventCallbackCommand,
this->Priority);
}
this->SetCurrentStyle();
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os,indent);
os << indent << "CurrentStyle " << this->CurrentStyle << "\n";
if (this->CurrentStyle)
{
vtkIndent next_indent = indent.GetNextIndent();
os << next_indent << this->CurrentStyle->GetClassName() << "\n";
this->CurrentStyle->PrintSelf(os, indent.GetNextIndent());
}
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::SetDefaultRenderer(vtkRenderer* renderer)
{
this->vtkInteractorStyle::SetDefaultRenderer(renderer);
this->JoystickActor->SetDefaultRenderer(renderer);
this->JoystickCamera->SetDefaultRenderer(renderer);
this->TrackballActor->SetDefaultRenderer(renderer);
this->TrackballCamera->SetDefaultRenderer(renderer);
}
//----------------------------------------------------------------------------
void vtkInteractorStyleSwitch::SetCurrentRenderer(vtkRenderer* renderer)
{
this->vtkInteractorStyle::SetCurrentRenderer(renderer);
this->JoystickActor->SetCurrentRenderer(renderer);
this->JoystickCamera->SetCurrentRenderer(renderer);
this->TrackballActor->SetCurrentRenderer(renderer);
this->TrackballCamera->SetCurrentRenderer(renderer);
}