wxVtk2DBaseView.cxx

Go to the documentation of this file.
00001 #include "wxVtk2DBaseView.h"
00002 
00003 #include "vtkInfoTextImage.h"
00004 #include "vtkInteractorStyleBaseView2D.h"
00005 #include "vtkInfoTextImageInteractor.h"
00006 
00007 
00008 wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent)
00009 :wxVtkBaseView(parent)
00010 {
00011    _imageViewer2XYZ   = NULL;
00012    _vtkIinfoTextImage = NULL;
00013 }
00014 
00015 //EED 5mai2009
00016 //-------------------------------------------------------------------
00017 wxVtk2DBaseView::~wxVtk2DBaseView()
00018 {       
00019         if (_vtkIinfoTextImage!=NULL) 
00020         {
00021            delete _vtkIinfoTextImage; 
00022         }
00023 
00024         if (_imageViewer2XYZ!=NULL) 
00025         {
00026            delete _imageViewer2XYZ; 
00027         }
00028 }
00029 
00030 //-------------------------------------------------------------------
00031 void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) //        virtual 
00032 {
00033 //EEDx5
00034         double spc[3];
00035 //      GetVtkBaseData()->GetImageData()->GetSpacing(spc);
00036 //JCP 04/08/10  W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
00037         vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
00038         if(image){
00039                 image->GetSpacing(spc);
00040         }else{
00041                 spc[0] = 1;
00042                 spc[1] = 1;
00043                 spc[2] = 1;
00044         }
00045         
00046 
00047         X = X / spc[0];
00048         Y = Y / spc[1];
00049         Z = Z / spc[2];
00050 
00051 }
00052 
00053 //-------------------------------------------------------------------
00054 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) //        virtual 
00055 {
00056 //EEDx5
00057         double spc[3];
00058 //      GetVtkBaseData()->GetImageData()->GetSpacing(spc);
00059 //JCP 04/08/10  W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
00060         vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
00061         if(image){
00062                 image->GetSpacing(spc);
00063         }else{
00064                 spc[0] = 1;
00065                 spc[1] = 1;
00066                 spc[2] = 1;
00067         }
00068 //
00069         X=X*spc[0];
00070         Y=Y*spc[1];
00071         Z=Z*spc[2];
00072 
00073 }
00074 
00075 //-------------------------------------------------------------------
00076 void wxVtk2DBaseView::ResetView()
00077 {
00078         double spx = 0,spy = 0,spz = 0;
00079         int x1 = 1,x2 = 1,y1 = 1,y2 = 1,z1 = 1,z2 = 1;
00080         wxVtkBaseView::Configure();
00081         
00082         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
00083         vtkImageData *imageData = GetVtkBaseData()->GetImageData();
00084         if(imageData){
00085                 imageData->UpdateInformation();
00086                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
00087                 imageData->Update();
00088                 _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
00089                 imageData->GetSpacing (spx,spy,spz);
00090                 imageData->GetExtent (x1,x2,y1,y2,z1,z2);
00091         }
00092 
00093         
00094         _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
00095         _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
00096 
00097         _imageViewer2XYZ->GetVtkImageViewer2()->Render();
00098 
00100         //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
00101         //
00102         // Previous version
00103         // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
00104         //
00105         // Actual version
00106         vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
00107 
00108         manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
00109         style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
00110 
00111         vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
00112         style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
00113 
00114         SetInteractorStyleImage( style2D );
00115 
00116         // RaC
00118         
00119 }
00120 
00121 
00122 //-------------------------------------------------------------------
00123 void wxVtk2DBaseView::Configure(bool okimage)
00124 {
00125         double spx,spy,spz;
00126         int x1,x2,y1,y2,z1,z2;
00127         wxVtkBaseView::Configure();
00128 
00129 // EED 17 Oct 2007
00130         if (_imageViewer2XYZ==NULL)
00131         {
00132                 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
00133                 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
00134                 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
00135 
00137                 //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
00138                 //
00139                 // Previous version
00140                 // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
00141                 //
00142                 // Actual version
00143                 vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
00144 
00145                 manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
00146                 style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
00147 
00148                 vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
00149                 style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
00150 
00151                 SetInteractorStyleImage( style2D );
00152 
00153                 // RaC
00155         }
00156 
00157 
00158         vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
00159         if (imageData!=NULL){
00160                 
00161                 imageData->UpdateInformation();
00162                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
00163                 imageData->Update();
00164                 if (okimage==true){
00165                         imageData->GetSpacing (spx,spy,spz);
00166                         imageData->GetExtent (x1,x2,y1,y2,z1,z2);
00167                         _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
00168                         _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
00169                         double range[2];
00170                         imageData->GetScalarRange(range);
00171                         if (range[1]<20000){
00172                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
00173                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
00174                         } else {
00175                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
00176                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
00177                         }
00178 // EED 31 Janvier 2007
00179 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
00180 //vtkimageactor->InterpolateOff ();
00181 //vtkLookupTable * _collookup = vtkLookupTable::New( );
00182 //_collookup->SetNumberOfColors( 256 );
00183 //_collookup->SetTableRange( 0 , 255 );
00184 //_collookup->Build( );
00185 //_collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
00186 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
00187 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
00188 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
00189 
00190 
00191 // EED 17 Oct 2007
00192 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
00193 
00194 
00195                         vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
00196                         vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
00197 
00198 //EED 17Avril2009       
00199 /*                      
00200                         camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
00201                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    ); 
00202                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
00203 */ 
00204                         camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
00205                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     ); 
00206                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
00207                         
00208                         
00209                         camera->SetClippingRange( 0.01                  , 1000000 );
00210                         camera->ComputeViewPlaneNormal();
00211                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
00212                         
00213                         // text information over the graphic window
00214                         if(_vtkIinfoTextImage == NULL){
00215                                 _vtkIinfoTextImage              = new vtkInfoTextImage();
00216                                 _vtkIinfoTextImageInteractor    = new vtkInfoTextImageInteractor();                             
00217                                 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
00218                         }
00219                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
00220                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
00221                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);                             
00222                         _vtkIinfoTextImage->Configure();
00223                         
00224                 } // okimage
00225         } // imageData
00226 }
00227 
00228 //-------------------------------------------------------------------
00229 
00230 int     wxVtk2DBaseView::GetActualSlice()  // virtual 
00231 {
00232    return (int)(_vtkbasedata->GetZ());
00233 }
00234 
00235 //-------------------------------------------------------------------
00236 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
00237 {
00238    _vtkbasedata->SetZ(slice);
00239 }
00240 
00241 //-------------------------------------------------------------------
00242 
00243 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
00244 {
00245    return _vtkbasedata;
00246 }
00247 
00248 //-------------------------------------------------------------------
00249 
00250 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
00251 {
00252    _vtkbasedata=vtkbasedata;
00253 }
00254 
00255 //-------------------------------------------------------------------
00256 
00257 void wxVtk2DBaseView::Refresh()
00258 {
00259    int z = (int)(GetVtkBaseData()->GetZ());
00260   _imageViewer2XYZ->SetZSlice( z ); 
00261 
00262    wxVtkBaseView::Refresh();
00263 }
00264 
00265 //-------------------------------------------------------------------
00266 
00267 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
00268 {
00269         SetInteractorStyleBaseView(interactorstylebaseview);
00270 
00271         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
00272         interactorstylebaseview->SetInteractor ( iren );
00273         iren->SetInteractorStyle(interactorstylebaseview);
00274         interactorstylebaseview->SetwxVtkBaseView(this);        
00275 
00276         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
00277         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
00278         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
00279         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
00280         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
00281         cbk->Delete();
00282 }
00283 
00284 //---------------------------------------------------------------------------
00285 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual 
00286 {
00287    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
00288 }
00289 //---------------------------------------------------------------------------
00290 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
00291 {
00292    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
00293 }
00294 
00295 //-------------------------------------------------------------------
00296 
00297 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
00298 {
00299    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
00300    if(imageData){
00301         imageData->GetSpacing(spc);
00302    }else{
00303          spc[0] = 0; 
00304          spc[1] = 0;
00305          spc[2] = 0;
00306    }
00307 }
00308 
00309 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
00310         if(_imageViewer2XYZ!=NULL){
00311                 _imageViewer2XYZ->setColorTransferFunction(colortable);
00312                 this->Refresh();
00313         }
00314 }
00315 
00316 void wxVtk2DBaseView::setWindowLevel(double level){
00317 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);  
00318 
00319         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
00320         imagemaptowindowlevel->SetWindow(level);
00321         this->Refresh();
00322 }
00323 
00324 void wxVtk2DBaseView::setColorLevel(double level){
00325 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
00326         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
00327         imagemaptowindowlevel->SetLevel(level);
00328         this->Refresh();
00329 }

Generated on 20 Oct 2010 for creaMaracasVisu_lib by  doxygen 1.6.1