]> Creatis software - clitk.git/blobdiff - vv/vvSlicerManagerCommand.cxx
- add end of pick event
[clitk.git] / vv / vvSlicerManagerCommand.cxx
index 32ef0593eaa09dbb3ae6cebe2e79de069ac18130..0415c9e8934fe6b98fe6848b37e8ef01445c2776 100644 (file)
@@ -1,41 +1,35 @@
 /*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-Program:   vv
-Language:  C++
-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://oncora1.lyon.fnclcc.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 "vvSlicerManagerCommand.h"
 #include "vvSlicerManager.h"
 
-#include "vtkTextProperty.h"
-#include "vtkRenderer.h"
-#include "vtkImageActor.h"
-#include "vtkRenderWindowInteractor.h"
-#include "vtkPropPicker.h"
-#include "vtkCamera.h"
-#include "vtkImageMapToWindowLevelColors.h"
-#include "vtkLookupTable.h"
-#include "vtkMath.h"
-#include "vtkAbstractPropPicker.h"
-#include "vtkAssemblyPath.h"
-#include "vtkCornerAnnotation.h"
+#include <vtkTextProperty.h>
+#include <vtkRenderer.h>
+#include <vtkImageActor.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkPropPicker.h>
+#include <vtkCamera.h>
+#include <vtkImageMapToWindowLevelColors.h>
+#include <vtkLookupTable.h>
+#include <vtkMath.h>
+#include <vtkAbstractPropPicker.h>
+#include <vtkAssemblyPath.h>
+#include <vtkCornerAnnotation.h>
 #include <vtkRenderWindow.h>
 
 #include "vvSlicer.h"
@@ -69,8 +63,8 @@ int vvSlicerManagerCommand::FindSlicerNumber(vtkRenderWindow* renwin)
 
 //------------------------------------------------------------------------------
 void vvSlicerManagerCommand::Execute(vtkObject *caller,
-        unsigned long event,
-        void *vtkNotUsed(callData))
+                                     unsigned long event,
+                                     void *vtkNotUsed(callData))
 {
     //KeyPress event
     vvInteractorStyleNavigator *isi =
@@ -83,7 +77,7 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
 
         int VisibleInWindow = this->FindSlicerNumber(isi->GetInteractor()->GetRenderWindow());
         vtkRenderer* renderer=NULL;
-        if (VisibleInWindow>-1) 
+        if (VisibleInWindow>-1)
             renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer();
         newLandmark = false;
 
@@ -103,15 +97,24 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
             if (event == vtkCommand::KeyPressEvent)
             {
                 std::string KeyPress = isi->GetInteractor()->GetKeySym();
+                if (KeyPress == "Tab")
+                {
+                    if(isi->GetInteractor()->GetShiftKey())
+                        this->SM->PrevImage(VisibleInWindow);
+                    else
+                        this->SM->NextImage(VisibleInWindow);
+                    return;
+                }
                 if (KeyPress == "f" || KeyPress == "F")
                 {
                     FlyToPosition(isi->GetInteractor(),this->SM->GetSlicer(VisibleInWindow));
+                    return;
+                }
+                if (KeyPress == "w")
+                {
+                    this->SM->SetLocalColorWindowing(VisibleInWindow);
+                    return;
                 }
-               if (KeyPress == "z")
-               {
-                   this->SM->SetLocalColorWindowing(VisibleInWindow);
-                  return;
-               }
                 if (KeyPress == "0")
                 {
                     this->SM->SetPreset(0);
@@ -187,13 +190,13 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
                     this->SM->UpdateWindowLevel();
                     return;
                 }
-                if (KeyPress == "u")
+                if (KeyPress == "c")
                 {
                     this->SM->ToggleContourSuperposition();
                     this->SM->Render();
                     return;
                 }
-                if (KeyPress == "i")
+                if (KeyPress == "l")
                 {
                     this->SM->ToggleInterpolation();
                     this->SM->Render();
@@ -205,7 +208,7 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
                     this->SM->Render();
                     return;
                 }
-                if (KeyPress == "l")
+                if (KeyPress == "u")
                 {
                     this->SM->Reload();
                     this->SM->Render();
@@ -259,21 +262,21 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
                 if (KeyPress == "Right")
                     this->SM->SetNextTSlice(VisibleInWindow);
 
-                if (KeyPress == "F1")
+                if (KeyPress == "F2")
                 {
                     this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Sagital\n<slice>");
                     this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(0);
                     this->SM->UpdateSliceRange(VisibleInWindow);
                     this->SM->UpdateInfoOnCursorPosition(VisibleInWindow);
                 }
-                if (KeyPress == "F2")
+                if (KeyPress == "F3")
                 {
                     this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Coronal\n<slice>");
                     this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(1);
                     this->SM->UpdateSliceRange(VisibleInWindow);
                     this->SM->UpdateInfoOnCursorPosition(VisibleInWindow);
                 }
-                if (KeyPress == "F3")
+                if (KeyPress == "F4")
                 {
                     this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Axial\n<slice>");
                     this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(2);
@@ -291,6 +294,15 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
                 return;
             }
 
+           //DD(event);
+           // Mouse release HERE 
+           if (event == vtkCommand::EndPickEvent) {
+             //              DD(VisibleInWindow);
+             if (VisibleInWindow > -1)
+               this->SM->LeftButtonReleaseEvent(VisibleInWindow);
+             return; // no return !!!! ???
+           }
+
             if (event == vtkCommand::StartWindowLevelEvent)
             {
                 mStartSlicer = -1;
@@ -377,7 +389,7 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
             if (newLandmark)
             {
                 this->SM->AddLandmark(xWorld,yWorld,zWorld,
-                        this->SM->GetSlicer(VisibleInWindow)->GetTSlice());
+                                      this->SM->GetSlicer(VisibleInWindow)->GetTSlice());
                 this->SM->GetSlicer(VisibleInWindow)->UpdateLandmarks();
                 this->SM->Render();
             }
@@ -408,9 +420,9 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
 
             // Compute normalized delta
             double dx = static_cast<double>(isi->GetWindowLevelCurrentPosition()[0] -
-                    isi->GetWindowLevelStartPosition()[0]) / size[0];
+                                            isi->GetWindowLevelStartPosition()[0]) / size[0];
             double dy = static_cast<double>(isi->GetWindowLevelStartPosition()[1] -
-                    isi->GetWindowLevelCurrentPosition()[1]) / size[1];
+                                            isi->GetWindowLevelCurrentPosition()[1]) / size[1];
             //Window is exponential in nature, use exponential to avoid falling into negative numbers
             dx = std::exp(1.0 * (dx*fabs(dx) + dx)) ; //Quadratic behavior for more reactive interface
             dy = 0.15 * (dy*fabs(dy) + dy) * (range[1]-range[0]);//Quadratic behavior for more reactive interface
@@ -432,7 +444,7 @@ void vvSlicerManagerCommand::Dolly(double factor, vtkRenderWindowInteractor *int
 {
     int VisibleInWindow = this->FindSlicerNumber(interactor->GetRenderWindow());
     vtkRenderer* renderer;
-    if (VisibleInWindow>-1) 
+    if (VisibleInWindow>-1)
         renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer();
     else
     {
@@ -482,12 +494,12 @@ void vvSlicerManagerCommand::Dolly(double factor, vtkRenderWindowInteractor *int
     camera->GetFocalPoint(viewFocus);
     camera->GetPosition(viewPoint);
     camera->SetFocalPoint(motionVector[0] + viewFocus[0],
-            motionVector[1] + viewFocus[1],
-            motionVector[2] + viewFocus[2]);
+                          motionVector[1] + viewFocus[1],
+                          motionVector[2] + viewFocus[2]);
 
     camera->SetPosition(motionVector[0] + viewPoint[0],
-            motionVector[1] + viewPoint[1],
-            motionVector[2] + viewPoint[2]);
+                        motionVector[1] + viewPoint[1],
+                        motionVector[2] + viewPoint[2]);
 
     if (camera->GetParallelProjection())
     {
@@ -505,7 +517,10 @@ void vvSlicerManagerCommand::Dolly(double factor, vtkRenderWindowInteractor *int
     renderer->ResetCameraClippingRange();
     //interactor->Render();
 }
+//------------------------------------------------------------------------------
+
 
+//------------------------------------------------------------------------------
 void vvSlicerManagerCommand::FlyToPosition(vtkRenderWindowInteractor *interactor,vvSlicer* slicer)
 {
     double flyFrom[3], flyTo[3];
@@ -513,14 +528,14 @@ void vvSlicerManagerCommand::FlyToPosition(vtkRenderWindowInteractor *interactor
     int i, j;
     int VisibleInWindow = this->FindSlicerNumber(interactor->GetRenderWindow());
     vtkRenderer* renderer=NULL;
-    if (VisibleInWindow>-1) 
+    if (VisibleInWindow>-1)
         renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer();
     else
         return;
 
     interactor->GetPicker()->Pick(interactor->GetEventPosition()[0],
-            interactor->GetEventPosition()[1], 0.0,
-            renderer);
+                                  interactor->GetEventPosition()[1], 0.0,
+                                  renderer);
 
     vtkAssemblyPath *path=NULL;
     vtkAbstractPropPicker *picker;
@@ -538,17 +553,17 @@ void vvSlicerManagerCommand::FlyToPosition(vtkRenderWindowInteractor *interactor
 
         switch (slicer->GetSliceOrientation())
         {
-            case vtkImageViewer2::SLICE_ORIENTATION_XY:
-                flyTo[2] = flyFrom[2];
-                break;
+        case vtkImageViewer2::SLICE_ORIENTATION_XY:
+            flyTo[2] = flyFrom[2];
+            break;
 
-            case vtkImageViewer2::SLICE_ORIENTATION_XZ:
-                flyTo[1] = flyFrom[1];
-                break;
+        case vtkImageViewer2::SLICE_ORIENTATION_XZ:
+            flyTo[1] = flyFrom[1];
+            break;
 
-            case vtkImageViewer2::SLICE_ORIENTATION_YZ:
-                flyTo[0] = flyFrom[0];
-                break;
+        case vtkImageViewer2::SLICE_ORIENTATION_YZ:
+            flyTo[0] = flyFrom[0];
+            break;
         }
 
 
@@ -574,3 +589,4 @@ void vvSlicerManagerCommand::FlyToPosition(vtkRenderWindowInteractor *interactor
         }
     }
 }
+//------------------------------------------------------------------------------