]> Creatis software - clitk.git/blobdiff - vv/vvSlicer.cxx
fusion legend is now an option
[clitk.git] / vv / vvSlicer.cxx
index 2473c87e27c3ca8dd84b33c047d199bea685f7b3..cba898cc431f06e80b10fab19d2f6191130ca890 100644 (file)
@@ -130,6 +130,7 @@ vvSlicer::vvSlicer()
   legend->SetVisibility(0);
   legend->SetLabelFormat("%.1f");
   this->GetRenderer()->AddActor(legend);
+  showFusionLegend = true;
 
   this->WindowLevel->Delete();
   this->WindowLevel = vvImageMapToWLColors::New();
@@ -755,12 +756,14 @@ void vvSlicer::SetSliceOrientation(int orientation)
 // of the displayed image in the slicing direction.
 void vvSlicer::AdjustResliceToSliceOrientation(vtkImageReslice *reslice)
 {
-  // Reset autocrop
-  double origin[3] = {VTK_DOUBLE_MAX, VTK_DOUBLE_MAX, VTK_DOUBLE_MAX};
-  double spacing[3] = {VTK_DOUBLE_MAX, VTK_DOUBLE_MAX, VTK_DOUBLE_MAX};
-  reslice->SetOutputOrigin(origin);
-  reslice->SetOutputSpacing(spacing);
+  // Reset autocrop and update output information
+  reslice->SetOutputOriginToDefault();
+  reslice->SetOutputSpacingToDefault();
   reslice->GetOutput()->UpdateInformation();
+
+  // Ge new origin / spacing
+  double origin[3];
+  double spacing[3];
   reslice->GetOutput()->GetOrigin(origin);
   reslice->GetOutput()->GetSpacing(spacing);
 
@@ -815,10 +818,12 @@ void vvSlicer::UpdateDisplayExtent()
 
   // Local copy of extent
   int w_ext[6];
-  copyExtent(GetExtent(), w_ext);
+  int* ext = GetExtent();
+  copyExtent(ext, w_ext);
   // Set slice value
-  w_ext[ this->SliceOrientation*2   ] = this->Slice;
-  w_ext[ this->SliceOrientation*2+1 ] = this->Slice;
+  int s = this->Slice > ext[this->SliceOrientation*2+1] ? ext[this->SliceOrientation*2 + 1] : this->Slice;
+  w_ext[ this->SliceOrientation*2   ] = s;
+  w_ext[ this->SliceOrientation*2+1 ] = s;
   
   // Image actor
   this->ImageActor->SetDisplayExtent(w_ext);
@@ -927,7 +932,8 @@ void vvSlicer::ConvertImageToImageDisplayExtent(vtkImageData *sourceImage, const
     dExtents[i] = (dExtents[i]- targetImage->GetOrigin()[i/2]) / targetImage->GetSpacing()[i/2];
     
     // Round to nearest
-    targetExtent[i] = itk::Math::Round<double>(dExtents[i]);
+    //targetExtent[i] = itk::Math::Round<double>(dExtents[i]);
+    targetExtent[i] = itk::Math::Floor<double>(dExtents[i]);
   }
 }
 //----------------------------------------------------------------------------
@@ -1106,7 +1112,7 @@ void vvSlicer::SetColorWindow(double window)
   vtkLookupTable* LUT = static_cast<vtkLookupTable*>(this->GetWindowLevel()->GetLookupTable());
   if ( LUT ) {
     double level = this->GetWindowLevel()->GetLevel();
-    LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4);
+    LUT->SetTableRange(level-fabs(window)/2,level+fabs(window)/2);
     LUT->Build();
   }
   this->vtkImageViewer2::SetColorWindow(window);
@@ -1119,7 +1125,7 @@ void vvSlicer::SetColorLevel(double level)
   vtkLookupTable* LUT = static_cast<vtkLookupTable*>(this->GetWindowLevel()->GetLookupTable());
   if ( LUT ) {
     double window = this->GetWindowLevel()->GetWindow();
-    LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4);
+    LUT->SetTableRange(level-fabs(window)/2,level+fabs(window)/2);
     LUT->Build();
   }
   this->vtkImageViewer2::SetColorLevel(level);
@@ -1236,8 +1242,14 @@ double vvSlicer::GetScalarComponentAsDouble(vtkImageData *image, double X, doubl
 //----------------------------------------------------------------------------
 void vvSlicer::Render()
 {
-  if (this->GetWindowLevel()->GetLookupTable() && !this->mOverlay && !this->mFusion) {
+  if (this->mFusion && showFusionLegend) {
+    legend->SetLookupTable(this->GetFusionMapper()->GetLookupTable());
+    legend->UseOpacityOn();
+    legend->SetVisibility(1);
+  }
+  else if (this->GetWindowLevel()->GetLookupTable()) {// && !this->mOverlay && !this->mFusion) {
     legend->SetLookupTable(this->GetWindowLevel()->GetLookupTable());
+    legend->UseOpacityOff();
     legend->SetVisibility(1);
   } else legend->SetVisibility(0);