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
00032
00033
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
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 double range[2];
00143 double max;
00144
00145 if(_vtkmprbasedata->GetImageData()){
00146 _vtkmprbasedata->GetImageData()->GetScalarRange(range);
00147 max = range[1];
00148
00149
00150 _ctFunVectorPoint.clear();
00151 _ctFunVectorPoint.push_back(max*0/4);
00152 _ctFunVectorPoint.push_back(max*1/4);
00153 _ctFunVectorPoint.push_back(max*2/4);
00154 _ctFunVectorPoint.push_back(max*3/4);
00155 _ctFunVectorPoint.push_back(max*4/4);
00156
00157 _ctFunVectorRed.clear();
00158 _ctFunVectorRed.push_back(0.0);
00159 _ctFunVectorRed.push_back(1.0);
00160 _ctFunVectorRed.push_back(0.0);
00161 _ctFunVectorRed.push_back(0.0);
00162 _ctFunVectorRed.push_back(0.0);
00163
00164 _ctFunVectorGreen.clear();
00165 _ctFunVectorGreen.push_back(0.0);
00166 _ctFunVectorGreen.push_back(0.0);
00167 _ctFunVectorGreen.push_back(0.0);
00168 _ctFunVectorGreen.push_back(1.0);
00169 _ctFunVectorGreen.push_back(0.2);
00170
00171 _ctFunVectorBlue.clear();
00172 _ctFunVectorBlue.push_back(0.0);
00173 _ctFunVectorBlue.push_back(0.0);
00174 _ctFunVectorBlue.push_back(1.0);
00175 _ctFunVectorBlue.push_back(0.0);
00176 _ctFunVectorBlue.push_back(0.0);
00177
00178
00179 if(_ctfun==NULL){
00180 _ctfun = vtkColorTransferFunction::New();
00181 }
00182 _ctfun->RemoveAllPoints();
00183
00184 int i,size=_ctFunVectorPoint.size();
00185 for (i=0;i<size;i++)
00186 {
00187 _ctfun->AddRGBPoint( _ctFunVectorPoint[i] , _ctFunVectorRed[i],_ctFunVectorGreen[i],_ctFunVectorBlue[i]);
00188
00189 }
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 if(_saggitalColors==NULL){
00208 _saggitalColors = vtkImageMapToColors::New();
00209 }
00210 _saggitalColors->RemoveAllInputs();
00211 _saggitalColors->SetInput( _vtkmprbasedata->GetImageData() );
00212
00213
00214
00215 _saggitalColors->SetLookupTable(_ctfun);
00216
00217
00218 if(_saggital==NULL){
00219 _saggital = vtkImageActor::New();
00220 _saggital->SetInput(_saggitalColors->GetOutput());
00221 }
00222
00223
00224
00225
00226
00227
00228
00229
00230 if(_axialColors==NULL){
00231 _axialColors = vtkImageMapToColors::New();
00232 }
00233
00234 _axialColors->RemoveAllInputs();
00235 _axialColors->SetInput( _vtkmprbasedata->GetImageData() );
00236
00237 _axialColors->SetLookupTable(_ctfun);
00238
00239 if(_axial==NULL){
00240 _axial = vtkImageActor::New();
00241 _axial->SetInput(_axialColors->GetOutput());
00242 }
00243
00244
00245
00246
00247
00248
00249 if(_coronalColors==NULL){
00250 _coronalColors = vtkImageMapToColors::New();
00251 }
00252 _coronalColors->RemoveAllInputs();
00253 _coronalColors->SetInput( _vtkmprbasedata->GetImageData() );
00254
00255 _coronalColors->SetLookupTable(_ctfun);
00256
00257 if(_coronal==NULL){
00258 _coronal = vtkImageActor::New();
00259 _coronal->SetInput(_coronalColors->GetOutput());
00260 }
00261
00262
00263
00264
00265
00266 if(_outlineData==NULL){
00267 _outlineData = vtkOutlineFilter::New();
00268 }
00269 _outlineData->RemoveAllInputs();
00270 if(_vtkmprbasedata->GetImageData()){
00271 _outlineData->SetInput((vtkDataSet *) _vtkmprbasedata->GetImageData() );
00272 }
00273
00274 if(_mapOutline==NULL){
00275 _mapOutline = vtkPolyDataMapper::New();
00276 _mapOutline->SetInput(_outlineData->GetOutput());
00277 }
00278 _mapOutline->Update();
00279
00280
00281 if(_outline==NULL){
00282 _outline = vtkActor::New();
00283 _outline->SetMapper(_mapOutline);
00284 _outline->GetProperty()->SetColor(0,0,0);
00285 }
00286 }
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300 }
00301
00302
00303 vtkImageActor * vtkMPR3DDataViewer::GetvtkActor_saggital()
00304 {
00305 return _saggital;
00306 }
00307
00308 vtkImageActor * vtkMPR3DDataViewer::GetvtkActor_coronal()
00309 {
00310 return _coronal;
00311 }
00312
00313 vtkImageActor * vtkMPR3DDataViewer::GetvtkActor_axial()
00314 {
00315 return _axial;
00316 }
00317
00318
00319 void vtkMPR3DDataViewer::SetPositionX(int pos){
00320 int x1,x2,y1,y2,z1,z2;
00321 _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
00322 if(_saggital){
00323 _saggital->SetDisplayExtent( pos , pos , y1 ,y2 , z1 , z2 );
00324 }
00325 }
00326
00327 void vtkMPR3DDataViewer::SetPositionY(int pos){
00328 int x1,x2,y1,y2,z1,z2;
00329 _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
00330 if(_coronal){
00331 _coronal->SetDisplayExtent(x1,x2, pos,pos, z1,z2);
00332 }
00333 }
00334
00335 void vtkMPR3DDataViewer::SetPositionZ(int pos){
00336 int x1,x2,y1,y2,z1,z2;
00337 _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2);
00338 if(_axial){
00339 _axial->SetDisplayExtent(x1,x2, y1,y2, pos,pos);
00340 }
00341 }
00342
00343 void vtkMPR3DDataViewer::SetVisiblePosition(int idPosition, bool visible)
00344 {
00345 _visiblePosition[idPosition]=visible;
00346 }
00347
00348 bool vtkMPR3DDataViewer::GetVisiblePosition(int idPosition)
00349 {
00350 return _visiblePosition[idPosition];
00351 }
00352
00353 void vtkMPR3DDataViewer::setColorTransferFunction(vtkColorTransferFunction* colortable){
00354 if(_saggitalColors){
00355 _saggitalColors->SetLookupTable(colortable);
00356 _coronalColors->SetLookupTable(colortable);
00357 _axialColors->SetLookupTable(colortable);
00358 }
00359 }
00360