X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FThresholdImageView%2FLayerImageBase.cxx;h=c295169ae16fc898a8eb0fab5bb0708ab31cde3e;hb=f9901e756bb82bd333310b47607875331616bb29;hp=f7d28feb9559e31fc364fc435bea5e149ac6de58;hpb=d72fc9a08cb41078907e50e4d519461b7a88c367;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/ThresholdImageView/LayerImageBase.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/ThresholdImageView/LayerImageBase.cxx index f7d28fe..c295169 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/ThresholdImageView/LayerImageBase.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/ThresholdImageView/LayerImageBase.cxx @@ -32,7 +32,7 @@ #include "wxMPRBaseData.h" #include "wxVtk2DBaseView.h" -#include "wxVTKRenderWindowInteractor.h" +#include "creawxVTKRenderWindowInteractor.h" #include "vtkTextProperty.h" @@ -67,7 +67,7 @@ class ColorLayerObserver : public vtkCommand{ _layerimagebase->SetX( vtkmprbasedata->GetX() ); _layerimagebase->SetY( vtkmprbasedata->GetY() ); _layerimagebase->SetZ( vtkmprbasedata->GetZ() ); - _layerimagebase->onThresholdChange(); + _layerimagebase->onThresholdChange(); } // if basedata } // if wxvtkbaseview @@ -94,16 +94,18 @@ private: LayerImageBase::LayerImageBase() { _actorPresent = false; - _X = 0; - _Y = 0; - _Z = 0; - _thresholdTable = NULL; + _X = -1; + _Y = -1; + _Z = -1; + _opacity = 1; + _thresholdTable = NULL; _thresholdMapper = NULL; - _scalarbarActor = NULL; - _thresholdActor = NULL; + _scalarbarActor = NULL; + _thresholdActor = NULL; _image = NULL; _baseView = NULL; _imageReslicer = vtkImageReslice::New(); + _imageChangeInformation = vtkImageChangeInformation::New(); } //---------------------------------------------------------------------------- @@ -150,7 +152,15 @@ int LayerImageBase::GetZ() // virtual //---------------------------------------------------------------------------- vtkImageData* LayerImageBase::GetImage() { - return _image; +// return _image; + vtkImageData *result; + if (_image==NULL) + { + result = NULL; + } else { + result = _imageChangeInformation->GetOutput(); + } + return result; } //---------------------------------------------------------------------------- @@ -160,33 +170,177 @@ bool LayerImageBase::GetActorPresent() } - //---------------------------------------------------------------------------- void LayerImageBase::SetImage(vtkImageData* image) { - double spc[3]; - int ext[6]; + int ext[6]; + double spcBase[3]; + int dimensionOriginalLayer[3]; + int dimBase[6]; + + ext[0]=0; + ext[1]=0; + ext[2]=0; + ext[3]=0; + ext[4]=0; + ext[5]=0; + spcBase[0]=0; + spcBase[1]=0; + spcBase[2]=0; + spcBase[3]=0; + spcBase[4]=0; + spcBase[5]=0; + _image = image; - _image->GetSpacing(spc); - _image->GetWholeExtent(ext); - int sx=ext[1]-ext[0]+1; - int sy=ext[3]-ext[2]+1; - int sz=ext[5]-ext[4]+1; - int ssx=(sx/2)*spc[0]; - int ssy=(sy/2)*spc[1]; - int ssz=(sz/2)*spc[2]; - SetX( ssx ); - SetY( ssy ); - SetZ( ssz ); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 _image->Update(); - _image->GetScalarRange( _range ); + _image->GetWholeExtent(ext); +#else + _image->GetExtent(ext); +#endif + + dimensionOriginalLayer[0] = ext[1]-ext[0]+1; + dimensionOriginalLayer[1] = ext[3]-ext[2]+1; + dimensionOriginalLayer[2] = ext[5]-ext[4]+1; + SetDimensionOriginalLayer(dimensionOriginalLayer); + double spcOriginalLayer[3]; + _image->GetSpacing(spcOriginalLayer); + SetSpcOriginalLayer(spcOriginalLayer); + if (GetwxVtkBaseView()!=NULL) + { + vtkImageData *imagebase = GetwxVtkBaseView()->GetVtkBaseData()->GetImageData(); + if (imagebase!=NULL) + { + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + imagebase->GetWholeExtent(ext); +#else + imagebase->GetExtent(ext); +#endif + + dimBase[0]=ext[1]-ext[0]+1; + dimBase[1]=ext[3]-ext[2]+1; + dimBase[2]=ext[5]-ext[4]+1; + SetDimensionBase(dimBase); + imagebase->GetSpacing(spcBase); + SetSpcBase(spcBase); + + if ((_X<0) || (_X>dimBase[0])) { SetX( dimBase[0]/2 ); } + if ((_Y<0) || (_Y>dimBase[1])) { SetY( dimBase[1]/2 ); } + if ((_Z<0) || (_Z>dimBase[2])) { SetZ( dimBase[2]/2 ); } + + + } // if imagebase + } // if wxvtkbaseview + _image->GetScalarRange( _range ); +// _thresholdTable = vtkLookupTable::New(); + + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + _imageChangeInformation->SetInput(_image); +#else + _imageChangeInformation->SetInputData(_image); + _imageChangeInformation->Update(); +#endif + +} + +//------------------------------------------------------------------------------ +void LayerImageBase::SetSpcOriginalLayer(double spc[3]) +{ + _spcOriginalLayer[0] = spc[0]; + _spcOriginalLayer[1] = spc[1]; + _spcOriginalLayer[2] = spc[2]; +} + +//------------------------------------------------------------------------------ +void LayerImageBase::SetNewSpacingLayer(double spc[3]) +{ + _newSpcLayer[0] = spc[0]; + _newSpcLayer[1] = spc[1]; + _newSpcLayer[2] = spc[2]; + _imageChangeInformation->SetOutputSpacing( _newSpcLayer ); + +} + + +//------------------------------------------------------------------------------ +void LayerImageBase::SetSpcBase(double spc[3]) +{ + _spcBase[0] = spc[0]; + _spcBase[1] = spc[1]; + _spcBase[2] = spc[2]; } +//------------------------------------------------------------------------------ +void LayerImageBase::SetDimensionOriginalLayer(int dim[3]) +{ + _dimOriginalLayer[0] = dim[0]; + _dimOriginalLayer[1] = dim[1]; + _dimOriginalLayer[2] = dim[2]; +} + +//------------------------------------------------------------------------------ +void LayerImageBase::SetDimensionBase(int dim[3]) +{ + _dimBase[0] = dim[0]; + _dimBase[1] = dim[1]; + _dimBase[2] = dim[2]; +} + + + +//------------------------------------------------------------------------------ +void LayerImageBase::GetSpcOriginalLayer(double *spc) +{ + spc[0] = _spcOriginalLayer[0]; + spc[1] = _spcOriginalLayer[1]; + spc[2] = _spcOriginalLayer[2]; +} + +//------------------------------------------------------------------------------ +void LayerImageBase::GetSpcBase(double *spc) +{ + spc[0] = _spcBase[0]; + spc[1] = _spcBase[1]; + spc[2] = _spcBase[2]; +} + +//------------------------------------------------------------------------------ +void LayerImageBase::GetDimensionOriginalLayer(int *dim) +{ + dim[0] = _dimOriginalLayer[0]; + dim[1] = _dimOriginalLayer[1]; + dim[2] = _dimOriginalLayer[2]; +} + +//------------------------------------------------------------------------------ +void LayerImageBase::GetDimensionBase(int *dim) +{ + dim[0] = _dimBase[0]; + dim[1] = _dimBase[1]; + dim[2] = _dimBase[2]; +} + + +//------------------------------------------------------------------------------ +void LayerImageBase::SetColorBarPosition(std::vector &colorbarposition) +{ + _colorBarPosition=colorbarposition; +} + +//------------------------------------------------------------------------------ void LayerImageBase::SetRangeForColorBar(std::vector &range) { _rangeForColorBar=range; } + +//------------------------------------------------------------------------------ void LayerImageBase::GetRangeForColorBar(double &minRange, double &maxRange) { if (_rangeForColorBar.size()==2) @@ -210,7 +364,6 @@ void LayerImageBase::SetwxVtkBaseView(wxVtkBaseView *baseview) ColorLayerObserver *colorlayerobserver = ColorLayerObserver::New(); _baseView->GetVtkBaseData()->AddObserver( 1, colorlayerobserver ); colorlayerobserver->SetLayerImageBase(this); - } // if _baseView } @@ -239,40 +392,35 @@ vtkLookupTable* LayerImageBase::GetThresholdTable() //---------------------------------------------------------------------------- void LayerImageBase::CleanXYZ(double &x, double &y, double &z) { - int ext[6]; - _image->GetWholeExtent(ext); - if (x<0) { x=0; } - if (y<0) { y=0; } - if (z<0) { z=0; } - - if ( x > (ext[1]-ext[0]) ) + double maxSize; + maxSize=_dimOriginalLayer[0]*_newSpcLayer[0]; + if ( x > maxSize ) { - z=ext[1]-ext[0]; + x=maxSize; } - - if ( y > (ext[3]-ext[2]) ) + maxSize=_dimOriginalLayer[1]*_newSpcLayer[1]; + if ( y > maxSize ) { - z=ext[3]-ext[2]; + y = maxSize; } - - if ( z > (ext[5]-ext[4]) ) + maxSize=_dimOriginalLayer[2]*_newSpcLayer[2]; + if ( z > maxSize ) { - z=ext[5]-ext[4]; + z = maxSize; } - - + } //---------------------------------------------------------------------------- @@ -280,16 +428,15 @@ void LayerImageBase::onThreshold() { if ((_image!=NULL) && (_baseView!=NULL)) { - double spc[3]; - GetImage()-> GetSpacing(spc); double x=GetX(); double y=GetY(); double z=GetZ(); - CleanXYZ(x,y,z); - x = x*spc[0]; - y = y*spc[1]; - z = z*spc[2]; + x = x*_spcBase[0]; + y = y*_spcBase[1]; + z = z*_spcBase[2]; + + CleanXYZ(x,y,z); vtkCamera *camera = _baseView->GetRenderer()->GetActiveCamera(); int directionViewer=0; @@ -317,8 +464,18 @@ void LayerImageBase::onThreshold() { _thresholdActor = vtkImageActor::New( ); _scalarbarActor = vtkScalarBarActor::New(); - _thresholdActor->SetOpacity( 0.6 ); + if (_colorBarPosition.size()==2) + { + _scalarbarActor->SetDisplayPosition(_colorBarPosition[0],_colorBarPosition[1]); + } else { + _scalarbarActor->SetDisplayPosition(0,0); + } + _scalarbarActor->SetHeight(0.4); //default 0.8 + _scalarbarActor->SetWidth(0.08); //default 0.17 + + _thresholdActor->SetOpacity( 1 ); _thresholdActor->InterpolateOn( ); + if (directionViewer==0) { _thresholdActor->SetPosition( 900-1,0,0 ); @@ -340,7 +497,14 @@ void LayerImageBase::onThreshold() } // !GetActorPresent() ConfigLookupTable(); // virtual method + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 _imageReslicer->SetInput( GetImage() ); +#else + _imageReslicer->SetInputData( GetImage() ); +#endif + _imageReslicer->SetInformationInput( GetImage() ); if (directionViewer==0) @@ -361,29 +525,48 @@ void LayerImageBase::onThreshold() _imageReslicer->SetResliceAxesOrigin(0,0,z); } - _imageReslicer->SetOutputDimensionality(2); // _imageReslicer->SetInterpolationModeToLinear(); _imageReslicer->SetInterpolationModeToNearestNeighbor(); - + _imageReslicer->Modified(); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + // .. +#else + _imageReslicer->Update(); +#endif vtkImageData *img = _imageReslicer->GetOutput(); // img->Update(); // img->UpdateInformation(); - // _thresholdTable->Update(); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 _thresholdMapper->SetInput( img ); +#else + _thresholdMapper->SetInputData( img ); +#endif + _thresholdMapper->SetLookupTable( _thresholdTable ); + + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 _thresholdActor->SetInput( _thresholdMapper->GetOutput() ); +#else + _thresholdMapper->Update(); + _thresholdActor->SetInputData( _thresholdMapper->GetOutput() ); +#endif -// _scalarbarActor->SetLookupTable( _thresholdTable ); - _scalarbarActor->SetLookupTable( _thresholdMapper->GetLookupTable() ); + _thresholdActor->SetOpacity(_opacity); + _scalarbarActor->SetLookupTable( _thresholdTable ); +// _scalarbarActor->SetLookupTable( _thresholdMapper->GetLookupTable() ); _scalarbarActor->SetTitle("Value"); _scalarbarActor->SetNumberOfLabels(4); int fontsize = _scalarbarActor->GetLabelTextProperty()->GetFontSize(); _scalarbarActor->GetLabelTextProperty()->SetFontSize(fontsize/2); - // _scalarbarActor->SetTextPad(4); ?? - } // _image } @@ -419,8 +602,10 @@ void LayerImageBase::onThresholdChangeOpacity (int opacity) { if (_actorPresent) { - _thresholdActor->SetOpacity(opacity*0.1); + _thresholdActor->SetOpacity(opacity/100.0); } +// EED 2017-12-17 + _opacity = (double)opacity/100.0; } //---------------------------------------------------------------------------- @@ -431,24 +616,30 @@ void LayerImageBase::onThresholdRemove() wxVtkBaseView * baseView = _baseView; baseView->GetRenderer()->RemoveActor( _thresholdActor ); baseView->GetRenderer()->RemoveActor( _scalarbarActor ); - _actorPresent = false; - } + } // if _actorPresent } //---------------------------------------------------------------------------- -vtkLookupTable *LayerImageBase::GetvtkLookupTable() +vtkImageReslice *LayerImageBase::GetvtkImageReslice() { - return _thresholdTable; + return _imageReslicer; } //---------------------------------------------------------------------------- -vtkImageReslice *LayerImageBase::GetvtkImageReslice() +void LayerImageBase::GetImageScalarRange() { - return _imageReslicer; + double min,max; + GetRangeForColorBar(min,max); +// _image->GetScalarRange(_range); + _range[0]=min; + _range[1]=max; } - +vtkScalarsToColors* LayerImageBase::GetLookupTable() +{ + return _thresholdTable; +} // EOF