]> Creatis software - clitk.git/blobdiff - vv/vvSlicer.cxx
Added Manual Registration Tool with updated Median Filter tool
[clitk.git] / vv / vvSlicer.cxx
index 17afe19ede1ac60bb663d9dfbfadb1b1be246866..256981fba78528394cb9f21b67828f7efefc94f8 100644 (file)
@@ -14,9 +14,9 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
-#include "vvSlicer.h"
+  ======================================================================-====*/
 
+#include "vvSlicer.h"
 #include "vvImage.h"
 #include "vvSlicerManagerCommand.h"
 #include "vvGlyphSource.h"
@@ -64,6 +64,7 @@
 #include <vtkCutter.h>
 #include <vtkAssignAttribute.h>
 #include <vtkImageAccumulate.h>
+#include <vtkImageReslice.h>
 
 vtkCxxRevisionMacro(vvSlicer, "DummyRevision");
 vtkStandardNewMacro(vvSlicer);
@@ -140,6 +141,7 @@ vvSlicer::vvSlicer()
   this->WindowLevel->Delete();
   this->WindowLevel = vvImageMapToWLColors::New();
   this->InstallPipeline();
+  
 }
 //------------------------------------------------------------------------------
 
@@ -566,6 +568,9 @@ void vvSlicer::SetTSlice(int t)
     t = 0;
   else if ((unsigned int)t >= mImage->GetVTKImages().size())
     t = mImage->GetVTKImages().size() -1;
+
+  if (mCurrentTSlice == t) return;
+
   mCurrentTSlice = t;
   this->SetInput(mImage->GetVTKImages()[t]);
   if (mVF && mVFActor->GetVisibility())
@@ -635,6 +640,27 @@ void vvSlicer::SetSliceOrientation(int orientation)
 
   SetContourSlice();
 }
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+int * vvSlicer::GetExtent() {
+  int *w_ext;
+  if (mUseReducedExtent) {
+    w_ext = mReducedExtent;
+  }
+  else w_ext = GetInput()->GetWholeExtent();
+  return w_ext;
+}
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+int vvSlicer::GetOrientation() {
+  return this->SliceOrientation;
+}
+//----------------------------------------------------------------------------
+
 
 //----------------------------------------------------------------------------
 void vvSlicer::UpdateDisplayExtent()
@@ -1139,56 +1165,65 @@ void vvSlicer::SetColorLevel(double level)
 // Returns the min an the max value in a 41x41 region around the mouse pointer
 void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max)
 {
-    //Get mouse pointer position in view coordinates
-    double fLocalExtents[6];
-    for(int i=0; i<3; i++)
+  //Get mouse pointer position in view coordinates
+  double fLocalExtents[6];
+  for(int i=0; i<3; i++)
     {
-        fLocalExtents[i*2  ] = mCurrent[i];
-        fLocalExtents[i*2+1] = mCurrent[i];
+      fLocalExtents[i*2  ] = mCurrent[i];
+      fLocalExtents[i*2+1] = mCurrent[i];
     }
-    this->Renderer->WorldToView(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]);
-    this->Renderer->WorldToView(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]);
-    for(int i=0; i<3; i++)
+  this->Renderer->WorldToView(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]);
+  this->Renderer->WorldToView(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]);
+  for(int i=0; i<3; i++)
     {
-        if (i!=SliceOrientation) //SR: assumes that SliceOrientation is valid in ViewCoordinates (???)
+      if (i!=SliceOrientation) //SR: assumes that SliceOrientation is valid in ViewCoordinates (???)
         {
-            fLocalExtents[i*2  ] -= 0.2;
-            fLocalExtents[i*2+1] += 0.2;
+             fLocalExtents[i*2  ] -= 0.2;
+             fLocalExtents[i*2+1] += 0.2;
         }
     }
-    this->Renderer->ViewToWorld(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]);
-    this->Renderer->ViewToWorld(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]);
+  this->Renderer->ViewToWorld(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]);
+  this->Renderer->ViewToWorld(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]);
 
-    //Convert to image pixel coordinates (rounded)
-    int iLocalExtents[6];
-    for(int i=0; i<3; i++)
+  //Convert to image pixel coordinates (rounded)
+  int iLocalExtents[6];
+  for(int i=0; i<3; i++)
     {
-        fLocalExtents[i*2  ] = (fLocalExtents[i*2  ] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i];
-        fLocalExtents[i*2+1] = (fLocalExtents[i*2+1] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i];
+      fLocalExtents[i*2  ] = (fLocalExtents[i*2  ] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i];
+      fLocalExtents[i*2+1] = (fLocalExtents[i*2+1] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i];
     
-        iLocalExtents[i*2  ] = lrint(fLocalExtents[i*2  ]);
-        iLocalExtents[i*2+1] = lrint(fLocalExtents[i*2+1]);
+      iLocalExtents[i*2  ] = lrint(fLocalExtents[i*2  ]);
+      iLocalExtents[i*2+1] = lrint(fLocalExtents[i*2+1]);
 
-        if(iLocalExtents[i*2  ]>iLocalExtents[i*2+1])
-            std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]);
+      if(iLocalExtents[i*2  ]>iLocalExtents[i*2+1])
+         std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]);
     }
-    
-    vtkSmartPointer<vtkExtractVOI> voiFilter = vtkExtractVOI::New();
-    voiFilter->SetInput(this->GetInput());
-    voiFilter->SetVOI(iLocalExtents);
 
-    vtkSmartPointer<vtkImageAccumulate> accFilter = vtkImageAccumulate::New();
-    accFilter->SetInput(voiFilter->GetOutput());
-    accFilter->Update();
-   
-    min = *(accFilter->GetMin());
-    max = *(accFilter->GetMax());
+  vtkSmartPointer<vtkExtractVOI> voiFilter = vtkExtractVOI::New();
+  voiFilter->SetInput(this->GetInput());
+  voiFilter->SetVOI(iLocalExtents);
+  voiFilter->Update();
+  if (!voiFilter->GetOutput()->GetNumberOfPoints())
+    {
+      min = 0;
+      max = 0;
+      return;
+    }
+
+  vtkSmartPointer<vtkImageAccumulate> accFilter = vtkImageAccumulate::New();
+  accFilter->SetInput(voiFilter->GetOutput());
+  accFilter->Update();
+  
+  min = *(accFilter->GetMin());
+  max = *(accFilter->GetMax());
 }
 //----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
 void vvSlicer::Render()
 {
+  //  DD("Render");
+  //DD(SliceOrientation);
   if (this->GetWindowLevel()->GetLookupTable() && !this->mOverlay && !this->mFusion)
     {
       legend->SetLookupTable(this->GetWindowLevel()->GetLookupTable());
@@ -1253,10 +1288,9 @@ void vvSlicer::Render()
           pixel2 << (int)Y;
           pixel3 << (int)Z;
           temps << mCurrentTSlice;
-          double value = this->GetInput()->GetScalarComponentAsDouble(
-                                                                      (int)X,
-                                                                      (int)Y,
-                                                                      (int)Z,0);
+          double value = this->GetInput()->GetScalarComponentAsDouble(lrint(X),
+                                                                      lrint(Y),
+                                                                      lrint(Z),0);
 
           std::stringstream val;
           val << value;
@@ -1380,3 +1414,10 @@ void vvSlicer::PrintSelf(ostream& os, vtkIndent indent)
   this->Superclass::PrintSelf(os, indent);
 }
 //----------------------------------------------------------------------------
+
+
+   
+   
+
+
+