vtkMPR3DDataViewer.cxx

Go to the documentation of this file.
00001 
00002 #include "vtkMPR3DDataViewer.h"
00003 
00004 
00005 vtkMPR3DDataViewer::vtkMPR3DDataViewer()
00006 {
00007         _visiblePosition[0]=false;
00008         _visiblePosition[1]=false;
00009         _visiblePosition[2]=false;
00010         _ctfun = NULL;
00011         _vtkmprbasedata=NULL;
00012 
00013         _ctfun=NULL;
00014         _saggitalColors=NULL;
00015         _saggital=NULL;
00016         _axialColors=NULL;
00017         _axial=NULL;
00018         _coronalColors=NULL;
00019         _coronal=NULL;
00020         _mapOutline=NULL;
00021         _outline=NULL;
00022         _outlineData=NULL;
00023 }
00024 //-------------------------------------------------------------------
00025 vtkMPR3DDataViewer::~vtkMPR3DDataViewer()
00026 {
00027         _outlineData            -> Delete();
00028         _mapOutline                     -> Delete();
00029         _outline                        -> Delete();
00030 
00031 //      if (_bwLut)                             _bwLut                          -> Delete();
00032 //      if (_hueLut)                    _hueLut                         -> Delete();
00033 //      if (_satLut)                    _satLut                         -> Delete();
00034         if (_ctfun)                             _ctfun                          -> Delete();
00035         if (_saggitalColors)    _saggitalColors         -> Delete();
00036         if (_saggital)                  _saggital                       -> Delete();
00037         if (_axialColors)               _axialColors            -> Delete();
00038         if (_axial)                             _axial                          -> Delete();
00039         if (_coronalColors)             _coronalColors          -> Delete();
00040         if (_coronal)                   _coronal                        -> Delete();
00041 
00042 }
00043 //-------------------------------------------------------------------
00044 vtkActor* vtkMPR3DDataViewer::GetOutlineActor()
00045 {
00046         return _outline;
00047 }
00048 //-------------------------------------------------------------------
00049 vtkImageActor* vtkMPR3DDataViewer::GetImageActor(int id)
00050 {
00051         vtkImageActor *tmpVtkActor=NULL;
00052         if (id==0){
00053                 tmpVtkActor = GetvtkActor_saggital();
00054         }
00055         if (id==1){
00056                 tmpVtkActor = GetvtkActor_coronal();
00057         }
00058         if (id==2){
00059                 tmpVtkActor = GetvtkActor_axial();
00060         }
00061         return tmpVtkActor;
00062 }
00063 //-------------------------------------------------------------------
00064 void vtkMPR3DDataViewer::Refresh()
00065 {
00066         int x = (int)(_vtkmprbasedata->GetX());
00067         int y = (int)(_vtkmprbasedata->GetY());
00068         int z = (int)(_vtkmprbasedata->GetZ());
00069         SetPositionX( x );
00070         SetPositionY( y );
00071         SetPositionZ( z );
00072 }
00073 //-------------------------------------------------------------------
00074 void vtkMPR3DDataViewer::SetVtkMPRBaseData(vtkMPRBaseData *vtkmprbasedata)
00075 {
00076         _vtkmprbasedata=vtkmprbasedata;
00077 }
00078 //-------------------------------------------------------------------
00079 vtkMPRBaseData* vtkMPR3DDataViewer::GetVtkMPRBaseData()
00080 {
00081         return _vtkmprbasedata;
00082 }
00083 //-------------------------------------------------------------------
00084 
00085 vtkColorTransferFunction *vtkMPR3DDataViewer::GetvtkColorTransferFunction()
00086 {
00087         return _ctfun;
00088 }
00089 //-------------------------------------------------------------------
00090 
00091 std::vector<double>* vtkMPR3DDataViewer::GetctFunVectorPoint()
00092 {
00093         return &_ctFunVectorPoint;
00094 }
00095 //-------------------------------------------------------------------
00096 std::vector<double>*     vtkMPR3DDataViewer::GetctFunVectorRed()
00097 {
00098         return &_ctFunVectorRed;
00099 }
00100 
00101 //-------------------------------------------------------------------
00102 std::vector<double>*     vtkMPR3DDataViewer::GetctFunVectorGreen()
00103 {
00104         return &_ctFunVectorGreen;
00105 }
00106 
00107 //-------------------------------------------------------------------
00108 std::vector<double>*     vtkMPR3DDataViewer::GetctFunVectorBlue()
00109 {
00110         return &_ctFunVectorBlue;
00111 }
00112 
00113 //-------------------------------------------------------------------
00114 void vtkMPR3DDataViewer::Configure()
00115 {
00116 /*
00117   // Start by creatin a black/white lookup table.
00118         _bwLut = vtkLookupTable::New();
00119     _bwLut->SetTableRange (0, 2000);
00120     _bwLut->SetSaturationRange (0, 0);
00121     _bwLut->SetHueRange (0, 0);
00122     _bwLut->SetValueRange (0, 1);
00123 
00124   // Now create a lookup table that consists of the full hue circle
00125   // (from HSV).
00126         _hueLut = vtkLookupTable::New();
00127     _hueLut->SetTableRange (0, 2000);
00128     _hueLut->SetHueRange (0, 1);
00129     _hueLut->SetSaturationRange (1, 1);
00130     _hueLut->SetValueRange (1, 1);
00131 
00132   // Finally, create a lookup table with a single hue but having a range
00133   // in the saturation of the hue.
00134         _satLut = vtkLookupTable::New();
00135     _satLut->SetTableRange (0, 2000);
00136     _satLut->SetHueRange (.6, .6);
00137     _satLut->SetSaturationRange (0, 1);
00138     _satLut->SetValueRange (1, 1);
00139 */
00140 
00141 
00142         double range[2];
00143         _vtkmprbasedata->GetImageData()->GetScalarRange(range);
00144         double max = range[1];
00145 
00146         _ctFunVectorPoint.clear();
00147         _ctFunVectorPoint.push_back(max*0/4);
00148         _ctFunVectorPoint.push_back(max*1/4);
00149         _ctFunVectorPoint.push_back(max*2/4);
00150         _ctFunVectorPoint.push_back(max*3/4);
00151         _ctFunVectorPoint.push_back(max*4/4);
00152 
00153         _ctFunVectorRed.clear();
00154         _ctFunVectorRed.push_back(0.0);
00155         _ctFunVectorRed.push_back(1.0);
00156         _ctFunVectorRed.push_back(0.0);
00157         _ctFunVectorRed.push_back(0.0);
00158         _ctFunVectorRed.push_back(0.0);
00159 
00160         _ctFunVectorGreen.clear();
00161         _ctFunVectorGreen.push_back(0.0);
00162         _ctFunVectorGreen.push_back(0.0);
00163         _ctFunVectorGreen.push_back(0.0);
00164         _ctFunVectorGreen.push_back(1.0);
00165         _ctFunVectorGreen.push_back(0.2);
00166 
00167         _ctFunVectorBlue.clear();
00168         _ctFunVectorBlue.push_back(0.0);
00169         _ctFunVectorBlue.push_back(0.0);
00170         _ctFunVectorBlue.push_back(1.0);
00171         _ctFunVectorBlue.push_back(0.0);
00172         _ctFunVectorBlue.push_back(0.0);
00173 
00174 
00175         if(_ctfun==NULL){
00176                 _ctfun = vtkColorTransferFunction::New();
00177         }
00178         _ctfun->RemoveAllPoints();
00179 
00180         int i,size=_ctFunVectorPoint.size();
00181         for (i=0;i<size;i++)
00182         {
00183                 _ctfun->AddRGBPoint( _ctFunVectorPoint[i] , _ctFunVectorRed[i],_ctFunVectorGreen[i],_ctFunVectorBlue[i]);
00184                 
00185         }
00186 /*
00187         _ctfun->AddRGBPoint( 100 ,0 ,0,0);
00188         _ctfun->AddRGBPoint( 200 ,1 ,0,0);
00189         _ctfun->AddRGBPoint( 300 ,0 ,1,0);
00190         _ctfun->AddRGBPoint( 400 ,0 ,0,1);
00191 */
00192 //      void *p=this; // JPRx
00193 
00194   // Create the first of the three planes. The filter vtkImageMapToColors
00195   // maps the data through the corresponding lookup table created above.  The
00196   // vtkImageActor is a type of vtkProp and conveniently displays an image on
00197   // a single quadrilateral plane. It does this using texture mapping and as
00198   // a result is quite fast. (Note: the input image has to be unsigned char
00199   // values, which the vtkImageMapToColors produces.) Note also that by
00200   // specifying the DisplayExtent, the pipeline requests data of this extent
00201   // and the vtkImageMapToColors only processes a slice of data.
00202         
00203         if(_saggitalColors==NULL){
00204                 _saggitalColors = vtkImageMapToColors::New();
00205         }
00206         _saggitalColors->RemoveAllInputs();
00207         
00208     _saggitalColors->SetInput( _vtkmprbasedata->GetImageData() );
00209 //    _saggitalColors->SetLookupTable(_bwLut);
00210         
00211     _saggitalColors->SetLookupTable(_ctfun);
00212 
00213         
00214 
00215         if(_saggital==NULL){
00216                 _saggital = vtkImageActor::New();
00217                 _saggital->SetInput(_saggitalColors->GetOutput());
00218         }       
00219         //_saggitalColors->Update();
00220     
00221 
00222 
00223   // Create the second (axial) plane of the three planes. We use the
00224   // same approach as before except that the extent differs.
00225 
00226         
00227         if(_axialColors==NULL){
00228                 _axialColors = vtkImageMapToColors::New();
00229         }
00230 
00231         _axialColors->RemoveAllInputs();
00232     _axialColors->SetInput( _vtkmprbasedata->GetImageData() );
00233 //    _axialColors->SetLookupTable(_hueLut);
00234     _axialColors->SetLookupTable(_ctfun);
00235 
00236         if(_axial==NULL){
00237                 _axial = vtkImageActor::New();
00238                 _axial->SetInput(_axialColors->GetOutput());
00239         }
00240         
00241         //_axialColors->Update();
00242     
00243 
00244         // Create the third (coronal) plane of the three planes. We use 
00245   // the same approach as before except that the extent differs.
00246         if(_coronalColors==NULL){
00247                 _coronalColors = vtkImageMapToColors::New();
00248         }
00249         _coronalColors->RemoveAllInputs();
00250     _coronalColors->SetInput( _vtkmprbasedata->GetImageData() );
00251 //    _coronalColors->SetLookupTable(_satLut);
00252     _coronalColors->SetLookupTable(_ctfun);
00253 
00254         if(_coronal==NULL){
00255                 _coronal = vtkImageActor::New();
00256                 _coronal->SetInput(_coronalColors->GetOutput());
00257         }
00258         
00259     
00260 
00261   // An outline provides context around the data.
00262   //
00263         if(_outlineData==NULL){
00264                 _outlineData = vtkOutlineFilter::New();
00265         }
00266         _outlineData->RemoveAllInputs();
00267     _outlineData->SetInput((vtkDataSet *) _vtkmprbasedata->GetImageData() );
00268 
00269         if(_mapOutline==NULL){
00270                 _mapOutline = vtkPolyDataMapper::New();
00271                 _mapOutline->SetInput(_outlineData->GetOutput());
00272         }
00273         _mapOutline->Update();    
00274         //_mapOutline->RemoveAllInputs();
00275     
00276         if(_outline==NULL){
00277                 _outline = vtkActor::New();
00278                 _outline->SetMapper(_mapOutline);
00279                 _outline->GetProperty()->SetColor(0,0,0);
00280         }
00281         
00282     
00283 
00284         int ext[6];
00285         _vtkmprbasedata->GetImageData()->GetExtent(ext);
00286 
00287         
00288 
00289 
00290 }
00291 
00292 //-------------------------------------------------------------------
00293 vtkImageActor * vtkMPR3DDataViewer::GetvtkActor_saggital()
00294 {
00295         return _saggital;
00296 }
00297 //-------------------------------------------------------------------
00298 vtkImageActor * vtkMPR3DDataViewer::GetvtkActor_coronal()
00299 {
00300         return _coronal;
00301 }
00302 //-------------------------------------------------------------------
00303 vtkImageActor * vtkMPR3DDataViewer::GetvtkActor_axial()
00304 {
00305         return _axial;
00306 }
00307 
00308 //------------------------------------------------------------------------
00309 void vtkMPR3DDataViewer::SetPositionX(int pos){
00310         int x1,x2,y1,y2,z1,z2;
00311         _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
00312         _saggital->SetDisplayExtent( pos , pos , y1 ,y2 , z1 , z2 );
00313 }
00314 //------------------------------------------------------------------------
00315 void vtkMPR3DDataViewer::SetPositionY(int pos){
00316         int x1,x2,y1,y2,z1,z2;
00317         _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
00318         _coronal->SetDisplayExtent(x1,x2, pos,pos, z1,z2);
00319 }
00320 //------------------------------------------------------------------------
00321 void vtkMPR3DDataViewer::SetPositionZ(int pos){
00322         int x1,x2,y1,y2,z1,z2;
00323         _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
00324         _axial->SetDisplayExtent(x1,x2, y1,y2, pos,pos);
00325 }
00326 //-------------------------------------------------------------------
00327 void vtkMPR3DDataViewer::SetVisiblePosition(int idPosition, bool visible)
00328 {
00329         _visiblePosition[idPosition]=visible;
00330 }
00331 //-------------------------------------------------------------------
00332 bool vtkMPR3DDataViewer::GetVisiblePosition(int idPosition)
00333 {
00334         return _visiblePosition[idPosition];
00335 }

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