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                         _vtkIinfoTextImage              = new vtkInfoTextImage();
00158                         _vtkIinfoTextImageInteractor    = new vtkInfoTextImageInteractor();
00159                         _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
00160                         _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
00161                         _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);     
00162                         _vtkIinfoTextImage->Configure();
00163                         ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
00164                 } // okimage
00165         } // imageData
00166 
00167 }
00168 
00169 //-------------------------------------------------------------------
00170 
00171 int     wxVtk2DBaseView::GetActualSlice()  // virtual 
00172 {
00173    return (int)(_vtkbasedata->GetZ());
00174 }
00175 
00176 //-------------------------------------------------------------------
00177 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
00178 {
00179    _vtkbasedata->SetZ(slice);
00180 }
00181 
00182 //-------------------------------------------------------------------
00183 
00184 vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
00185 {
00186    return _vtkbasedata;
00187 }
00188 
00189 //-------------------------------------------------------------------
00190 
00191 void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
00192 {
00193    _vtkbasedata=vtkbasedata;
00194 }
00195 
00196 //-------------------------------------------------------------------
00197 
00198 void wxVtk2DBaseView::Refresh()
00199 {
00200    int z = (int)(GetVtkBaseData()->GetZ());
00201   _imageViewer2XYZ->SetZSlice( z ); 
00202 
00203    wxVtkBaseView::Refresh();
00204 }
00205 
00206 //-------------------------------------------------------------------
00207 
00208 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
00209 {
00210         SetInteractorStyleBaseView(interactorstylebaseview);
00211 
00212         wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
00213         interactorstylebaseview->SetInteractor ( iren );
00214         iren->SetInteractorStyle(interactorstylebaseview);
00215         interactorstylebaseview->SetwxVtkBaseView(this);        
00216 
00217         vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
00218         cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
00219         interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
00220         interactorstylebaseview->AddObserver( vtkCommand::StartWindowLevelEvent, cbk );
00221         interactorstylebaseview->AddObserver( vtkCommand::ResetWindowLevelEvent, cbk );
00222         cbk->Delete();
00223 }
00224 
00225 //---------------------------------------------------------------------------
00226 vtkRenderer* wxVtk2DBaseView::GetRenderer()     // virtual 
00227 {
00228    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
00229 }
00230 //---------------------------------------------------------------------------
00231 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()           // virtual
00232 {
00233    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderWindow();
00234 }
00235 
00236 //-------------------------------------------------------------------
00237 
00238 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
00239 {
00240    vtkImageData *imageData      = GetVtkBaseData()->GetImageData();
00241    imageData->GetSpacing(spc);
00242 }
00243 
00244 void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable){
00245         if(_imageViewer2XYZ!=NULL){
00246                 _imageViewer2XYZ->setColorTransferFunction(colortable);
00247         }
00248 }

Generated on Wed Jul 29 16:35:31 2009 for creaMaracasVisu_lib by  doxygen 1.5.3