+//----------------------------------------------------------------------------
+void vvSlicerManager::SetLocalColorWindowing(const int slicer, const bool bCtrlKey)
+{
+ double min, max;
+ if(bCtrlKey && this->mSlicers[slicer]->GetFusion()) {
+ int t = mSlicers[slicer]->GetFusionTSlice();
+ this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max,
+ this->mSlicers[slicer]->GetFusion()->GetVTKImages()[t],
+ this->mSlicers[slicer]->GetConcatenatedFusionTransform());
+ this->SetFusionWindow(max-min);
+ this->SetFusionLevel(0.5*(min+max));
+ this->SetColorMap(mColorMap);
+ }
+ else if(bCtrlKey && this->mSlicers[slicer]->GetOverlay()) {
+ int t = mSlicers[slicer]->GetOverlayTSlice();
+ this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max,
+ this->mSlicers[slicer]->GetOverlay()->GetVTKImages()[t],
+ this->mSlicers[slicer]->GetConcatenatedOverlayTransform());
+ if(this->mSlicers[slicer]->GetLinkOverlayWindowLevel()){
+ this->SetColorWindow(max-min);
+ this->SetColorLevel(0.5*(min+max));
+ } else {
+ this->SetOverlayColorWindow(max-min);
+ this->SetOverlayColorLevel(0.5*(min+max));
+ }
+ }
+ else {
+ int t = this->GetTSlice();
+ this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max,
+ this->mSlicers[slicer]->GetImage()->GetVTKImages()[t],
+ this->mSlicers[slicer]->GetConcatenatedTransform());
+ this->SetColorWindow(max-min);
+ this->SetColorLevel(0.5*(min+max));
+ this->SetPreset(WL_USER);
+ }
+ this->Render();
+ this->UpdateWindowLevel();
+}
+//----------------------------------------------------------------------------
+
+
+//----------------------------------------------------------------------------
+void vvSlicerManager::SetColorMap(int colormap)
+{
+ double range[2];
+
+ range[0] = mSlicers[0]->GetInput()->GetScalarRange()[0];
+ range[1] = mSlicers[0]->GetInput()->GetScalarRange()[1];
+
+ double window = mSlicers[0]->GetWindowLevel()->GetWindow();
+ double level = mSlicers[0]->GetWindowLevel()->GetLevel();
+
+ vtkLookupTable* LUT = static_cast<vtkLookupTable*>(mSlicers[0]->GetWindowLevel()->GetLookupTable());
+ switch (colormap) {
+ case -1:
+ break;
+ case 0:
+ LUT = NULL;
+ break;
+ case 1:
+ if (LUT == NULL)
+ LUT = vtkLookupTable::New();
+ LUT->SetValueRange(0,1);
+ LUT->SetSaturationRange(1,1);
+ LUT->SetHueRange(0,0.18);
+ break;
+ case 2:
+ if (LUT == NULL)
+ LUT = vtkLookupTable::New();
+ LUT->SetValueRange(0,1);
+ LUT->SetSaturationRange(1,1);
+ LUT->SetHueRange(0.4,0.80);
+ break;
+ case 3:
+ if (LUT == NULL)
+ LUT = vtkLookupTable::New();
+ LUT->SetValueRange(0.5,1);
+ LUT->SetSaturationRange(1,1);
+ LUT->SetHueRange(0.666,0);
+ break;
+ case 4:
+ if (LUT == NULL)
+ LUT = vtkLookupTable::New();
+ LUT->SetValueRange(1,1);
+ LUT->SetSaturationRange(1,1);
+ LUT->SetHueRange(0,1);
+ LUT->SetAlphaRange(1, 1);
+ break;
+ case 5:
+ if (LUT == NULL)
+ LUT = vtkLookupTable::New();
+ LUT->SetValueRange(1,1);
+ LUT->SetSaturationRange(1,1);
+ LUT->SetHueRange(1,0.1);
+ //LUT->SetRampToLinear();
+ break;
+ }
+ if (LUT) {
+ LUT->SetTableRange(level-fabs(window)/2,level+fabs(window)/2);
+ LUT->Build();
+ }
+ vtkWindowLevelLookupTable* fusLUT = NULL;
+
+ //FUSION / FUSION SEQUENCE
+ if (mSlicers[0]->GetFusion()) { // && mFusionColorMap >= 0) {
+ fusLUT = vtkWindowLevelLookupTable::New();
+ double fusRange [2];
+ fusRange[0] = mFusionLevel - mFusionWindow/2;
+ fusRange[1] = mFusionLevel + mFusionWindow/2;
+
+ //check whether it is actually a fusionSequence or a fusion, before invoking mFusionReader...
+ double* frange;
+ if (this->IsInvolvedInFusionSequence())
+ frange = mFusionSequenceReader->GetOutput()->GetVTKImages()[0]->GetScalarRange();
+ else
+ frange = mFusionReader->GetOutput()->GetVTKImages()[0]->GetScalarRange();
+
+ fusLUT->SetTableRange(frange);
+ fusLUT->SetValueRange(1,1);
+ fusLUT->SetSaturationRange(1,1);
+ fusLUT->SetAlphaRange(1, 1);
+ fusLUT->SetWindow(mFusionWindow);
+ fusLUT->SetLevel(mFusionLevel);
+ if (mFusionColorMap == 1)
+ fusLUT->SetHueRange(0,0.18);
+ else if (mFusionColorMap == 2)
+ fusLUT->SetHueRange(0.4,0.80);
+ else if (mFusionColorMap == 3)