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         this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
00037 
00038         X = X / spc[0];
00039         Y = Y / spc[1];
00040         Z = Z / spc[2];
00041 
00042 }
00043 
00044 //-------------------------------------------------------------------
00045 void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) //        virtual 
00046 {
00047 //EEDx5
00048         double spc[3];
00049 //      GetVtkBaseData()->GetImageData()->GetSpacing(spc);
00050         this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
00051 
00052         X=X*spc[0];
00053         Y=Y*spc[1];
00054         Z=Z*spc[2];
00055 
00056 }
00057 
00058 //-------------------------------------------------------------------
00059 void wxVtk2DBaseView::ResetView()
00060 {
00061         double spx,spy,spz;
00062         int x1,x2,y1,y2,z1,z2;
00063         wxVtkBaseView::Configure();
00064         
00065         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
00066         vtkImageData *imageData = GetVtkBaseData()->GetImageData();
00067         imageData->UpdateInformation();
00068         imageData->SetUpdateExtent( imageData->GetWholeExtent());
00069         imageData->Update();
00070 
00071         _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
00072         imageData->GetSpacing (spx,spy,spz);
00073         imageData->GetExtent (x1,x2,y1,y2,z1,z2);
00074         _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
00075         _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
00076 
00077         _imageViewer2XYZ->GetVtkImageViewer2()->Render();
00078         SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
00079         
00080 }
00081 
00082 
00083 //-------------------------------------------------------------------
00084 void wxVtk2DBaseView::Configure(bool okimage)
00085 {
00086         double spx,spy,spz;
00087         int x1,x2,y1,y2,z1,z2;
00088         wxVtkBaseView::Configure();
00089 
00090 // EED 17 Oct 2007
00091         if (_imageViewer2XYZ==NULL)
00092         {
00093                 _imageViewer2XYZ = new vtkImageViewer2_XYZ();
00094                 wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
00095                 _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
00096                 SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
00097         }
00098 
00099 
00100         vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
00101         if (imageData!=NULL){
00102                 imageData->UpdateInformation();
00103                 imageData->SetUpdateExtent( imageData->GetWholeExtent());
00104                 imageData->Update();
00105                 if (okimage==true){
00106                         imageData->GetSpacing (spx,spy,spz);
00107                         imageData->GetExtent (x1,x2,y1,y2,z1,z2);
00108 
00109 
00110                         _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
00111                         _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
00112                         double range[2];
00113                           imageData->GetScalarRange(range);
00114                           if (range[1]<20000){
00115                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
00116                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
00117                           } else {
00118                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
00119                                  _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
00120                           }
00121 // EED 31 Janvier 2007
00122 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
00123 //vtkimageactor->InterpolateOff ();
00124 //vtkLookupTable * _collookup = vtkLookupTable::New( );
00125 //_collookup->SetNumberOfColors( 256 );
00126 //_collookup->SetTableRange( 0 , 255 );
00127 //_collookup->Build( );
00128 //_collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
00129 //_collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
00130 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
00131 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
00132 
00133 
00134 // EED 17 Oct 2007
00135 //                      SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
00136 
00137 
00138                         vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
00139                         vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
00140 
00141 //EED 17Avril2009       
00142 /*                      
00143                         camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
00144                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    ); 
00145                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
00146 */ 
00147                         camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
00148                         camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     ); 
00149                         camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
00150                         
00151                         
00152                         camera->SetClippingRange( 0.01                  , 1000000 );
00153                         camera->ComputeViewPlaneNormal();
00154                         camera->SetParallelScale( spx*(x2-x1)/3.0 );
00155                         
00156                         // text information over the graphic window
00157                         if(_vtkIinfoTextImage == NULL){
00158                                 _vtkIinfoTextImage              = new vtkInfoTextImage();
00159                                 _vtkIinfoTextImageInteractor    = new vtkInfoTextImageInteractor();                             
00160                                 ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
00161                         }
00162                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
00163                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
00164                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);                             
00165                         _vtkIinfoTextImage->Configure();
00166                         
00167                 } // okimage
00168         } // imageData
00169 
00170 }
00171 
00172 //-------------------------------------------------------------------
00173 
00174 int     wxVtk2DBaseView::GetActualSlice()  // virtual 
00175 {
00176    return (int)(_vtkbasedata->GetZ());
00177 }
00178 
00179 //-------------------------------------------------------------------
00180 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
00181 {
00182    _vtkbasedata->SetZ(slice);
00183 }
00184 
00185 //-------------------------------------------------------------------
00186 
00187 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
00188 {
00189    return _vtkbasedata;
00190 }
00191 
00192 //-------------------------------------------------------------------
00193 
00194 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
00195 {
00196    _vtkbasedata=vtkbasedata;
00197 }
00198 
00199 //-------------------------------------------------------------------
00200 
00201 void wxVtk2DBaseView::Refresh()
00202 {
00203    int z = (int)(GetVtkBaseData()->GetZ());
00204   _imageViewer2XYZ->SetZSlice( z ); 
00205 
00206    wxVtkBaseView::Refresh();
00207 }
00208 
00209 //-------------------------------------------------------------------
00210 
00211 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
00212 {
00213         SetInteractorStyleBaseView(interactorstylebaseview);
00214 
00215         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
00216         interactorstylebaseview->SetInteractor ( iren );
00217         iren->SetInteractorStyle(interactorstylebaseview);
00218         interactorstylebaseview->SetwxVtkBaseView(this);        
00219 
00220         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
00221         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
00222         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
00223         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
00224         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
00225         cbk->Delete();
00226 }
00227 
00228 //---------------------------------------------------------------------------
00229 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual 
00230 {
00231    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
00232 }
00233 //---------------------------------------------------------------------------
00234 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
00235 {
00236    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
00237 }
00238 
00239 //-------------------------------------------------------------------
00240 
00241 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
00242 {
00243    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
00244    imageData->GetSpacing(spc);
00245 }
00246 
00247 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
00248         if(_imageViewer2XYZ!=NULL){
00249                 _imageViewer2XYZ->setColorTransferFunction(colortable);
00250                 this->Refresh();
00251         }
00252 }
00253 
00254 void wxVtk2DBaseView::setWindowLevel(double level){
00255 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);  
00256 
00257         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
00258         imagemaptowindowlevel->SetWindow(level);
00259         this->Refresh();
00260 }
00261 
00262 void wxVtk2DBaseView::setColorLevel(double level){
00263 //      _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
00264         vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
00265         imagemaptowindowlevel->SetLevel(level);
00266         this->Refresh();
00267 }

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1