X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxVtk2DBaseView.cxx;h=6e9a593ecf92b19d245dcbdbc1d104e42d31391d;hb=439cc05f12e61d0ba090ec0c2ba8701d382238d7;hp=e703115d09b08fa97a262b39cfe6158d7f74a1cb;hpb=0e9c6cea471e235717da5cac8b924254ed3f4f75;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx index e703115..6e9a593 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx @@ -1,8 +1,34 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + #include "wxVtk2DBaseView.h" #include "vtkInfoTextImage.h" #include "vtkInteractorStyleBaseView2D.h" #include "vtkInfoTextImageInteractor.h" +#include "vtkImageActor.h" wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent) @@ -15,25 +41,34 @@ wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent) //EED 5mai2009 //------------------------------------------------------------------- wxVtk2DBaseView::~wxVtk2DBaseView() -{ - if (_vtkIinfoTextImage!=NULL) +{ + if (_vtkIinfoTextImage!=NULL) { - delete _vtkIinfoTextImage; + delete _vtkIinfoTextImage; } - if (_imageViewer2XYZ!=NULL) + if (_imageViewer2XYZ!=NULL) { - delete _imageViewer2XYZ; + delete _imageViewer2XYZ; } } //------------------------------------------------------------------- -void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) // virtual +void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) // virtual { //EEDx5 double spc[3]; // GetVtkBaseData()->GetImageData()->GetSpacing(spc); - this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc); +//JCP 04/08/10 W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc); + vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput(); + if(image){ + image->GetSpacing(spc); + }else{ + spc[0] = 1; + spc[1] = 1; + spc[2] = 1; + } + X = X / spc[0]; Y = Y / spc[1]; @@ -42,13 +77,21 @@ void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double & } //------------------------------------------------------------------- -void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) // virtual +void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) // virtual { //EEDx5 double spc[3]; // GetVtkBaseData()->GetImageData()->GetSpacing(spc); - this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc); - +//JCP 04/08/10 W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc); + vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput(); + if(image){ + image->GetSpacing(spc); + }else{ + spc[0] = 1; + spc[1] = 1; + spc[2] = 1; + } +// X=X*spc[0]; Y=Y*spc[1]; Z=Z*spc[2]; @@ -58,24 +101,31 @@ void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double & //------------------------------------------------------------------- void wxVtk2DBaseView::ResetView() { - double spx,spy,spz; - int x1,x2,y1,y2,z1,z2; + printf("EED wxVtk2DBaseView::ResetView"); + double spx = 0,spy = 0,spz = 0; + int x1 = 1,x2 = 1,y1 = 1,y2 = 1,z1 = 1,z2 = 1; wxVtkBaseView::Configure(); - + wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor(); vtkImageData *imageData = GetVtkBaseData()->GetImageData(); - imageData->UpdateInformation(); - imageData->SetUpdateExtent( imageData->GetWholeExtent()); - imageData->Update(); + if(imageData){ + imageData->UpdateInformation(); + imageData->SetUpdateExtent( imageData->GetWholeExtent()); + imageData->Update(); + _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData ); + imageData->GetSpacing (spx,spy,spz); + imageData->GetExtent (x1,x2,y1,y2,z1,z2); + } + - _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData ); - imageData->GetSpacing (spx,spy,spz); - imageData->GetExtent (x1,x2,y1,y2,z1,z2); _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2); _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren ); +//EED 24oct2010 + _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified(); + _imageViewer2XYZ->GetVtkImageViewer2()->Render(); - + ////////////// //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor. // @@ -87,7 +137,7 @@ void wxVtk2DBaseView::ResetView() manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel(); style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel ); - + vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ(); style2D->SetInteractorScrollZ(_vtkInteractorScrollZ); @@ -95,7 +145,18 @@ void wxVtk2DBaseView::ResetView() // RaC ////////////// - + +} + + + +//------------------------------------------------------------------- +void wxVtk2DBaseView::SetImageToVtkViewer(vtkImageData *imageData) +{ + if (_imageViewer2XYZ!=NULL) + { + _imageViewer2XYZ->GetVtkImageViewer2()->SetInput( imageData ); + } // if _imageViewer2XYZ } @@ -112,7 +173,7 @@ void wxVtk2DBaseView::Configure(bool okimage) _imageViewer2XYZ = new vtkImageViewer2_XYZ(); wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor(); _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren ); - + ////////////// //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor. // @@ -124,7 +185,7 @@ void wxVtk2DBaseView::Configure(bool okimage) manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel(); style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel ); - + vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ(); style2D->SetInteractorScrollZ(_vtkInteractorScrollZ); @@ -132,31 +193,33 @@ void wxVtk2DBaseView::Configure(bool okimage) // RaC ////////////// - } vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData(); - if (imageData!=NULL){ + if (imageData!=NULL) + { imageData->UpdateInformation(); imageData->SetUpdateExtent( imageData->GetWholeExtent()); imageData->Update(); if (okimage==true){ imageData->GetSpacing (spx,spy,spz); imageData->GetExtent (x1,x2,y1,y2,z1,z2); - - - _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData ); + SetImageToVtkViewer(imageData); _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2); + +/*EED Borrame, now is syncroniced in vtkBaseData for all windows double range[2]; - imageData->GetScalarRange(range); - if (range[1]<20000){ + imageData->GetScalarRange(range); + if (range[1]<20000){ _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 ); _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 ); - } else { + } else { _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 ); _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 ); - } + } +*/ + // EED 31 Janvier 2007 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor (); //vtkimageactor->InterpolateOff (); @@ -174,79 +237,91 @@ void wxVtk2DBaseView::Configure(bool okimage) // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() ); - vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2(); - vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera(); + vtkImageViewer2 *IV2 = _imageViewer2XYZ->GetVtkImageViewer2(); + vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera(); -//EED 17Avril2009 -/* +//EED 17Avril2009 +//EED 21 mars 2012 FLIP problem ..PLOP.. + + // XY camera->SetViewUp ( spx*0 , -spy*1 , spz*0 ); - camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000 ); - camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 ); -*/ + camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000 ); + camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 ); +/* camera->SetViewUp ( spx*0 , spy*1 , spz*0 ); - camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000 ); - camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 ); - + camera->SetPosition ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000 ); + camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0 ); +*/ + camera->SetClippingRange( 0.01 , 1000000 ); camera->ComputeViewPlaneNormal(); camera->SetParallelScale( spx*(x2-x1)/3.0 ); - + // text information over the graphic window if(_vtkIinfoTextImage == NULL){ - _vtkIinfoTextImage = new vtkInfoTextImage(); - _vtkIinfoTextImageInteractor = new vtkInfoTextImageInteractor(); + _vtkIinfoTextImage = new vtkInfoTextImage(); + _vtkIinfoTextImageInteractor = new vtkInfoTextImageInteractor(); ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor); } _vtkIinfoTextImage->SetWxVtk2DBaseView(this); _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() ); - _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage); + _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage); _vtkIinfoTextImage->Configure(); - + } // okimage } // imageData - } //------------------------------------------------------------------- -int wxVtk2DBaseView::GetActualSlice() // virtual +int wxVtk2DBaseView::GetActualSlice() // virtual { - return (int)(_vtkbasedata->GetZ()); + return (int)(GetVtkBaseData()->GetZ()); } //------------------------------------------------------------------- void wxVtk2DBaseView::SetActualSlice(int slice) // Virtual { - _vtkbasedata->SetZ(slice); + GetVtkBaseData()->SetZ(slice); } -//------------------------------------------------------------------- - -vtkBaseData *wxVtk2DBaseView::GetVtkBaseData() -{ - return _vtkbasedata; -} //------------------------------------------------------------------- - -void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata) +void wxVtk2DBaseView::UpdateColorWindowLevel() { - _vtkbasedata=vtkbasedata; + //EED 24oct2010 + //EED 02nov2012 + +// vtkImageViewer2 *vtkimageviewer2 = _imageViewer2XYZ->GetVtkImageViewer2(); + + + vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel(); + imagemaptowindowlevel->SetWindow( GetVtkBaseData()->GetColorWindow() ); + imagemaptowindowlevel->SetLevel( GetVtkBaseData()->GetColorLevel() ); + +// EED Borrame +// vtkimageviewer2->SetColorWindow( GetVtkBaseData()->GetColorWindow() ); +// vtkimageviewer2->SetColorLevel( GetVtkBaseData()->GetColorLevel() ); + _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified(); } //------------------------------------------------------------------- - void wxVtk2DBaseView::Refresh() { - int z = (int)(GetVtkBaseData()->GetZ()); - _imageViewer2XYZ->SetZSlice( z ); + int z = (int)(GetVtkBaseData()->GetZ()); + _imageViewer2XYZ->SetZSlice( z ); - wxVtkBaseView::Refresh(); +//EED 2016/02/19 + vtkImageActor *imageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor(); + imageactor->SetInterpolate( GetVtkBaseData()->GetInterpolate() ); + + //EED 01nov2012 + UpdateColorWindowLevel(); + wxVtkBaseView::Refresh(); } //------------------------------------------------------------------- - void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview) { SetInteractorStyleBaseView(interactorstylebaseview); @@ -254,7 +329,7 @@ void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *intera wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor(); interactorstylebaseview->SetInteractor ( iren ); iren->SetInteractorStyle(interactorstylebaseview); - interactorstylebaseview->SetwxVtkBaseView(this); + interactorstylebaseview->SetwxVtkBaseView(this); vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New(); cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2(); @@ -265,10 +340,11 @@ void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *intera } //--------------------------------------------------------------------------- -vtkRenderer* wxVtk2DBaseView::GetRenderer() // virtual +vtkRenderer* wxVtk2DBaseView::GetRenderer() // virtual { return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer(); } + //--------------------------------------------------------------------------- vtkRenderWindow* wxVtk2DBaseView::GetRenWin() // virtual { @@ -276,31 +352,48 @@ vtkRenderWindow* wxVtk2DBaseView::GetRenWin() // virtual } //------------------------------------------------------------------- - void wxVtk2DBaseView::GetSpacing(double spc[3]) // virtual { vtkImageData *imageData = GetVtkBaseData()->GetImageData(); - imageData->GetSpacing(spc); + if(imageData) + { + imageData->GetSpacing(spc); + }else{ + spc[0] = 0; + spc[1] = 0; + spc[2] = 0; + } } -void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){ - if(_imageViewer2XYZ!=NULL){ +//------------------------------------------------------------------- +void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable) +{ + if(_imageViewer2XYZ!=NULL) + { _imageViewer2XYZ->setColorTransferFunction(colortable); this->Refresh(); } } -void wxVtk2DBaseView::setWindowLevel(double level){ -// _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level); - - vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel(); - imagemaptowindowlevel->SetWindow(level); +//------------------------------------------------------------------- +void wxVtk2DBaseView::SetColorWindow(double level) +{ +// _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level); + GetVtkBaseData()->SetColorWindow(level); this->Refresh(); } -void wxVtk2DBaseView::setColorLevel(double level){ +//------------------------------------------------------------------- +void wxVtk2DBaseView::SetColorLevel(double level) +{ // _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level); - vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel(); - imagemaptowindowlevel->SetLevel(level); + GetVtkBaseData()->SetColorLevel(level); this->Refresh(); } + +//------------------------------------------------------------------- +int wxVtk2DBaseView::GetDirection() // virtual +{ + return 2; +} +