]> Creatis software - clitk.git/blobdiff - vv/vvInteractorStyleNavigator.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / vv / vvInteractorStyleNavigator.cxx
index 281067e36ffddbd20e84a8fad26bc11c20d5eb78..f3fc53befc9cc1e1edeec2d9093b3044d18dd5c6 100644 (file)
@@ -1,29 +1,20 @@
 /*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
- Program:   vv
- Module:    $RCSfile: vvInteractorStyleNavigator.cxx,v $
- Language:  C++
- Date:      $Date: 2010/01/06 13:31:57 $
- Version:   $Revision: 1.1 $
- Author :   Pierre Seroul (pierre.seroul@gmail.com)
+  Authors belong to:
+  - University of LYON              http://www.universite-lyon.fr/
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
+  - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
-Copyright (C) 2008
-Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
-CREATIS-LRMN http://www.creatis.insa-lyon.fr
+  This software is distributed WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+  PURPOSE.  See the copyright notices for more information.
 
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, version 3 of the License.
+  It is distributed under dual licence
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-=========================================================================*/
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+===========================================================================**/
 #include "vvInteractorStyleNavigator.h"
 
 #include "vtkAbstractPropPicker.h"
@@ -38,586 +29,555 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <vtkRendererCollection.h>
 #include "clitkCommon.h"
 
-
-vtkCxxRevisionMacro(vvInteractorStyleNavigator, "$Revision: 1.1 $");
 vtkStandardNewMacro(vvInteractorStyleNavigator);
 
 //----------------------------------------------------------------------------
 vvInteractorStyleNavigator::vvInteractorStyleNavigator()
 {
-    this->WindowLevelStartPosition[0]   = 0;
-    this->WindowLevelStartPosition[1]   = 0;
+  this->WindowLevelStartPosition[0]   = 0;
+  this->WindowLevelStartPosition[1]   = 0;
 
-    this->WindowLevelCurrentPosition[0] = 0;
-    this->WindowLevelCurrentPosition[1] = 0;
+  this->WindowLevelCurrentPosition[0] = 0;
+  this->WindowLevelCurrentPosition[1] = 0;
 
-    this->MotionFactor   = 10.0;
+  this->MotionFactor   = 10.0;
 }
 
 //----------------------------------------------------------------------------
 vvInteractorStyleNavigator::~vvInteractorStyleNavigator()
 {
-    CurrentRenderer=NULL;
+  CurrentRenderer=NULL;
 }
 
 void vvInteractorStyleNavigator::FindPokedRenderer(int dummy1,int dummy2)
 {
-    vtkRenderWindow * renwin=this->GetInteractor()->GetRenderWindow();
-    renwin->GetRenderers()->InitTraversal();
-    while (true)
-    {
-        vtkRenderer* current = renwin->GetRenderers()->GetNextItem();
-        if (current==NULL || current->GetDraw())
-        {
-            CurrentRenderer=current;
-            return;
-        }
-    }
+  vtkRenderWindow * renwin=this->GetInteractor()->GetRenderWindow();
+  renwin->GetRenderers()->InitTraversal();
+  while (true) {
+    vtkRenderer* current = renwin->GetRenderers()->GetNextItem();
+    if (current==NULL || current->GetDraw()) {
+      CurrentRenderer=current;
+      return;
+    }
+  }
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::StartWindowLevel()
 {
-    if (this->State != VTKIS_NONE)
-    {
-        return;
-    }
-    this->StartState(VTKIS_WINDOW_LEVEL);
-    this->InvokeEvent(vtkCommand::StartWindowLevelEvent,this);
+  if (this->State != VTKIS_NONE) {
+    return;
+  }
+  this->StartState(VTKIS_WINDOW_LEVEL);
+  this->InvokeEvent(vtkCommand::StartWindowLevelEvent,this);
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::EndWindowLevel()
 {
-    if (this->State != VTKIS_WINDOW_LEVEL)
-    {
-        return;
-    }
-    this->InvokeEvent(vtkCommand::EndWindowLevelEvent, this);
-    this->StopState();
+  if (this->State != VTKIS_WINDOW_LEVEL) {
+    return;
+  }
+  this->InvokeEvent(vtkCommand::EndWindowLevelEvent, this);
+  this->StopState();
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::StartPick()
 {
-    if (this->State != VTKIS_NONE)
-    {
-        return;
-    }
-    this->StartState(VTKIS_PICK);
-    this->InvokeEvent(vtkCommand::StartPickEvent, this);
+  if (this->State != VTKIS_NONE) {
+    return;
+  }
+  this->StartState(VTKIS_PICK_NEW);
+  this->InvokeEvent(vtkCommand::StartPickEvent, this);
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::EndPick()
 {
-    if (this->State != VTKIS_PICK)
-    {
-        return;
-    }
-    this->InvokeEvent(vtkCommand::EndPickEvent, this);
-    this->StopState();
+  if (this->State != VTKIS_PICK_NEW) {
+    return;
+  }
+  this->InvokeEvent(vtkCommand::EndPickEvent, this);
+  this->StopState();
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnMouseMove()
 {
-    int x = this->Interactor->GetEventPosition()[0];
-    int y = this->Interactor->GetEventPosition()[1];
-
-    switch (this->State)
-    {
-    case VTKIS_WINDOW_LEVEL:
-        this->FindPokedRenderer(x, y);
-        this->WindowLevel();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
-
-    case VTKIS_PICK:
-        this->FindPokedRenderer(x, y);
-        this->Pick();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
-
-    case VTKIS_PAN:
-        this->FindPokedRenderer(x, y);
-        this->Pan();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
-
-    case VTKIS_DOLLY:
-        this->FindPokedRenderer(x, y);
-        this->Dolly();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
-
-    default:
-        this->InvokeEvent(vtkCommand::UserEvent, NULL);
-        break;
-    }
+  int x = this->Interactor->GetEventPosition()[0];
+  int y = this->Interactor->GetEventPosition()[1];
+
+  switch (this->State) {
+  case VTKIS_WINDOW_LEVEL:
+    this->FindPokedRenderer(x, y);
+    this->WindowLevel();
+    this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+    break;
+
+  case VTKIS_PICK_NEW:
+    this->FindPokedRenderer(x, y);
+    this->Pick();
+    this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+    break;
+
+  case VTKIS_PAN:
+    this->FindPokedRenderer(x, y);
+    this->Pan();
+    this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+    break;
 
-    // Call parent to handle all other states and perform additional work
+  case VTKIS_DOLLY:
+    this->FindPokedRenderer(x, y);
+    this->Dolly();
+    this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+    break;
+
+  default:
+    this->InvokeEvent(vtkCommand::UserEvent, NULL);
+    break;
+  }
+
+  // Call parent to handle all other states and perform additional work
 
 }
 
 void vvInteractorStyleNavigator::OnEnter()
 {
-    //  int x = this->Interactor->GetEventPosition()[0];
-    //int y = this->Interactor->GetEventPosition()[1];
+  //  int x = this->Interactor->GetEventPosition()[0];
+  //int y = this->Interactor->GetEventPosition()[1];
 
-    switch (this->State)
-    {
-    case VTKIS_WINDOW_LEVEL:
-        break;
+  switch (this->State) {
+  case VTKIS_WINDOW_LEVEL:
+    break;
 
-    case VTKIS_PICK:
-        break;
+  case VTKIS_PICK_NEW:
+    break;
 
-    case VTKIS_PAN:
-        break;
+  case VTKIS_PAN:
+    break;
 
-    default:
-        this->InvokeEvent(vtkCommand::EnterEvent, NULL);
-        break;
-    }
+  default:
+    this->InvokeEvent(vtkCommand::EnterEvent, NULL);
+    break;
+  }
 
-    // Call parent to handle all other states and perform additional work
+  // Call parent to handle all other states and perform additional work
 
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnLeave()
 {
-    //  int x = this->Interactor->GetEventPosition()[0];
-    //int y = this->Interactor->GetEventPosition()[1];
+  //  int x = this->Interactor->GetEventPosition()[0];
+  //int y = this->Interactor->GetEventPosition()[1];
 
-    switch (this->State)
-    {
-    case VTKIS_WINDOW_LEVEL:
-        break;
+  switch (this->State) {
+  case VTKIS_WINDOW_LEVEL:
+    break;
 
-    case VTKIS_PICK:
-        break;
+  case VTKIS_PICK_NEW:
+    break;
 
-    case VTKIS_PAN:
-        break;
+  case VTKIS_PAN:
+    break;
 
-    default:
-        this->InvokeEvent(vtkCommand::LeaveEvent, NULL);
-        break;
-    }
+  default:
+    this->InvokeEvent(vtkCommand::LeaveEvent, NULL);
+    break;
+  }
 
-    // Call parent to handle all other states and perform additional work
+  // Call parent to handle all other states and perform additional work
 
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnRightButtonDown()
 {
-    int x = this->Interactor->GetEventPosition()[0];
-    int y = this->Interactor->GetEventPosition()[1];
-
-    this->FindPokedRenderer(x, y);
-    if (this->CurrentRenderer == NULL)
-    {
-        return;
-    }
-
-    // Redefine this button to handle window/level
-    this->GrabFocus(this->EventCallbackCommand);
-    if (!this->Interactor->GetShiftKey() && !this->Interactor->GetControlKey())
-    {
-        this->WindowLevelStartPosition[0] = x;
-        this->WindowLevelStartPosition[1] = y;
-        this->StartWindowLevel();
-    }
-
-    // The rest of the button + key combinations remain the same
-
-    else
-    {
-        this->Superclass::OnRightButtonDown();
-    }
+  int x = this->Interactor->GetEventPosition()[0];
+  int y = this->Interactor->GetEventPosition()[1];
+
+  this->FindPokedRenderer(x, y);
+  if (this->CurrentRenderer == NULL) {
+    return;
+  }
+
+  // Redefine this button to handle window/level
+  this->GrabFocus(this->EventCallbackCommand);
+  if (!this->Interactor->GetShiftKey() && !this->Interactor->GetControlKey()) {
+    this->WindowLevelStartPosition[0] = x;
+    this->WindowLevelStartPosition[1] = y;
+    this->StartWindowLevel();
+  }
+
+  // The rest of the button + key combinations remain the same
+
+  else {
+    this->Superclass::OnRightButtonDown();
+  }
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnRightButtonUp()
 {
-    switch (this->State)
-    {
-    case VTKIS_WINDOW_LEVEL:
-        this->EndWindowLevel();
-        if ( this->Interactor )
-        {
-            this->ReleaseFocus();
-        }
-        break;
+  switch (this->State) {
+  case VTKIS_WINDOW_LEVEL:
+    this->EndWindowLevel();
+    if ( this->Interactor ) {
+      this->ReleaseFocus();
     }
+    break;
+  }
 
-    // Call parent to handle all other states and perform additional work
+  // Call parent to handle all other states and perform additional work
 
-    this->Superclass::OnRightButtonUp();
+  this->Superclass::OnRightButtonUp();
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnLeftButtonDown()
 {
-    int x = this->Interactor->GetEventPosition()[0];
-    int y = this->Interactor->GetEventPosition()[1];
-
-    this->FindPokedRenderer(x, y);
-    if (this->CurrentRenderer == NULL)
-    {
-        return;
-    }
-
-    // Redefine this button to handle pick
-    this->GrabFocus(this->EventCallbackCommand);
-    if (!this->Interactor->GetShiftKey() && !this->Interactor->GetControlKey())
-    {
-        this->StartPick();
-    }
-
-    // The rest of the button + key combinations remain the same
-
-    else
-    {
-        this->Superclass::OnLeftButtonDown();
-    }
+  int x = this->Interactor->GetEventPosition()[0];
+  int y = this->Interactor->GetEventPosition()[1];
+
+  this->FindPokedRenderer(x, y);
+  if (this->CurrentRenderer == NULL) {
+    return;
+  }
+
+  // Redefine this button to handle pick
+  this->GrabFocus(this->EventCallbackCommand);
+  if (this->Interactor->GetShiftKey()) {
+    this->OnMiddleButtonDown();
+  }
+  else if (!this->Interactor->GetControlKey()) {
+    this->StartPick();
+  }
+
+  // The rest of the button + key combinations remain the same
+
+  else {
+    this->Superclass::OnLeftButtonDown();
+  }
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnLeftButtonUp()
 {
-    switch (this->State)
-    {
-    case VTKIS_PICK:
-        this->EndPick();
-        if ( this->Interactor )
-        {
-            this->ReleaseFocus();
-        }
-        break;
-    }
-
-    // Call parent to handle all other states and perform additional work
-
-    this->Superclass::OnLeftButtonUp();
+  //  DD("OnLeftButtonUp");
+  switch (this->State) {
+  case VTKIS_PICK_NEW:
+    this->EndPick();
+    if ( this->Interactor ) {
+      this->ReleaseFocus();
+    }
+    break;
+  case VTKIS_PAN:
+    this->OnMiddleButtonUp();
+    break;
+  }
+
+  // Call parent to handle all other states and perform additional work
+
+  this->Superclass::OnLeftButtonUp();
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnMiddleButtonDown()
 {
-    this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
-                            this->Interactor->GetEventPosition()[1]);
-    if (this->CurrentRenderer == NULL)
-    {
-        return;
-    }
-    this->CurrentRenderer->GetRenderWindow()->SetCurrentCursor(8);
-    this->GrabFocus(this->EventCallbackCommand);
-    this->StartPan();
+  this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
+                          this->Interactor->GetEventPosition()[1]);
+  if (this->CurrentRenderer == NULL) {
+    return;
+  }
+  this->CurrentRenderer->GetRenderWindow()->SetCurrentCursor(8);
+  this->GrabFocus(this->EventCallbackCommand);
+  this->StartPan();
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnMiddleButtonUp()
 {
-    switch (this->State)
-    {
-    case VTKIS_PAN:
-        this->EndPan();
-        if ( this->Interactor )
-        {
-            this->Interactor->GetRenderWindow()->SetCurrentCursor(0);
-            this->ReleaseFocus();
-        }
-        break;
-    }
+  switch (this->State) {
+  case VTKIS_PAN:
+    this->EndPan();
+    if ( this->Interactor ) {
+      this->Interactor->GetRenderWindow()->SetCurrentCursor(0);
+      this->ReleaseFocus();
+    }
+    break;
+  }
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnChar()
 {
-    vtkRenderWindowInteractor *rwi = this->Interactor;
-
-    switch (rwi->GetKeyCode())
-    {
-    case 'f' :
-    case 'F' :
-    {
-        this->AnimState = VTKIS_ANIM_ON;
-        this->AnimState = VTKIS_ANIM_OFF;
-        break;
-    }
-
-    case 'w'  :
-    case 'W'  :
-    {
-        this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
-                                this->Interactor->GetEventPosition()[1]);
-        if (this->CurrentRenderer == NULL)
-        {
-            return;
-        }
-        this->GrabFocus(this->EventCallbackCommand);
-        this->StartDolly();
-        double factor = -2;
-        this->Dolly(pow((double)1.1, factor));
-        this->EndDolly();
-        this->ReleaseFocus();
-        break;
-    }
-    case 'x'  :
-    case 'X'  :
-    {
-        this->FindPokedRenderer(rwi->GetEventPosition()[0],
-                                rwi->GetEventPosition()[1]);
-        if (this->CurrentRenderer == NULL)
-        {
-            return;
-        }
-        this->GrabFocus(this->EventCallbackCommand);
-        this->StartDolly();
-        double factor = 2;
-        this->Dolly(pow((double)1.1, factor));
-        this->EndDolly();
-        this->ReleaseFocus();
-        break;
+  vtkRenderWindowInteractor *rwi = this->Interactor;
+
+  switch (rwi->GetKeyCode()) {
+  case 'f' :
+  case 'F' : {
+    this->AnimState = VTKIS_ANIM_ON;
+    this->AnimState = VTKIS_ANIM_OFF;
+    break;
+  }
+
+  case 'o'  :
+  case 'O'  : {
+    this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
+                            this->Interactor->GetEventPosition()[1]);
+    if (this->CurrentRenderer == NULL) {
+      return;
     }
-    case '3' :
-        // Disable StereoVision
-        break;
-    case 'r' :
-    case 'R' :
-        //Do nothing, this is handled in vvSlicerManagerCommand
-        break;
-    default:
-        this->Superclass::OnChar();
-        break;
+    this->GrabFocus(this->EventCallbackCommand);
+    this->StartDolly();
+    double factor = -2;
+    this->Dolly(pow((double)1.1, factor));
+    this->EndDolly();
+    this->ReleaseFocus();
+    break;
+  }
+  case 'i'  :
+  case 'I'  : {
+    this->FindPokedRenderer(rwi->GetEventPosition()[0],
+                            rwi->GetEventPosition()[1]);
+    if (this->CurrentRenderer == NULL) {
+      return;
     }
+    this->GrabFocus(this->EventCallbackCommand);
+    this->StartDolly();
+    double factor = 2;
+    this->Dolly(pow((double)1.1, factor));
+    this->EndDolly();
+    this->ReleaseFocus();
+    break;
+  }
+  case '3' :
+    // Disable StereoVision
+    break;
+  case 'r' :
+  case 'R' :
+    //Do nothing, this is handled in vvSlicerManagerCommand
+    break;
+  default:
+    //SR: we don't use the default vtk keys => removed to avoid conflicts
+    //this->Superclass::OnChar();
+    break;
+  }
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnMouseWheelForward()
 {
-    this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
-                            this->Interactor->GetEventPosition()[1]);
-    if (this->CurrentRenderer == NULL)
-    {
-        return;
-    }
-    this->GrabFocus(this->EventCallbackCommand);
-    if (this->Interactor->GetControlKey())
-    {
-        this->StartDolly();
-        double factor = this->MotionFactor * 0.2 * this->MouseWheelMotionFactor;
-        this->Dolly(pow((double)1.1, factor));
-        this->EndDolly();
-    }
-    this->ReleaseFocus();
-    this->InvokeEvent(vtkCommand::MouseWheelForwardEvent, this);
+  this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
+                          this->Interactor->GetEventPosition()[1]);
+  if (this->CurrentRenderer == NULL) {
+    return;
+  }
+  this->GrabFocus(this->EventCallbackCommand);
+  if (this->Interactor->GetControlKey()) {
+    this->StartDolly();
+    double factor = this->MotionFactor * 0.2 * this->MouseWheelMotionFactor;
+    this->Dolly(pow((double)1.1, factor));
+    this->EndDolly();
+  }
+  this->ReleaseFocus();
+  this->InvokeEvent(vtkCommand::MouseWheelForwardEvent, this);
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::OnMouseWheelBackward()
 {
-    this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
-                            this->Interactor->GetEventPosition()[1]);
-    if (this->CurrentRenderer == NULL)
-    {
-        return;
-    }
-
-    this->GrabFocus(this->EventCallbackCommand);
-    if (this->Interactor->GetControlKey())
-    {
-        this->StartDolly();
-        double factor = this->MotionFactor * -0.2 * this->MouseWheelMotionFactor;
-        this->Dolly(pow((double)1.1, factor));
-        this->EndDolly();
-    }
-    this->ReleaseFocus();
-    this->InvokeEvent(vtkCommand::MouseWheelBackwardEvent, this);
+  this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
+                          this->Interactor->GetEventPosition()[1]);
+  if (this->CurrentRenderer == NULL) {
+    return;
+  }
+
+  this->GrabFocus(this->EventCallbackCommand);
+  if (this->Interactor->GetControlKey()) {
+    this->StartDolly();
+    double factor = this->MotionFactor * -0.2 * this->MouseWheelMotionFactor;
+    this->Dolly(pow((double)1.1, factor));
+    this->EndDolly();
+  }
+  this->ReleaseFocus();
+  this->InvokeEvent(vtkCommand::MouseWheelBackwardEvent, this);
 }
 
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::WindowLevel()
 {
-    vtkRenderWindowInteractor *rwi = this->Interactor;
+  vtkRenderWindowInteractor *rwi = this->Interactor;
 
-    this->WindowLevelCurrentPosition[0] = rwi->GetEventPosition()[0];
-    this->WindowLevelCurrentPosition[1] = rwi->GetEventPosition()[1];
+  this->WindowLevelCurrentPosition[0] = rwi->GetEventPosition()[0];
+  this->WindowLevelCurrentPosition[1] = rwi->GetEventPosition()[1];
 
-    this->InvokeEvent(vtkCommand::WindowLevelEvent, this);
+  this->InvokeEvent(vtkCommand::WindowLevelEvent, this);
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::Pick()
 {
-    this->InvokeEvent(vtkCommand::PickEvent, this);
+  this->InvokeEvent(vtkCommand::PickEvent, this);
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::Pan()
 {
-    if (this->CurrentRenderer == NULL)
-    {
-        return;
-    }
+  if (this->CurrentRenderer == NULL) {
+    return;
+  }
 
-    vtkRenderWindowInteractor *rwi = this->Interactor;
+  vtkRenderWindowInteractor *rwi = this->Interactor;
 
-    double viewFocus[4], focalDepth, viewPoint[3];
-    double newPickPoint[4], oldPickPoint[4], motionVector[3];
+  double viewFocus[4], focalDepth, viewPoint[3];
+  double newPickPoint[4], oldPickPoint[4], motionVector[3];
 
-    // Calculate the focal depth since we'll be using it a lot
+  // Calculate the focal depth since we'll be using it a lot
 
-    vtkCamera *camera = this->CurrentRenderer->GetActiveCamera();
-    camera->GetFocalPoint(viewFocus);
-    this->ComputeWorldToDisplay(viewFocus[0], viewFocus[1], viewFocus[2],
-                                viewFocus);
-    focalDepth = viewFocus[2];
+  vtkCamera *camera = this->CurrentRenderer->GetActiveCamera();
+  camera->GetFocalPoint(viewFocus);
+  this->ComputeWorldToDisplay(viewFocus[0], viewFocus[1], viewFocus[2],
+                              viewFocus);
+  focalDepth = viewFocus[2];
 
-    this->ComputeDisplayToWorld((double)rwi->GetEventPosition()[0],
-                                (double)rwi->GetEventPosition()[1],
-                                focalDepth,
-                                newPickPoint);
+  this->ComputeDisplayToWorld((double)rwi->GetEventPosition()[0],
+                              (double)rwi->GetEventPosition()[1],
+                              focalDepth,
+                              newPickPoint);
 
-    // Has to recalc old mouse point since the viewport has moved,
-    // so can't move it outside the loop
+  // Has to recalc old mouse point since the viewport has moved,
+  // so can't move it outside the loop
 
-    this->ComputeDisplayToWorld((double)rwi->GetLastEventPosition()[0],
-                                (double)rwi->GetLastEventPosition()[1],
-                                focalDepth,
-                                oldPickPoint);
+  this->ComputeDisplayToWorld((double)rwi->GetLastEventPosition()[0],
+                              (double)rwi->GetLastEventPosition()[1],
+                              focalDepth,
+                              oldPickPoint);
 
-    // Camera motion is reversed
+  // Camera motion is reversed
 
-    motionVector[0] = oldPickPoint[0] - newPickPoint[0];
-    motionVector[1] = oldPickPoint[1] - newPickPoint[1];
-    motionVector[2] = oldPickPoint[2] - newPickPoint[2];
+  motionVector[0] = oldPickPoint[0] - newPickPoint[0];
+  motionVector[1] = oldPickPoint[1] - newPickPoint[1];
+  motionVector[2] = oldPickPoint[2] - newPickPoint[2];
 
-    camera->GetFocalPoint(viewFocus);
-    camera->GetPosition(viewPoint);
-    camera->SetFocalPoint(motionVector[0] + viewFocus[0],
-                          motionVector[1] + viewFocus[1],
-                          motionVector[2] + viewFocus[2]);
+  camera->GetFocalPoint(viewFocus);
+  camera->GetPosition(viewPoint);
+  camera->SetFocalPoint(motionVector[0] + viewFocus[0],
+                        motionVector[1] + viewFocus[1],
+                        motionVector[2] + viewFocus[2]);
 
-    camera->SetPosition(motionVector[0] + viewPoint[0],
-                        motionVector[1] + viewPoint[1],
-                        motionVector[2] + viewPoint[2]);
+  camera->SetPosition(motionVector[0] + viewPoint[0],
+                      motionVector[1] + viewPoint[1],
+                      motionVector[2] + viewPoint[2]);
 
-    if (rwi->GetLightFollowCamera())
-    {
-        this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
-    }
+  if (rwi->GetLightFollowCamera()) {
+    this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
+  }
 
-    rwi->Render();
+  this->InvokeEvent(vtkCommand::EndInteractionEvent, this);
+
+//  rwi->Render();
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::Dolly()
 {
-    if (this->CurrentRenderer == NULL)
-    {
-        return;
-    }
-
-    vtkRenderWindowInteractor *rwi = this->Interactor;
-    double *center = this->CurrentRenderer->GetCenter();
-    int dy = rwi->GetEventPosition()[1] - rwi->GetLastEventPosition()[1];
-    double dyf = this->MotionFactor * (double)(dy) / (double)(center[1]);
-    this->Dolly(pow((double)1.1, dyf));
+  if (this->CurrentRenderer == NULL) {
+    return;
+  }
+
+  vtkRenderWindowInteractor *rwi = this->Interactor;
+  double *center = this->CurrentRenderer->GetCenter();
+  int dy = rwi->GetEventPosition()[1] - rwi->GetLastEventPosition()[1];
+  double dyf = this->MotionFactor * (double)(dy) / (double)(center[1]);
+  this->Dolly(pow((double)1.1, dyf));
 }
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::Dolly(double factor)
 {
-    if (this->CurrentRenderer == NULL)
-    {
-        return;
-    }
-
-    double viewFocus[4],viewPoint[4],motionVector[3], focalDepth;
-    double oldPos[3], newPos[3], distance[2];
-    vtkCamera *camera = this->CurrentRenderer->GetActiveCamera();
-    camera->GetFocalPoint(viewFocus);
-    this->ComputeWorldToDisplay(viewFocus[0], viewFocus[1], viewFocus[2],
-                                viewFocus);
-    focalDepth = viewFocus[2];
-
-    oldPos[0] = this->CurrentRenderer->GetCenter()[0];
-    oldPos[1] = this->CurrentRenderer->GetCenter()[1];
-    oldPos[2] = focalDepth;
-
-    distance[0] = 1/factor*
-                  (this->Interactor->GetEventPosition()[0]-this->CurrentRenderer->GetCenter()[0]);
-    distance[1] = 1/factor*
-                  (this->Interactor->GetEventPosition()[1]-this->CurrentRenderer->GetCenter()[1]);
-
-    newPos[0] = this->Interactor->GetEventPosition()[0] - distance[0];
-    newPos[1] = this->Interactor->GetEventPosition()[1] - distance[1];
-    newPos[2] = focalDepth;
-
-    this->CurrentRenderer->DisplayToNormalizedDisplay(oldPos[0],oldPos[1]);
-    this->CurrentRenderer->NormalizedDisplayToViewport(oldPos[0],oldPos[1]);
-    this->CurrentRenderer->ViewportToNormalizedViewport(oldPos[0],oldPos[1]);
-    this->CurrentRenderer->NormalizedViewportToView(oldPos[0],oldPos[1],oldPos[2]);
-    this->CurrentRenderer->ViewToWorld(oldPos[0],oldPos[1],oldPos[2]);
-
-    this->CurrentRenderer->DisplayToNormalizedDisplay(newPos[0],newPos[1]);
-    this->CurrentRenderer->NormalizedDisplayToViewport(newPos[0],newPos[1]);
-    this->CurrentRenderer->ViewportToNormalizedViewport(newPos[0],newPos[1]);
-    this->CurrentRenderer->NormalizedViewportToView(newPos[0],newPos[1],newPos[2]);
-    this->CurrentRenderer->ViewToWorld(newPos[0],newPos[1],newPos[2]);
-
-    motionVector[0] = newPos[0] - oldPos[0];
-    motionVector[1] = newPos[1] - oldPos[1];
-    motionVector[2] = newPos[2] - oldPos[2];
-
-    camera->GetFocalPoint(viewFocus);
-    camera->GetPosition(viewPoint);
-    camera->SetFocalPoint(motionVector[0] + viewFocus[0],
-                          motionVector[1] + viewFocus[1],
-                          motionVector[2] + viewFocus[2]);
-
-    camera->SetPosition(motionVector[0] + viewPoint[0],
-                        motionVector[1] + viewPoint[1],
-                        motionVector[2] + viewPoint[2]);
-
-    if (camera->GetParallelProjection())
-    {
-        camera->SetParallelScale(camera->GetParallelScale() / factor);
-    }
-    else
-    {
-        camera->Dolly(factor);
-        if (this->AutoAdjustCameraClippingRange)
-        {
-            this->CurrentRenderer->ResetCameraClippingRange();
-        }
-    }
-
-    if (this->Interactor->GetLightFollowCamera())
-    {
-        this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
-    }
-    this->CurrentRenderer->ResetCameraClippingRange();
-    //this->Interactor->Render();
+  if (this->CurrentRenderer == NULL) {
+    return;
+  }
+
+  double viewFocus[4],viewPoint[4],motionVector[3], focalDepth;
+  double oldPos[3], newPos[3], distance[2];
+  vtkCamera *camera = this->CurrentRenderer->GetActiveCamera();
+  camera->GetFocalPoint(viewFocus);
+  this->ComputeWorldToDisplay(viewFocus[0], viewFocus[1], viewFocus[2],
+                              viewFocus);
+  focalDepth = viewFocus[2];
+
+  oldPos[0] = this->CurrentRenderer->GetCenter()[0];
+  oldPos[1] = this->CurrentRenderer->GetCenter()[1];
+  oldPos[2] = focalDepth;
+
+  distance[0] = 1/factor*
+                (this->Interactor->GetEventPosition()[0]-this->CurrentRenderer->GetCenter()[0]);
+  distance[1] = 1/factor*
+                (this->Interactor->GetEventPosition()[1]-this->CurrentRenderer->GetCenter()[1]);
+
+  newPos[0] = this->Interactor->GetEventPosition()[0] - distance[0];
+  newPos[1] = this->Interactor->GetEventPosition()[1] - distance[1];
+  newPos[2] = focalDepth;
+
+  this->CurrentRenderer->DisplayToNormalizedDisplay(oldPos[0],oldPos[1]);
+  this->CurrentRenderer->NormalizedDisplayToViewport(oldPos[0],oldPos[1]);
+  this->CurrentRenderer->ViewportToNormalizedViewport(oldPos[0],oldPos[1]);
+  this->CurrentRenderer->NormalizedViewportToView(oldPos[0],oldPos[1],oldPos[2]);
+  this->CurrentRenderer->ViewToWorld(oldPos[0],oldPos[1],oldPos[2]);
+
+  this->CurrentRenderer->DisplayToNormalizedDisplay(newPos[0],newPos[1]);
+  this->CurrentRenderer->NormalizedDisplayToViewport(newPos[0],newPos[1]);
+  this->CurrentRenderer->ViewportToNormalizedViewport(newPos[0],newPos[1]);
+  this->CurrentRenderer->NormalizedViewportToView(newPos[0],newPos[1],newPos[2]);
+  this->CurrentRenderer->ViewToWorld(newPos[0],newPos[1],newPos[2]);
+
+  motionVector[0] = newPos[0] - oldPos[0];
+  motionVector[1] = newPos[1] - oldPos[1];
+  motionVector[2] = newPos[2] - oldPos[2];
+
+  camera->GetFocalPoint(viewFocus);
+  camera->GetPosition(viewPoint);
+  camera->SetFocalPoint(motionVector[0] + viewFocus[0],
+                        motionVector[1] + viewFocus[1],
+                        motionVector[2] + viewFocus[2]);
+
+  camera->SetPosition(motionVector[0] + viewPoint[0],
+                      motionVector[1] + viewPoint[1],
+                      motionVector[2] + viewPoint[2]);
+
+  if (camera->GetParallelProjection()) {
+    camera->SetParallelScale(camera->GetParallelScale() / factor);
+  } else {
+    camera->Dolly(factor);
+    if (this->AutoAdjustCameraClippingRange) {
+      this->CurrentRenderer->ResetCameraClippingRange();
+    }
+  }
+
+  if (this->Interactor->GetLightFollowCamera()) {
+    this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
+  }
+  this->CurrentRenderer->ResetCameraClippingRange();
+  //this->Interactor->Render();
+
+  this->InvokeEvent(vtkCommand::EndInteractionEvent, this);
 }
 
 
 //----------------------------------------------------------------------------
 void vvInteractorStyleNavigator::PrintSelf(ostream& os, vtkIndent indent)
 {
-    this->Superclass::PrintSelf(os, indent);
+  this->Superclass::PrintSelf(os, indent);
 
-    os << indent << "Window Level Current Position: ("
-    << this->WindowLevelCurrentPosition[0] << ", "
-    << this->WindowLevelCurrentPosition[1] << ")" << endl;
+  os << indent << "Window Level Current Position: ("
+     << this->WindowLevelCurrentPosition[0] << ", "
+     << this->WindowLevelCurrentPosition[1] << ")" << endl;
 
-    os << indent << "Window Level Start Position: ("
-    << this->WindowLevelStartPosition[0] << ", "
-    << this->WindowLevelStartPosition[1] << ")" << endl;
+  os << indent << "Window Level Start Position: ("
+     << this->WindowLevelStartPosition[0] << ", "
+     << this->WindowLevelStartPosition[1] << ")" << endl;
 }