]> Creatis software - clitk.git/commitdiff
Corrected LocalWindowing: now really in screen (view) coordinates
authorsrit <srit>
Wed, 10 Mar 2010 18:30:34 +0000 (18:30 +0000)
committersrit <srit>
Wed, 10 Mar 2010 18:30:34 +0000 (18:30 +0000)
vv/vvSlicer.cxx

index d50a422f3d928e0da48b969c7b5decd85f81b36a..03ecaaaff126bcf49f27ddb5643c3b4b6d470e0a 100644 (file)
@@ -1145,32 +1145,39 @@ 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++)
+    {
+        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++)
+    {
+        if (i!=SliceOrientation) //SR: assumes that SliceOrientation is valid in ViewCoordinates (???)
+        {
+            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]);
+
+    //Convert to image pixel coordinates (rounded)
     int iLocalExtents[6];
     for(int i=0; i<3; i++)
     {
-        //Define corners of an area on the screen
-       if(SliceOrientation != i)
-       {
-           fLocalExtents[i*2  ] = mCurrent[i]-20;
-           fLocalExtents[i*2+1] = mCurrent[i]+20;
-       }
-       else
-       {
-           fLocalExtents[i*2  ] = mCurrent[i];
-           fLocalExtents[i*2+1] = mCurrent[i];
-       }
-
-       //Convert to image pixel coordinates
         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];
-       
-       //Round
-       iLocalExtents[i*2  ] = lrint(fLocalExtents[i*2  ]);
-       iLocalExtents[i*2+1] = lrint(fLocalExtents[i*2+1]);
-    }
     
-    ClipDisplayedExtent(iLocalExtents, this->GetInput()->GetExtent());
+        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]);
+    }
     
     vtkSmartPointer<vtkExtractVOI> voiFilter = vtkExtractVOI::New();
     voiFilter->SetInput(this->GetInput());