/** * \file * \brief Class bbtk::ThresholdImageView . */ #include "LayerImageBase.h" LayerImageBase::LayerImageBase() { _actorPresent = false; _Z = 0; _thresholdTable = NULL; _thresholdMapper = NULL; _thresholdActor = NULL; _image = NULL; _baseView = NULL; _imageReslicer = vtkImageReslice::New(); } //---------------------------------------------------------------------------- LayerImageBase::~LayerImageBase() { } //---------------------------------------------------------------------------- void LayerImageBase::SetZ(int z) { _Z = z; } //---------------------------------------------------------------------------- int LayerImageBase::GetZ() // virtual { return _Z; } //---------------------------------------------------------------------------- vtkImageData* LayerImageBase::GetImage() { return _image; } //---------------------------------------------------------------------------- bool LayerImageBase::GetActorPresent() { return _actorPresent; } //---------------------------------------------------------------------------- void LayerImageBase::SetImage(vtkImageData* image) { _image = image; } //---------------------------------------------------------------------------- void LayerImageBase::SetwxVtkBaseView(wxVtkBaseView *baseview) { _baseView = baseview; } //---------------------------------------------------------------------------- wxVtkBaseView *LayerImageBase::GetwxVtkBaseView() { return _baseView; } //---------------------------------------------------------------------------- void LayerImageBase::Refresh() { if (_baseView!=NULL) { _baseView->Refresh(); } } //---------------------------------------------------------------------------- vtkLookupTable* LayerImageBase::GetThresholdTable() { return _thresholdTable; } //---------------------------------------------------------------------------- int LayerImageBase::CleanZ(int z) { int ext[6]; _image->GetWholeExtent(ext); if (z<0) { z=0; } if ( z > (ext[5]-ext[4]) ) { z=ext[5]-ext[4]; } return z; } //---------------------------------------------------------------------------- void LayerImageBase::onThreshold() { if ((_image!=NULL) && (_baseView!=NULL)) { int z=CleanZ( GetZ() ); if (!GetActorPresent()) { if (_thresholdTable==NULL) { //Lookup Table _thresholdTable = vtkLookupTable::New(); } // _thresholdTable if (_thresholdMapper==NULL) { _thresholdMapper = vtkImageMapToColors::New( ); } if (_thresholdActor==NULL) { _thresholdActor = vtkImageActor::New( ); _thresholdActor->SetOpacity( 0.6 ); _thresholdActor->InterpolateOn( ); _thresholdActor->SetPosition( 0,0, 900-1 ); } // _thresholdActor _baseView->GetRenderer()->AddActor( _thresholdActor ); _actorPresent = true; } // !GetActorPresent() ConfigLookupTable(); // virtual method _imageReslicer->SetInput( GetImage() ); _imageReslicer->SetInformationInput( GetImage() ); _imageReslicer->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1); _imageReslicer->SetOutputDimensionality(2); _imageReslicer->SetInterpolationModeToLinear(); _imageReslicer->SetResliceAxesOrigin(0,0,z); vtkImageData *img = _imageReslicer->GetOutput(); img->Update(); img->UpdateInformation(); _thresholdMapper->SetInput( img ); _thresholdMapper->SetLookupTable( _thresholdTable ); _thresholdActor->SetInput( _thresholdMapper->GetOutput() ); } // _image } //---------------------------------------------------------------------------- void LayerImageBase::onThresholdChange() { if (_actorPresent) { onThreshold(); } } //---------------------------------------------------------------------------- void LayerImageBase::onThresholdInterpolation(bool interpolate) { if (_thresholdActor!=NULL) { if (interpolate) { _thresholdActor->InterpolateOn( ); } else { _thresholdActor->InterpolateOff( ); } } } //---------------------------------------------------------------------------- void LayerImageBase::onThresholdChangeOpacity (int opacity) { if (_actorPresent) { _thresholdActor->SetOpacity(opacity*0.1); } } //---------------------------------------------------------------------------- void LayerImageBase::onThresholdRemove() { if (_actorPresent) { wxVtkBaseView * baseView = _baseView; baseView->GetRenderer()->RemoveActor( _thresholdActor ); _actorPresent = false; } } // EOF