<string><!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>
<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></string>
+<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></string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
#include <vtkExtractVOI.h>
#include <vtkSphereSource.h>
#include <vtkCutter.h>
-#include <vtkPlane.h>
#include <vtkAssignAttribute.h>
+#include <vtkImageAccumulate.h>
vtkCxxRevisionMacro(vvSlicer, "DummyRevision");
vtkStandardNewMacro(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";
}
//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+// 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()
class vvGlyphSource;
class vtkCursor3D;
class vtkCutter;
-class vtkPlane;
class vtkAssignAttribute;
class vtkScalarBarActor;
bool GetCursorVisibility();
void SetCursorColor(int r,int g, int b);
+ void GetExtremasAroundMousePointer(double & min, double & max);
+
void UpdateLandmarks();
void ForceUpdateDisplayExtent();
virtual void SetColorWindow(double s);
virtual void SetColorLevel(double s);
+
void EnableReducedExtent(bool b);
void SetReducedExtent(int * ext);
vtkSmartPointer<vtkPolyDataMapper> mLandMapper;
vtkSmartPointer<vtkActor> mLandActor;
vtkSmartPointer<vtkBox> mClipBox;
- vtkSmartPointer<vtkPlane> mSlicePlane;
vtkSmartPointer<vtkScalarBarActor> legend;
std::vector<vvMeshActor*> mSurfaceCutActors;
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();
}
else
{
+ double range[2];
+ mImage->GetScalarRange(range);
window = range[1] - range[0];
level = (range[1] + range[0])* 0.5;
}
// 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);
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);
{
FlyToPosition(isi->GetInteractor(),this->SM->GetSlicer(VisibleInWindow));
}
+ if (KeyPress == "z")
+ {
+ this->SM->SetLocalColorWindowing(VisibleInWindow);
+ return;
+ }
if (KeyPress == "0")
{
this->SM->SetPreset(0);