]> Creatis software - clitk.git/blobdiff - vv/vvSlicerManager.cxx
Romulo: invert matrix in .mat to be consistent with mhd matrices handled by itk
[clitk.git] / vv / vvSlicerManager.cxx
index c8964201ddf5923aace50401f822dcfe1941dac2..7bc8d5829e3d64ebe8ebbea29bfc0581f1677b5c 100644 (file)
@@ -1,20 +1,20 @@
 /*=========================================================================
-Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-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
+  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
 
-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 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.
 
-It is distributed under dual licence
+  It is distributed under dual licence
 
-- BSD        See included LICENSE.txt file
-- CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+  ======================================================================-====*/
 
 #include "vvSlicerManager.h"
 #include "vvSlicer.h"
@@ -107,11 +107,19 @@ vvSlicerManager::~vvSlicerManager()
 
 
 //------------------------------------------------------------------------------
-void vvSlicerManager::SetFilename(std::string f)
+void vvSlicerManager::SetFilename(std::string filename, int number)
 {
-  mFileName = f;
+  mFileName = filename;
+  mFileName = vtksys::SystemTools::GetFilenameName(mFileName);
+  mBaseFileName = vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(mFileName));
+  mBaseFileNameNumber = number;
+
   for(unsigned int i=0; i<mSlicers.size(); i++) {
-    mSlicers[i]->SetFileName(f);
+    mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename));
+  }
+  
+  if (number != 0) {
+    mFileName.append("_"+clitk::toString(number));
   }
 }
 //------------------------------------------------------------------------------
@@ -137,37 +145,35 @@ void vvSlicerManager::ToggleContourSuperposition()
 
 
 //----------------------------------------------------------------------------
-bool vvSlicerManager::SetImage(std::string filename, LoadedImageType type, int n)
+bool vvSlicerManager::SetImage(std::string filename, LoadedImageType type, int n, unsigned int slice)
 {
-  mFileName = filename;
   mType = type;
   if (mReader == NULL)
     mReader = new vvImageReader;
   std::vector<std::string> filenames;
   filenames.push_back(filename);
   mReader->SetInputFilenames(filenames);
+  mReader->SetSlice(slice); // Only used for SLICED type
   mReader->Update(type);
 
-  mFileName = vtksys::SystemTools::GetFilenameName(mFileName);
-  mBaseFileName = vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(mFileName));
-  //  DD(mBaseFileName);
-  mBaseFileNameNumber = n;
+  SetFilename(filename, n);
+  //  mFileName = vtksys::SystemTools::GetFilenameName(mFileName);
+  //mBaseFileName = vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(mFileName));
+  //mBaseFileNameNumber = n;
 
   if (mReader->GetLastError().size() == 0) {
     mImage=mReader->GetOutput();
     for ( unsigned int i = 0; i < mSlicers.size(); i++) {
       mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename));
       mSlicers[i]->SetImage(mReader->GetOutput());
-      //          DD(mSlicers[i]->GetFileName());
     }
   } else {
     mLastError = mReader->GetLastError();
     return false;
   }
-  if (n!=0) {
-    //    DD(mFileName);
-    mFileName.append("_"+clitk::toString(n));
-  }
+  // if (n!=0) {
+  //   mFileName.append("_"+clitk::toString(n));
+  // }
   return true;
 }
 //----------------------------------------------------------------------------
@@ -204,7 +210,6 @@ bool vvSlicerManager::SetImages(std::vector<std::string> filenames,LoadedImageTy
   mReader->Update(type);
 
   mBaseFileName = vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(mFileName));
-  //  DD(mBaseFileName);
   mBaseFileNameNumber = n;
 
   if (mReader->GetLastError().size() == 0) {
@@ -218,9 +223,7 @@ bool vvSlicerManager::SetImages(std::vector<std::string> filenames,LoadedImageTy
     return false;
   }
   if (n!=0) {
-    //    DD(mFileName);
     mFileName.append("_"+clitk::toString(n));
-    //    DD(mFileName);
   }
   return true;
 }
@@ -310,10 +313,6 @@ bool vvSlicerManager::SetVF(vvImage::Pointer vf,std::string filename)
     return false;
   }
   if (vf->GetNumberOfDimensions() == 4) {
-    // DD(vf->GetSpacing()[3]);
-    //     DD(mImage->GetSpacing()[3]);
-    //     DD(vf->GetOrigin()[3]);
-    //     DD(mImage->GetOrigin()[3]);
     if (vf->GetSpacing()[3] != mImage->GetSpacing()[3]) {
       mLastError = "Sorry, vector field time spacing cannot be different from time spacing of the reference image.";
       return false;
@@ -333,35 +332,6 @@ bool vvSlicerManager::SetVF(vvImage::Pointer vf,std::string filename)
 //----------------------------------------------------------------------------
 
 
-//----------------------------------------------------------------------------
-void vvSlicerManager::SetExtractedImage(std::string filename,vvImage::Pointer image, int slice)
-{
-  mFileName = filename;
-  mImage = vvImage::New();
-  if (image->GetNumberOfDimensions() == 4) {
-    mImage->AddImage(image->GetVTKImages()[slice]);
-    for ( unsigned int i = 0; i < mSlicers.size(); i++) {
-      mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename));
-      mSlicers[i]->SetImage(mImage);
-    }
-  } else {
-    vtkImageClip* clipper = vtkImageClip::New();
-    int extent[6];
-    image->GetVTKImages()[0]->GetWholeExtent(extent);
-    clipper->SetInput(image->GetVTKImages()[0]);
-    clipper->SetOutputWholeExtent(extent[0],extent[1],extent[2],extent[3],slice,slice);
-    clipper->Update();
-    mImage->AddImage(clipper->GetOutput());
-    for ( unsigned int i = 0; i < mSlicers.size(); i++) {
-      mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename));
-      mSlicers[i]->SetImage(mImage);
-    }
-    clipper->Delete();
-  }
-}
-//----------------------------------------------------------------------------
-
-
 //----------------------------------------------------------------------------
 vvSlicer* vvSlicerManager::GetSlicer(int i)
 {
@@ -396,31 +366,31 @@ void vvSlicerManager::SetInteractorStyleNavigator(int i, vtkInteractorStyle* sty
   mSlicers[i]->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style);
 
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::KeyPressEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::KeyPressEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::WindowLevelEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::WindowLevelEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::EndWindowLevelEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::EndWindowLevelEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::StartWindowLevelEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::StartWindowLevelEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::PickEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::PickEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::StartPickEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::StartPickEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::LeaveEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::LeaveEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::UserEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::UserEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::MouseWheelForwardEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::MouseWheelForwardEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::MouseWheelBackwardEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::MouseWheelBackwardEvent, smc);
   // mSlicers[i]->GetRenderWindow()->GetInteractor()->
   //   GetInteractorStyle()->AddObserver(vtkCommand::LeftButtonReleaseEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::EndPickEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::EndPickEvent, smc);
   mSlicers[i]->GetRenderWindow()->GetInteractor()->
-  GetInteractorStyle()->AddObserver(vtkCommand::EndInteractionEvent, smc);
+    GetInteractorStyle()->AddObserver(vtkCommand::EndInteractionEvent, smc);
   smc->Delete();
 }
 //----------------------------------------------------------------------------
@@ -461,9 +431,6 @@ void vvSlicerManager::SetNextTSlice(int originating_slicer)
   t++;
   if (t > mSlicers[0]->GetTMax())
     t = 0;
-  // DD("SetNextTSlice");
-//   DD(originating_slicer);
-//   DD(t);
   emit UpdateTSlice(originating_slicer,t);
 }
 //----------------------------------------------------------------------------
@@ -487,6 +454,10 @@ void vvSlicerManager::ToggleInterpolation()
   bool interpolate=!(mSlicers[0]->GetImageActor()->GetInterpolate());
   for ( unsigned int i = 0; i < mSlicers.size(); i++) {
     mSlicers[i]->GetImageActor()->SetInterpolate(interpolate);
+    if (mSlicers[i]->GetOverlayActor())
+      mSlicers[i]->GetOverlayActor()->SetInterpolate(interpolate);
+    if (mSlicers[i]->GetFusionActor())
+      mSlicers[i]->GetFusionActor()->SetInterpolate(interpolate);
   }
 }
 //----------------------------------------------------------------------------
@@ -551,16 +522,12 @@ void vvSlicerManager::SetOpacity(int i, double factor)
 //----------------------------------------------------------------------------
 void vvSlicerManager::UpdateViews(int current,int slicer)
 {
-  // DD("UpdateViews");
-//   DD(current);
-//   DD(slicer);
-
   double x = (mSlicers[slicer]->GetCurrentPosition()[0] - mSlicers[slicer]->GetInput()->GetOrigin()[0])
-             /mSlicers[slicer]->GetInput()->GetSpacing()[0];
+    /mSlicers[slicer]->GetInput()->GetSpacing()[0];
   double y = (mSlicers[slicer]->GetCurrentPosition()[1] - mSlicers[slicer]->GetInput()->GetOrigin()[1])
-             /mSlicers[slicer]->GetInput()->GetSpacing()[1];
+    /mSlicers[slicer]->GetInput()->GetSpacing()[1];
   double z = (mSlicers[slicer]->GetCurrentPosition()[2] - mSlicers[slicer]->GetInput()->GetOrigin()[2])
-             /mSlicers[slicer]->GetInput()->GetSpacing()[2];
+    /mSlicers[slicer]->GetInput()->GetSpacing()[2];
 
   if (x >= mSlicers[slicer]->GetInput()->GetWholeExtent()[0] &&
       x <= mSlicers[slicer]->GetInput()->GetWholeExtent()[1] &&
@@ -632,8 +599,6 @@ void vvSlicerManager::UpdateViews(int current,int slicer)
             mSlicers[i]->SetSlice((int)floor(x));
           break;
         }
-        // DD("UpdateViews::");
-        // DD(i);
         UpdateSlice(i);
         UpdateTSlice(i);
       }
@@ -647,11 +612,11 @@ void vvSlicerManager::UpdateViews(int current,int slicer)
 void vvSlicerManager::UpdateLinked(int slicer)
 {
   double x = (mSlicers[slicer]->GetCurrentPosition()[0] - mSlicers[slicer]->GetInput()->GetOrigin()[0])
-             /mSlicers[slicer]->GetInput()->GetSpacing()[0];
+    /mSlicers[slicer]->GetInput()->GetSpacing()[0];
   double y = (mSlicers[slicer]->GetCurrentPosition()[1] - mSlicers[slicer]->GetInput()->GetOrigin()[1])
-             /mSlicers[slicer]->GetInput()->GetSpacing()[1];
+    /mSlicers[slicer]->GetInput()->GetSpacing()[1];
   double z = (mSlicers[slicer]->GetCurrentPosition()[2] - mSlicers[slicer]->GetInput()->GetOrigin()[2])
-             /mSlicers[slicer]->GetInput()->GetSpacing()[2];
+    /mSlicers[slicer]->GetInput()->GetSpacing()[2];
 
   if (x >= mSlicers[slicer]->GetInput()->GetWholeExtent()[0] &&
       x <= mSlicers[slicer]->GetInput()->GetWholeExtent()[1] &&
@@ -758,9 +723,7 @@ double vvSlicerManager::GetColorLevel()
 //----------------------------------------------------------------------------
 void vvSlicerManager::Render()
 {
-  // DD("vvSlicerManager::Render");
   for ( unsigned int i = 0; i < mSlicers.size(); i++) {
-    //  DD(i);
     mSlicers[i]->Render();
   }
 }
@@ -828,6 +791,16 @@ void vvSlicerManager::ReloadVF()
 //----------------------------------------------------------------------------
 void vvSlicerManager::RemoveActor(const std::string& actor_type, int overlay_index)
 {
+  if (actor_type =="overlay") {
+    delete mOverlayReader;
+    mOverlayReader = NULL;
+  }
+
+  if (actor_type =="fusion") {
+    delete mFusionReader;
+    mFusionReader = NULL;
+  }
+
   for (unsigned int i = 0; i < mSlicers.size(); i++) {
     mSlicers[i]->RemoveActor(actor_type,overlay_index);
   }
@@ -845,7 +818,10 @@ void vvSlicerManager::RemoveActor(const std::string& actor_type, int overlay_ind
 //----------------------------------------------------------------------------
 void vvSlicerManager::RemoveActors()
 {
-  ///This method leaks a few objects. See RemoveActor for what a correct implementation would look like
+  ///This method leaks a few objects. See RemoveActor for what a
+  ///correct implementation would look like
+  //DS -> probably due to the reader (now released in the
+  //RemoveActor() function. (I hope)
   for ( unsigned int i = 0; i < mSlicers.size(); i++) {
     mSlicers[i]->SetDisplayMode(0);
     mSlicers[i]->GetRenderer()->RemoveActor(mSlicers[i]->GetImageActor());
@@ -863,11 +839,11 @@ void vvSlicerManager::UpdateInfoOnCursorPosition(int slicer)
   double y = mSlicers[slicer]->GetCursorPosition()[1];
   double z = mSlicers[slicer]->GetCursorPosition()[2];
   double X = (x - mSlicers[slicer]->GetInput()->GetOrigin()[0])/
-             mSlicers[slicer]->GetInput()->GetSpacing()[0];
+    mSlicers[slicer]->GetInput()->GetSpacing()[0];
   double Y = (y - mSlicers[slicer]->GetInput()->GetOrigin()[1])/
-             mSlicers[slicer]->GetInput()->GetSpacing()[1];
+    mSlicers[slicer]->GetInput()->GetSpacing()[1];
   double Z = (z - mSlicers[slicer]->GetInput()->GetOrigin()[2])/
-             mSlicers[slicer]->GetInput()->GetSpacing()[2];
+    mSlicers[slicer]->GetInput()->GetSpacing()[2];
   double value = -VTK_DOUBLE_MAX;
   int displayVec = 0;
   double xVec=0, yVec=0, zVec=0, valueVec=0;
@@ -880,10 +856,8 @@ void vvSlicerManager::UpdateInfoOnCursorPosition(int slicer)
       Y <= mSlicers[slicer]->GetInput()->GetWholeExtent()[3] &&
       Z >= mSlicers[slicer]->GetInput()->GetWholeExtent()[4] &&
       Z <= mSlicers[slicer]->GetInput()->GetWholeExtent()[5]) {
-    value = mSlicers[slicer]->GetInput()->GetScalarComponentAsDouble(
-              (int)floor(X),
-              (int)floor(Y),
-              (int)floor(Z),0);
+    value = this->GetScalarComponentAsDouble(mSlicers[slicer]->GetInput(), X, Y, Z);
+
     if (mSlicers[slicer]->GetVFActor() && mSlicers[slicer]->GetVFActor()->GetVisibility()) {
       displayVec = 1;
       unsigned int currentTime = mSlicers[slicer]->GetTSlice();
@@ -898,52 +872,44 @@ void vvSlicerManager::UpdateInfoOnCursorPosition(int slicer)
         double Xvf = (x - vf->GetOrigin()[0])/ vf->GetSpacing()[0];
         double Yvf = (y - vf->GetOrigin()[1])/ vf->GetSpacing()[1];
         double Zvf = (z - vf->GetOrigin()[2])/ vf->GetSpacing()[2];
-        xVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),0);
-        yVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),1);
-        zVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),2);
+        xVec = this->GetScalarComponentAsDouble( vf, Xvf, Yvf, Zvf, 0);
+        yVec = this->GetScalarComponentAsDouble( vf, Xvf, Yvf, Zvf, 1);
+        zVec = this->GetScalarComponentAsDouble( vf, Xvf, Yvf, Zvf, 2);
         valueVec = sqrt(xVec*xVec + yVec*yVec + zVec*zVec);
       }
     }
     if (mSlicers[slicer]->GetOverlayActor() && mSlicers[slicer]->GetOverlayActor()->GetVisibility()) {
       displayOver = 1;
       double Xover = (x - mSlicers[slicer]->GetOverlay()->GetOrigin()[0])
-                     /mSlicers[slicer]->GetOverlay()->GetSpacing()[0];
+        /mSlicers[slicer]->GetOverlay()->GetSpacing()[0];
       double Yover = (y - mSlicers[slicer]->GetOverlay()->GetOrigin()[1])
-                     /mSlicers[slicer]->GetOverlay()->GetSpacing()[1];
+        /mSlicers[slicer]->GetOverlay()->GetSpacing()[1];
       double Zover = (z - mSlicers[slicer]->GetOverlay()->GetOrigin()[2])
-                     /mSlicers[slicer]->GetOverlay()->GetSpacing()[2];
+        /mSlicers[slicer]->GetOverlay()->GetSpacing()[2];
       if (Xover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[0] &&
           Xover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[1] &&
           Yover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[2] &&
           Yover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[3] &&
           Zover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[4] &&
           Zover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[5]) {
-        valueOver = static_cast<vtkImageData*>(mSlicers[slicer]->GetOverlayMapper()->GetInput())->
-                    GetScalarComponentAsDouble(
-                      (int)floor(Xover),
-                      (int)floor(Yover),
-                      (int)floor(Zover),0);
+        valueOver = this->GetScalarComponentAsDouble(static_cast<vtkImageData*>(mSlicers[slicer]->GetOverlayMapper()->GetInput()), Xover, Yover, Zover);
       }
     }
     if (mSlicers[slicer]->GetFusionActor() && mSlicers[slicer]->GetFusionActor()->GetVisibility()) {
       displayFus = 1;
       double Xfus = (x - mSlicers[slicer]->GetFusion()->GetOrigin()[0])
-                    /mSlicers[slicer]->GetFusion()->GetSpacing()[0];
+        /mSlicers[slicer]->GetFusion()->GetSpacing()[0];
       double Yfus = (y - mSlicers[slicer]->GetFusion()->GetOrigin()[1])
-                    /mSlicers[slicer]->GetFusion()->GetSpacing()[1];
+        /mSlicers[slicer]->GetFusion()->GetSpacing()[1];
       double Zfus = (z - mSlicers[slicer]->GetFusion()->GetOrigin()[2])
-                    /mSlicers[slicer]->GetFusion()->GetSpacing()[2];
+        /mSlicers[slicer]->GetFusion()->GetSpacing()[2];
       if (Xfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[0] &&
           Xfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[1] &&
           Yfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[2] &&
           Yfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[3] &&
           Zfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[4] &&
           Zfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[5]) {
-        valueFus = static_cast<vtkImageData*>(mSlicers[slicer]->GetFusionMapper()->GetInput())->
-                   GetScalarComponentAsDouble(
-                     (int)floor(Xfus),
-                     (int)floor(Yfus),
-                     (int)floor(Zfus),0);
+        valueFus = this->GetScalarComponentAsDouble(static_cast<vtkImageData*>(mSlicers[slicer]->GetFusionMapper()->GetInput()), Xfus, Yfus, Zfus);
       }
     }
     emit UpdatePosition(mSlicers[slicer]->GetCursorVisibility(),
@@ -981,9 +947,6 @@ void vvSlicerManager::UpdateWindowLevel()
 //----------------------------------------------------------------------------
 void vvSlicerManager::UpdateSlice(int slicer)
 {
-  // DD("vvSlicerManager::UpdateSlice emit UpdateSlice");
-//   DD(slicer);
-//   DD(mSlicers[slicer]->GetSlice());
   if (mPreviousSlice[slicer] == mSlicers[slicer]->GetSlice()) {
     //DD("============= NOTHING");
     return;
@@ -998,10 +961,6 @@ void vvSlicerManager::UpdateSlice(int slicer)
 //----------------------------------------------------------------------------
 void vvSlicerManager::UpdateTSlice(int slicer)
 {
-  // DD("vvSlicerManager::UpdateTSlice emit UpdateTSlice");
-//   DD(slicer);
-//   DD(mSlicers[slicer]->GetTSlice());
-//   DD(mSlicers[slicer]->GetSlice());
   if (mPreviousSlice[slicer] == mSlicers[slicer]->GetSlice()) {
     if (mPreviousTSlice[slicer] == mSlicers[slicer]->GetTSlice()) {
       //      DD("************** NOTHING ***********");
@@ -1032,29 +991,21 @@ void vvSlicerManager::SetPreset(int preset)
   double window = mSlicers[0]->GetColorWindow();
   double level = mSlicers[0]->GetColorLevel();
 
-  std::string component_type=mImage->GetScalarTypeAsString();
+  std::string component_type=mImage->GetScalarTypeAsITKString();
   switch (preset) {
   case 0:
-    if (component_type == "unsigned_char") {
-      window = 255;
-      level = 127;
-    } else if (component_type == "short") {
-      window = 2000;
-      level = 0;
-    } else {
-      double range[2];
-      mImage->GetScalarRange(range);
-      window = range[1] - range[0];
-      level = (range[1] + range[0])* 0.5;
-    }
+    double range[2];
+    mImage->GetScalarRange(range);
+    window = range[1] - range[0];
+    level = (range[1] + range[0])* 0.5;
     break;
   case 1:
     window = 2000;
     level = 0;
     break;
   case 2:
-    window = 350;
-    level = 60;
+    window = 400;
+    level = 20;
     break;
   case 3:
     window = 1500;
@@ -1193,7 +1144,7 @@ void vvSlicerManager::SetColorMap(int colormap)
       invLUT->SetHueRange(double((mOverlayColor+180)%360)/360,double((mOverlayColor+180)%360)/360);
       invLUT->Build();
       dynamic_cast<vvImageMapToWLColors*>(mSlicers[i]->GetWindowLevel())
-      ->SetWindowLevelMode(true);
+        ->SetWindowLevelMode(true);
       mSlicers[i]->GetWindowLevel()->SetLookupTable(supLUT);
       mSlicers[i]->GetOverlayMapper()->SetLookupTable(invLUT);
       invLUT->Delete();
@@ -1208,6 +1159,8 @@ void vvSlicerManager::SetColorMap(int colormap)
     if (mSlicers[i]->GetFusion() && mSlicers[i]->GetFusionActor()->GetVisibility()) {
       mSlicers[i]->GetFusionActor()->SetOpacity(double(mFusionOpacity)/100);
       mSlicers[i]->GetFusionMapper()->SetLookupTable(fusLUT);
+      mSlicers[i]->GetFusionMapper()->SetWindow(mFusionWindow);
+      mSlicers[i]->GetFusionMapper()->SetLevel(mFusionLevel);
     }
   }
   if (fusLUT)
@@ -1243,10 +1196,7 @@ void vvSlicerManager::AddLandmark(float x,float y,float z,float t)
       y_index <= mSlicers[0]->GetInput()->GetWholeExtent()[3] &&
       z_index >= mSlicers[0]->GetInput()->GetWholeExtent()[4] &&
       z_index <= mSlicers[0]->GetInput()->GetWholeExtent()[5]) {
-    double value = mSlicers[0]->GetInput()->GetScalarComponentAsDouble(
-                     (int)x_index,
-                     (int)y_index,
-                     (int)z_index,0);
+    double value = this->GetScalarComponentAsDouble(mSlicers[0]->GetInput(), x_index, y_index, z_index);
     this->GetLandmarks()->AddLandmark(x,y,z,t,value);
     emit LandmarkAdded();
   }
@@ -1260,7 +1210,6 @@ void vvSlicerManager::PrevImage(int slicer)
 }
 //----------------------------------------------------------------------------
 
-
 //----------------------------------------------------------------------------
 void vvSlicerManager::NextImage(int slicer)
 {
@@ -1268,7 +1217,6 @@ void vvSlicerManager::NextImage(int slicer)
 }
 //----------------------------------------------------------------------------
 
-
 //----------------------------------------------------------------------------
 void vvSlicerManager::VerticalSliderHasChanged(int slicer, int slice)
 {
@@ -1276,3 +1224,11 @@ void vvSlicerManager::VerticalSliderHasChanged(int slicer, int slice)
 }
 
 //----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+double vvSlicerManager::GetScalarComponentAsDouble(vtkImageData *image, double X, double Y, double Z, int component)
+{
+  int ix, iy, iz;
+  return mSlicers[0]->GetScalarComponentAsDouble(image, X, Y, Z, ix, iy, iz, component);
+}
+//----------------------------------------------------------------------------