]> Creatis software - clitk.git/blobdiff - vv/vvSlicer.cxx
- display binary image as overlay
[clitk.git] / vv / vvSlicer.cxx
index a5c2641bd1a8f24c249bcf8fda6376441c5bc961..af609a74842f95a3d61f943bd636fd21d0c60e73 100644 (file)
@@ -566,6 +566,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 +638,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()
@@ -1152,8 +1176,8 @@ void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max)
     {
       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]);
@@ -1170,17 +1194,24 @@ void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max)
       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]);
+         std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]);
     }
-    
+
   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());
 }
@@ -1189,6 +1220,8 @@ void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max)
 //----------------------------------------------------------------------------
 void vvSlicer::Render()
 {
+  //  DD("Render");
+  //DD(SliceOrientation);
   if (this->GetWindowLevel()->GetLookupTable() && !this->mOverlay && !this->mFusion)
     {
       legend->SetLookupTable(this->GetWindowLevel()->GetLookupTable());
@@ -1253,10 +1286,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 +1412,5 @@ void vvSlicer::PrintSelf(ostream& os, vtkIndent indent)
   this->Superclass::PrintSelf(os, indent);
 }
 //----------------------------------------------------------------------------
+
+