]> Creatis software - clitk.git/commitdiff
Added new functionality: local windowing around mouse pointer. Now with "z".
authorsrit <srit>
Tue, 9 Mar 2010 14:28:37 +0000 (14:28 +0000)
committersrit <srit>
Tue, 9 Mar 2010 14:28:37 +0000 (14:28 +0000)
vv/qt_ui/vvHelpDialog.ui
vv/vvSlicer.cxx
vv/vvSlicer.h
vv/vvSlicerManager.cxx
vv/vvSlicerManager.h
vv/vvSlicerManagerCommand.cxx

index b1cce67683156805d8be305d0d252a7e0cced849..4c43be4f7a9bad38b97bdffca1371cd8fd32c71b 100644 (file)
@@ -22,7 +22,7 @@
         <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
 &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
 p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
 &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; text-decoration: underline;&quot;&gt;Slice Selection&lt;/span&gt;&lt;/p&gt;
 &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;&quot;&gt;&lt;/p&gt;
 &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;F1:&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt; Sagital&lt;/span&gt;&lt;/p&gt;
@@ -37,7 +37,8 @@ p, li { white-space: pre-wrap; }
 &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;0,1,2,3,4,5&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt; : Windowing Preset Selection&lt;/span&gt;&lt;/p&gt;
 &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;6,7,8,9&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;: Colormap Selection&lt;/span&gt;&lt;/p&gt;
 &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;: Toggle interpolation&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;: Toggle contour superposition mode&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;: Toggle contour superposition mode&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;z&lt;/span&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;: Local windowing around mouse cursor&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
        </property>
        <property name="alignment">
         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
index 60ff1e4ebf594bfb7edae79d88ce2cb210abdcff..d50a422f3d928e0da48b969c7b5decd85f81b36a 100644 (file)
@@ -68,8 +68,8 @@
 #include <vtkExtractVOI.h>
 #include <vtkSphereSource.h>
 #include <vtkCutter.h>
-#include <vtkPlane.h>
 #include <vtkAssignAttribute.h>
+#include <vtkImageAccumulate.h>
 
 vtkCxxRevisionMacro(vvSlicer, "DummyRevision");
 vtkStandardNewMacro(vvSlicer);
@@ -98,6 +98,7 @@ vvSlicer::vvSlicer()
   text += "F5 = horizontal flip; F6 = vertical flip\n\n";
   text += "0,1,2,3,4,5 : preset windowing\n";
   text += "6,7,8,9 : preset colormap\n";
+  text += "z : local windowing\n";
   text += "r : reset view\n";
   text += "l : reload image\n";
   text += "f : fly to mouse position\n";
@@ -1140,6 +1141,49 @@ 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)
+{
+    double fLocalExtents[6];
+    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());
+    
+    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());
+}
+//----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
 void vvSlicer::Render()
index 1d42e375f5ed18414875883f03a9073e2aed024a..c2efcd805a0ca4c964c96df3e200bd96b81931ca 100644 (file)
@@ -51,7 +51,6 @@ class vvGlyph2D;
 class vvGlyphSource;
 class vtkCursor3D;
 class vtkCutter;
-class vtkPlane;
 class vtkAssignAttribute;
 class vtkScalarBarActor;
 
@@ -149,6 +148,8 @@ public:
     bool GetCursorVisibility();
     void SetCursorColor(int r,int g, int b);
 
+    void GetExtremasAroundMousePointer(double & min, double & max);
+
     void UpdateLandmarks();
     void ForceUpdateDisplayExtent();
 
@@ -162,6 +163,7 @@ public:
     virtual void SetColorWindow(double s);
     virtual void SetColorLevel(double s);
 
+    
     void EnableReducedExtent(bool b);
     void SetReducedExtent(int * ext);
 
@@ -197,7 +199,6 @@ protected:
     vtkSmartPointer<vtkPolyDataMapper> mLandMapper;
     vtkSmartPointer<vtkActor> mLandActor;
     vtkSmartPointer<vtkBox> mClipBox;
-    vtkSmartPointer<vtkPlane> mSlicePlane;
     vtkSmartPointer<vtkScalarBarActor> legend;
 
     std::vector<vvMeshActor*> mSurfaceCutActors;
index 74a059863314c0634c9c0d42f413e922ee1a1b05..9e408e24f56438671f4badf2400a7ad0c21a33fe 100644 (file)
@@ -808,8 +808,6 @@ void vvSlicerManager::UpdateSliceRange(int slicer)
 
 void vvSlicerManager::SetPreset(int preset)
 {
-    double range[2];
-    mImage->GetScalarRange(range);
     //vtkLookupTable* LUT = static_cast<vtkLookupTable*>(mSlicers[0]->GetWindowLevel()->GetLookupTable());
     double window = mSlicers[0]->GetColorWindow();
     double level = mSlicers[0]->GetColorLevel();
@@ -830,6 +828,8 @@ void vvSlicerManager::SetPreset(int preset)
         }
         else
         {
+            double range[2];
+            mImage->GetScalarRange(range);
             window = range[1] - range[0];
             level = (range[1] + range[0])* 0.5;
         }
@@ -870,6 +870,15 @@ void vvSlicerManager::SetPreset(int preset)
     //    SetColorMap(-1);
     //}
 }
+
+void vvSlicerManager::SetLocalColorWindowing(const int slicer)
+{
+    double min, max;
+       this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max);
+    this->SetColorWindow(max-min);
+    this->SetColorLevel(0.5*(min+max));
+}
+
 void vvSlicerManager::SetColorMap()
 {
     SetColorMap(mColorMap);
index 665153128fe928f5ba1b9667d25e7ad347c83231..d9031c3d0de75d6fc99b67f74534672dc7c92657 100644 (file)
@@ -133,6 +133,7 @@ public:
     void GenerateDefaultLookupTable();
     void SetColorWindow(double s);
     void SetColorLevel(double s);
+    void SetLocalColorWindowing(const int slicer);
     void SetOpacity(int i, double factor);
     void SetColorMap();
     void SetColorMap(int colormap);
index 80f6d514ead0428ab80f82d086be67feaff18688..862c10cbda9a8c341cd7db339d985eae1c12ff04 100644 (file)
@@ -107,6 +107,11 @@ void vvSlicerManagerCommand::Execute(vtkObject *caller,
                 {
                     FlyToPosition(isi->GetInteractor(),this->SM->GetSlicer(VisibleInWindow));
                 }
+               if (KeyPress == "z")
+               {
+                   this->SM->SetLocalColorWindowing(VisibleInWindow);
+                  return;
+               }
                 if (KeyPress == "0")
                 {
                     this->SM->SetPreset(0);