+
+/**
+ * \file
+ * \brief Class bbtk::ThresholdImageView .
+ */
+
+
+#include "ThresholdImageView.h"
+
+
+
+ //=========================================================================
+ ThresholdImageView::ThresholdImageView( )
+ {
+ _actorPresent = false;
+ }
+
+ //=========================================================================
+ ThresholdImageView::~ThresholdImageView()
+ {
+ }
+ //=========================================================================
+
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::SetImage(vtkImageData* image)
+{
+ _image = image;
+}
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::SetwxVtkBaseView(wxVtkBaseView *baseview)
+{
+ _baseView = baseview;
+}
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::SetZ(int z)
+{
+ _Z = z;
+}
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::SetminMax(int min, int max)
+{
+ _min = min;
+ _max = max;
+}
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::onThreshold()
+{
+ int z = _Z;
+ double range[2];
+
+ vtkImageData *img = _image;
+ img->GetScalarRange(range);
+
+ int minTot = floor (range[0]);
+ int maxTot = ceil (range[1]);
+
+//EED _pannew->onThresholdInstantChange(minMax);
+
+ int minVal = floor (_min);
+ int maxVal = floor (_max);
+
+ if (!_actorPresent)
+ {
+ if (_imageReslicer==NULL)
+ {
+ _imageReslicer = vtkImageReslice::New();
+ _imageReslicer->SetInput( img );
+ _imageReslicer->SetInformationInput(img);
+ _imageReslicer->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+ _imageReslicer->SetOutputDimensionality(2);
+ _imageReslicer->SetInterpolationModeToLinear();
+ }
+
+ _imageReslicer->SetResliceAxesOrigin(0,0,z);
+
+ img = _imageReslicer->GetOutput();
+ img->Update();
+ img->UpdateInformation();
+
+ wxVtkBaseView *baseView = _baseView;
+
+ if (_thresholdTable==NULL)
+ {
+ //Lookup Table
+ _thresholdTable = vtkLookupTable::New();
+ _thresholdTable->SetNumberOfTableValues(maxTot+1);
+ _thresholdTable->SetTableRange(range);
+ _thresholdTable->SetAlphaRange(0, 1);
+ _thresholdTable->SetValueRange(0, 1);
+ _thresholdTable->SetSaturationRange(0, 0);
+ _thresholdTable->SetRampToLinear( );
+ }
+
+ //Assign a fake color for the upper image, and set the white as transparent
+ int i;
+ for(i = minTot; i <= maxTot; i++)
+ {
+ if( i >= minVal && i <= maxVal )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+ }
+ else if( i >= minTot && i < minVal )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else if( i > maxVal && i < maxTot )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ }
+ _thresholdTable->Build( );
+
+ if (_thresholdMapper==NULL)
+ {
+ _thresholdMapper = vtkImageMapToColors::New( );
+ }
+
+ _thresholdMapper->SetLookupTable( _thresholdTable );
+ _thresholdMapper->SetInput( img );
+
+ if (_thresholdActor==NULL)
+ {
+ _thresholdActor = vtkImageActor::New( );
+ _thresholdActor->SetOpacity( 0.6 );
+ _thresholdActor->InterpolateOn( );
+ _thresholdActor->SetPosition( 0,0, 900-1 );
+ }
+
+ _thresholdActor->SetInput( _thresholdMapper->GetOutput() );
+
+ baseView->GetRenderer()->AddActor( _thresholdActor );
+ _actorPresent = true;
+ }
+
+ else
+ {
+ _imageReslicer->SetResliceAxesOrigin(0,0,z);
+ img = _imageReslicer->GetOutput();
+ img->Update();
+ img->UpdateInformation();
+
+ //Assign a fake color for the upper image, and set the white as transparent
+ int i;
+ for(i = minTot; i <= maxTot; i++)
+ {
+ if( i >= minVal && i <= maxVal )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+ }
+ else if( i >= minTot && i < minVal )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else if( i > maxVal && i < maxTot )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ }
+
+ _thresholdTable->Build( );
+ _thresholdMapper->SetLookupTable( _thresholdTable );
+ _thresholdMapper->SetInput( img );
+ _thresholdActor->SetInput( _thresholdMapper->GetOutput() );
+ }
+ /*
+ vtkImageViewer2* viewer = vtkImageViewer2::New();
+ viewer->SetInput( upperImageActor->GetInput() );
+ viewer->SetColorLevel((range[1]-range[0])/2);
+ viewer->SetColorWindow(range[1]);
+ viewer->GetRenderer()->AddActor( upperImageActor );
+ viewer->Render();
+ */
+//EED _theViewPanel->RefreshInterface();
+}
+
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::onThresholdChange()
+{
+ if (_actorPresent)
+ {
+ onThreshold();
+ }
+}
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::onThresholdInterpolation(bool interpolate)
+{
+ if (_thresholdActor!=NULL)
+ {
+ if (interpolate)
+ {
+ _thresholdActor->InterpolateOn( );
+ }
+
+ else
+ {
+ _thresholdActor->InterpolateOff( );
+ }
+
+//EED _theViewPanel->RefreshInterface();
+ }
+}
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::onThresholdChangeOpacity (int opacity)
+{
+ if (_actorPresent)
+ {
+ _thresholdActor->SetOpacity(opacity*0.1);
+ }
+
+//EED _theViewPanel->RefreshInterface();
+}
+
+//----------------------------------------------------------------------------
+void ThresholdImageView::onThresholdRemove()
+{
+ if (_actorPresent)
+ {
+ wxVtkBaseView * baseView = _baseView;
+ baseView->GetRenderer()->RemoveActor( _thresholdActor );
+ _actorPresent = false;
+ }
+
+//EED _theViewPanel->RefreshInterface();
+}
+
+
+
+
+// EOF
+