]> Creatis software - clitk.git/blobdiff - vv/vvSlicerManager.cxx
Attempt to fix the blend image actor for the new vtk release (5.10)
[clitk.git] / vv / vvSlicerManager.cxx
index c38496e5ab50b2389311eb4788f8f8ee428a0178..3f6f9139fc2e1bec9540eb3480dc49c52b2fdc34 100644 (file)
@@ -57,12 +57,13 @@ vvSlicerManager::vvSlicerManager(int numberOfSlicers)
   mPreset = 0;
   mOverlayColor = 130;
 
-  mFusionOpacity = 70;
+  mFusionOpacity = 30;
   mFusionThresOpacity = 1;
   mFusionColorMap = 3;
   mFusionWindow = 1000;
   mFusionLevel = 1000;
-
+  mFusionShowLegend = true;
+  
   mLandmarks = NULL;
   mLinkedId.resize(0);
 
@@ -763,7 +764,7 @@ double vvSlicerManager::GetColorLevel()
 //----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
-double vvSlicerManager::GetOverlayColorWindow()
+double vvSlicerManager::GetOverlayColorWindow() const
 {
   if (mSlicers.size())
     return mSlicers[0]->GetOverlayColorWindow();
@@ -772,7 +773,7 @@ double vvSlicerManager::GetOverlayColorWindow()
 //----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
-double vvSlicerManager::GetOverlayColorLevel()
+double vvSlicerManager::GetOverlayColorLevel() const
 {
   if (mSlicers.size())
     return mSlicers[0]->GetOverlayColorLevel();
@@ -781,7 +782,7 @@ double vvSlicerManager::GetOverlayColorLevel()
 //----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
-bool vvSlicerManager::GetLinkOverlayWindowLevel()
+bool vvSlicerManager::GetLinkOverlayWindowLevel() const
 {
   if (mSlicers.size())
     return mSlicers[0]->GetLinkOverlayWindowLevel();
@@ -1116,13 +1117,17 @@ void vvSlicerManager::SetLocalColorWindowing(const int slicer, const bool bCtrlK
   double min, max;
   int t = this->mSlicers[slicer]->GetTSlice();
   if(bCtrlKey && this->mSlicers[slicer]->GetFusion()) {
-    this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max, this->mSlicers[slicer]->GetFusion()->GetVTKImages()[t]);
+    this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max,
+                                                          this->mSlicers[slicer]->GetFusion()->GetVTKImages()[t],
+                                                          this->mSlicers[slicer]->GetFusion()->GetTransform());
     this->SetFusionWindow(max-min);
     this->SetFusionLevel(0.5*(min+max));
     this->SetColorMap(mColorMap);
   }
   else if(bCtrlKey && this->mSlicers[slicer]->GetOverlay()) {
-    this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max, this->mSlicers[slicer]->GetOverlay()->GetVTKImages()[t]);
+    this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max,
+                                                          this->mSlicers[slicer]->GetOverlay()->GetVTKImages()[t],
+                                                          this->mSlicers[slicer]->GetOverlay()->GetTransform());
     if(this->mSlicers[slicer]->GetLinkOverlayWindowLevel()){
       this->SetColorWindow(max-min);
       this->SetColorLevel(0.5*(min+max));
@@ -1132,7 +1137,9 @@ void vvSlicerManager::SetLocalColorWindowing(const int slicer, const bool bCtrlK
     }
   }
   else {
-    this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max, this->mSlicers[slicer]->GetInput());
+    this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max,
+                                                          this->mSlicers[slicer]->GetImage()->GetVTKImages()[t],
+                                                          this->mSlicers[slicer]->GetImage()->GetTransform());
     this->SetColorWindow(max-min);
     this->SetColorLevel(0.5*(min+max));
     this->SetPreset(6);
@@ -1184,21 +1191,22 @@ void vvSlicerManager::SetColorMap(int colormap)
   case 4:
     if (LUT == NULL)
       LUT = vtkLookupTable::New();
-    LUT->SetValueRange(0,1);
+    LUT->SetValueRange(1,1);
     LUT->SetSaturationRange(1,1);
     LUT->SetHueRange(0,1);
+    LUT->SetAlphaRange(1, 1);
     break;
   case 5:
     if (LUT == NULL)
       LUT = vtkLookupTable::New();
-    LUT->SetValueRange(0.,1);
+    LUT->SetValueRange(1,1);
     LUT->SetSaturationRange(1,1);
     LUT->SetHueRange(1,0.1);
     //LUT->SetRampToLinear();
     break;
   }
   if (LUT) {
-    LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4);
+    LUT->SetTableRange(level-fabs(window)/2,level+fabs(window)/2);
     LUT->Build();
   }
   vtkWindowLevelLookupTable* fusLUT = NULL;
@@ -1232,15 +1240,20 @@ void vvSlicerManager::SetColorMap(int colormap)
     }
     
     fusLUT->ForceBuild();
+    double v[4];
     
     // set color table transparency
-    double alpha_range_end = frange[0] + (double)mFusionThresOpacity*(frange[1] - frange[0])/100;
-    for (double i = frange[0]; i < alpha_range_end; i++) {
-      double v[4];
-      vtkIdType index = fusLUT->GetIndex(i);
-      fusLUT->GetTableValue(index, v);
+    //double alpha_range=(double)mFusionThresOpacity/10;
+    double range_end = fusRange[0] + (double)mFusionThresOpacity*(fusRange[1] - fusRange[0])/100;
+    double curr_value = fusRange[0];
+    int nvalues = fusLUT->GetNumberOfTableValues();
+    for (double i = 0; curr_value < range_end; i++) {  
+      fusLUT->GetTableValue(i, v);
       v[3] = 0;
-      fusLUT->SetTableValue(index, v);
+      //if (curr_value >= -alpha_range && curr_value <= alpha_range) v[3] = pow(fabs(curr_value/alpha_range),2);
+      //else v[3] = 1;
+      fusLUT->SetTableValue(i, v);
+      curr_value += (fusRange[1] - fusRange[0])/nvalues;
     }
   }
   for ( unsigned int i = 0; i < mSlicers.size(); i++) {
@@ -1273,6 +1286,7 @@ void vvSlicerManager::SetColorMap(int colormap)
     }
     
     if (mSlicers[i]->GetFusion()) {
+      mSlicers[i]->ShowFusionLegend(mFusionShowLegend);
       mSlicers[i]->GetFusionMapper()->SetLookupTable(fusLUT);
       mSlicers[i]->GetFusionActor()->SetOpacity(double(mFusionOpacity)/100);
     }