From: srit Date: Tue, 9 Mar 2010 14:28:37 +0000 (+0000) Subject: Added new functionality: local windowing around mouse pointer. Now with "z". X-Git-Tag: v1.2.0~768 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=e896ba3b14844f2769652b8b3230b73914acd5ee;p=clitk.git Added new functionality: local windowing around mouse pointer. Now with "z". --- diff --git a/vv/qt_ui/vvHelpDialog.ui b/vv/qt_ui/vvHelpDialog.ui index b1cce67..4c43be4 100644 --- a/vv/qt_ui/vvHelpDialog.ui +++ b/vv/qt_ui/vvHelpDialog.ui @@ -22,7 +22,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600; text-decoration: underline;">Slice Selection</span></p> <p style="-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;"></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">F1:</span><span style=" font-size:12pt;"> Sagital</span></p> @@ -37,7 +37,8 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">0,1,2,3,4,5</span><span style=" font-size:12pt;"> : Windowing Preset Selection</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">6,7,8,9</span><span style=" font-size:12pt;">: Colormap Selection</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">i</span><span style=" font-size:12pt;">: Toggle interpolation</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">u</span><span style=" font-size:12pt;">: Toggle contour superposition mode</span></p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">u</span><span style=" font-size:12pt;">: Toggle contour superposition mode</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">z</span><span style=" font-size:12pt;">: Local windowing around mouse cursor</span></p></body></html> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index 60ff1e4..d50a422 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -68,8 +68,8 @@ #include #include #include -#include #include +#include 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 voiFilter = vtkExtractVOI::New(); + voiFilter->SetInput(this->GetInput()); + voiFilter->SetVOI(iLocalExtents); + + vtkSmartPointer accFilter = vtkImageAccumulate::New(); + accFilter->SetInput(voiFilter->GetOutput()); + accFilter->Update(); + + min = *(accFilter->GetMin()); + max = *(accFilter->GetMax()); +} +//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- void vvSlicer::Render() diff --git a/vv/vvSlicer.h b/vv/vvSlicer.h index 1d42e37..c2efcd8 100644 --- a/vv/vvSlicer.h +++ b/vv/vvSlicer.h @@ -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 mLandMapper; vtkSmartPointer mLandActor; vtkSmartPointer mClipBox; - vtkSmartPointer mSlicePlane; vtkSmartPointer legend; std::vector mSurfaceCutActors; diff --git a/vv/vvSlicerManager.cxx b/vv/vvSlicerManager.cxx index 74a0598..9e408e2 100644 --- a/vv/vvSlicerManager.cxx +++ b/vv/vvSlicerManager.cxx @@ -808,8 +808,6 @@ void vvSlicerManager::UpdateSliceRange(int slicer) void vvSlicerManager::SetPreset(int preset) { - double range[2]; - mImage->GetScalarRange(range); //vtkLookupTable* LUT = static_cast(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); diff --git a/vv/vvSlicerManager.h b/vv/vvSlicerManager.h index 6651531..d9031c3 100644 --- a/vv/vvSlicerManager.h +++ b/vv/vvSlicerManager.h @@ -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); diff --git a/vv/vvSlicerManagerCommand.cxx b/vv/vvSlicerManagerCommand.cxx index 80f6d51..862c10c 100644 --- a/vv/vvSlicerManagerCommand.cxx +++ b/vv/vvSlicerManagerCommand.cxx @@ -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);