X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FvtkMPR3DDataViewer.cxx;h=ef27a33229152953e15a6d5105719190b90a98a8;hb=5380f9e66daf440f27f33bb060e5ae1a646612cd;hp=8c369ffc6a05c636920e149108988607deb0cd9b;hpb=2a69bae264c4dc43a7189f16b53a66dcd3a774dc;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkMPR3DDataViewer.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkMPR3DDataViewer.cxx index 8c369ff..ef27a33 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkMPR3DDataViewer.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkMPR3DDataViewer.cxx @@ -24,9 +24,9 @@ vtkMPR3DDataViewer::vtkMPR3DDataViewer() //------------------------------------------------------------------- vtkMPR3DDataViewer::~vtkMPR3DDataViewer() { - _outlineData-> Delete(); - _mapOutline-> Delete(); - _outline-> Delete(); + if(_outlineData) {_outlineData-> Delete();} + if(_mapOutline) {_mapOutline-> Delete();} + if(_outline) {_outline-> Delete();} // if (_bwLut) _bwLut->Delete(); // if (_hueLut) _hueLut->Delete(); @@ -140,148 +140,159 @@ void vtkMPR3DDataViewer::Configure() double range[2]; - _vtkmprbasedata->GetImageData()->GetScalarRange(range); - double max = range[1]; - - _ctFunVectorPoint.clear(); - _ctFunVectorPoint.push_back(max*0/4); - _ctFunVectorPoint.push_back(max*1/4); - _ctFunVectorPoint.push_back(max*2/4); - _ctFunVectorPoint.push_back(max*3/4); - _ctFunVectorPoint.push_back(max*4/4); - - _ctFunVectorRed.clear(); - _ctFunVectorRed.push_back(0.0); - _ctFunVectorRed.push_back(1.0); - _ctFunVectorRed.push_back(0.0); - _ctFunVectorRed.push_back(0.0); - _ctFunVectorRed.push_back(0.0); - - _ctFunVectorGreen.clear(); - _ctFunVectorGreen.push_back(0.0); - _ctFunVectorGreen.push_back(0.0); - _ctFunVectorGreen.push_back(0.0); - _ctFunVectorGreen.push_back(1.0); - _ctFunVectorGreen.push_back(0.2); - - _ctFunVectorBlue.clear(); - _ctFunVectorBlue.push_back(0.0); - _ctFunVectorBlue.push_back(0.0); - _ctFunVectorBlue.push_back(1.0); - _ctFunVectorBlue.push_back(0.0); - _ctFunVectorBlue.push_back(0.0); - - - if(_ctfun==NULL){ - _ctfun = vtkColorTransferFunction::New(); - } - _ctfun->RemoveAllPoints(); - - int i,size=_ctFunVectorPoint.size(); - for (i=0;iAddRGBPoint( _ctFunVectorPoint[i] , _ctFunVectorRed[i],_ctFunVectorGreen[i],_ctFunVectorBlue[i]); - - } -/* - _ctfun->AddRGBPoint( 100 ,0 ,0,0); - _ctfun->AddRGBPoint( 200 ,1 ,0,0); - _ctfun->AddRGBPoint( 300 ,0 ,1,0); - _ctfun->AddRGBPoint( 400 ,0 ,0,1); -*/ -// void *p=this; // JPRx - - // Create the first of the three planes. The filter vtkImageMapToColors - // maps the data through the corresponding lookup table created above. The - // vtkImageActor is a type of vtkProp and conveniently displays an image on - // a single quadrilateral plane. It does this using texture mapping and as - // a result is quite fast. (Note: the input image has to be unsigned char - // values, which the vtkImageMapToColors produces.) Note also that by - // specifying the DisplayExtent, the pipeline requests data of this extent - // and the vtkImageMapToColors only processes a slice of data. - - if(_saggitalColors==NULL){ - _saggitalColors = vtkImageMapToColors::New(); - } - _saggitalColors->RemoveAllInputs(); - - _saggitalColors->SetInput( _vtkmprbasedata->GetImageData() ); -// _saggitalColors->SetLookupTable(_bwLut); - - _saggitalColors->SetLookupTable(_ctfun); + double max; + if(_vtkmprbasedata->GetImageData()){ + _vtkmprbasedata->GetImageData()->GetScalarRange(range); + max = range[1]; + + + _ctFunVectorPoint.clear(); + _ctFunVectorPoint.push_back(max*0/4); + _ctFunVectorPoint.push_back(max*1/4); + _ctFunVectorPoint.push_back(max*2/4); + _ctFunVectorPoint.push_back(max*3/4); + _ctFunVectorPoint.push_back(max*4/4); + + _ctFunVectorRed.clear(); + _ctFunVectorRed.push_back(0.0); + _ctFunVectorRed.push_back(1.0); + _ctFunVectorRed.push_back(0.0); + _ctFunVectorRed.push_back(0.0); + _ctFunVectorRed.push_back(0.0); + + _ctFunVectorGreen.clear(); + _ctFunVectorGreen.push_back(0.0); + _ctFunVectorGreen.push_back(0.0); + _ctFunVectorGreen.push_back(0.0); + _ctFunVectorGreen.push_back(1.0); + _ctFunVectorGreen.push_back(0.2); + + _ctFunVectorBlue.clear(); + _ctFunVectorBlue.push_back(0.0); + _ctFunVectorBlue.push_back(0.0); + _ctFunVectorBlue.push_back(1.0); + _ctFunVectorBlue.push_back(0.0); + _ctFunVectorBlue.push_back(0.0); + + + if(_ctfun==NULL){ + _ctfun = vtkColorTransferFunction::New(); + } + _ctfun->RemoveAllPoints(); + + int i,size=_ctFunVectorPoint.size(); + for (i=0;iAddRGBPoint( _ctFunVectorPoint[i] , _ctFunVectorRed[i],_ctFunVectorGreen[i],_ctFunVectorBlue[i]); + + } + /* + _ctfun->AddRGBPoint( 100 ,0 ,0,0); + _ctfun->AddRGBPoint( 200 ,1 ,0,0); + _ctfun->AddRGBPoint( 300 ,0 ,1,0); + _ctfun->AddRGBPoint( 400 ,0 ,0,1); + */ + // void *p=this; // JPRx + + // Create the first of the three planes. The filter vtkImageMapToColors + // maps the data through the corresponding lookup table created above. The + // vtkImageActor is a type of vtkProp and conveniently displays an image on + // a single quadrilateral plane. It does this using texture mapping and as + // a result is quite fast. (Note: the input image has to be unsigned char + // values, which the vtkImageMapToColors produces.) Note also that by + // specifying the DisplayExtent, the pipeline requests data of this extent + // and the vtkImageMapToColors only processes a slice of data. + + if(_saggitalColors==NULL){ + _saggitalColors = vtkImageMapToColors::New(); + } + _saggitalColors->RemoveAllInputs(); + _saggitalColors->SetInput( _vtkmprbasedata->GetImageData() ); + + // _saggitalColors->SetLookupTable(_bwLut); + + _saggitalColors->SetLookupTable(_ctfun); + - if(_saggital==NULL){ - _saggital = vtkImageActor::New(); - _saggital->SetInput(_saggitalColors->GetOutput()); - } - //_saggitalColors->Update(); - + if(_saggital==NULL){ + _saggital = vtkImageActor::New(); + _saggital->SetInput(_saggitalColors->GetOutput()); + } + //_saggitalColors->Update(); + - // Create the second (axial) plane of the three planes. We use the - // same approach as before except that the extent differs. + // Create the second (axial) plane of the three planes. We use the + // same approach as before except that the extent differs. + + if(_axialColors==NULL){ + _axialColors = vtkImageMapToColors::New(); + } + + _axialColors->RemoveAllInputs(); + _axialColors->SetInput( _vtkmprbasedata->GetImageData() ); + // _axialColors->SetLookupTable(_hueLut); + _axialColors->SetLookupTable(_ctfun); + + if(_axial==NULL){ + _axial = vtkImageActor::New(); + _axial->SetInput(_axialColors->GetOutput()); + } + + //_axialColors->Update(); - if(_axialColors==NULL){ - _axialColors = vtkImageMapToColors::New(); - } - - _axialColors->RemoveAllInputs(); - _axialColors->SetInput( _vtkmprbasedata->GetImageData() ); -// _axialColors->SetLookupTable(_hueLut); - _axialColors->SetLookupTable(_ctfun); - if(_axial==NULL){ - _axial = vtkImageActor::New(); - _axial->SetInput(_axialColors->GetOutput()); - } + // Create the third (coronal) plane of the three planes. We use + // the same approach as before except that the extent differs. + if(_coronalColors==NULL){ + _coronalColors = vtkImageMapToColors::New(); + } + _coronalColors->RemoveAllInputs(); + _coronalColors->SetInput( _vtkmprbasedata->GetImageData() ); + // _coronalColors->SetLookupTable(_satLut); + _coronalColors->SetLookupTable(_ctfun); + + if(_coronal==NULL){ + _coronal = vtkImageActor::New(); + _coronal->SetInput(_coronalColors->GetOutput()); + } + - //_axialColors->Update(); - - // Create the third (coronal) plane of the three planes. We use - // the same approach as before except that the extent differs. - if(_coronalColors==NULL){ - _coronalColors = vtkImageMapToColors::New(); - } - _coronalColors->RemoveAllInputs(); - _coronalColors->SetInput( _vtkmprbasedata->GetImageData() ); -// _coronalColors->SetLookupTable(_satLut); - _coronalColors->SetLookupTable(_ctfun); - - if(_coronal==NULL){ - _coronal = vtkImageActor::New(); - _coronal->SetInput(_coronalColors->GetOutput()); - } + // An outline provides context around the data. + // + if(_outlineData==NULL){ + _outlineData = vtkOutlineFilter::New(); + } + _outlineData->RemoveAllInputs(); + if(_vtkmprbasedata->GetImageData()){ + _outlineData->SetInput((vtkDataSet *) _vtkmprbasedata->GetImageData() ); + } + + if(_mapOutline==NULL){ + _mapOutline = vtkPolyDataMapper::New(); + _mapOutline->SetInput(_outlineData->GetOutput()); + } + _mapOutline->Update(); + //_mapOutline->RemoveAllInputs(); - - - // An outline provides context around the data. - // - if(_outlineData==NULL){ - _outlineData = vtkOutlineFilter::New(); + if(_outline==NULL){ + _outline = vtkActor::New(); + _outline->SetMapper(_mapOutline); + _outline->GetProperty()->SetColor(0,0,0); + } } - _outlineData->RemoveAllInputs(); - _outlineData->SetInput((vtkDataSet *) _vtkmprbasedata->GetImageData() ); + + - if(_mapOutline==NULL){ - _mapOutline = vtkPolyDataMapper::New(); - _mapOutline->SetInput(_outlineData->GetOutput()); - } - _mapOutline->Update(); - //_mapOutline->RemoveAllInputs(); - - if(_outline==NULL){ - _outline = vtkActor::New(); - _outline->SetMapper(_mapOutline); - _outline->GetProperty()->SetColor(0,0,0); - } + - int ext[6]; - _vtkmprbasedata->GetImageData()->GetExtent(ext); + //int ext[6]; + //_vtkmprbasedata->GetImageData()->GetExtent(ext); @@ -308,19 +319,25 @@ vtkImageActor * vtkMPR3DDataViewer::GetvtkActor_axial() void vtkMPR3DDataViewer::SetPositionX(int pos){ int x1,x2,y1,y2,z1,z2; _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2); - _saggital->SetDisplayExtent( pos , pos , y1 ,y2 , z1 , z2 ); + if(_saggital){ + _saggital->SetDisplayExtent( pos , pos , y1 ,y2 , z1 , z2 ); + } } //------------------------------------------------------------------------ void vtkMPR3DDataViewer::SetPositionY(int pos){ int x1,x2,y1,y2,z1,z2; _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2); - _coronal->SetDisplayExtent(x1,x2, pos,pos, z1,z2); + if(_coronal){ + _coronal->SetDisplayExtent(x1,x2, pos,pos, z1,z2); + } } //------------------------------------------------------------------------ void vtkMPR3DDataViewer::SetPositionZ(int pos){ int x1,x2,y1,y2,z1,z2; _vtkmprbasedata->GetDimensionExtention(&x1,&x2,&y1,&y2,&z1,&z2); - _axial->SetDisplayExtent(x1,x2, y1,y2, pos,pos); + if(_axial){ + _axial->SetDisplayExtent(x1,x2, y1,y2, pos,pos); + } } //------------------------------------------------------------------- void vtkMPR3DDataViewer::SetVisiblePosition(int idPosition, bool visible) @@ -334,8 +351,10 @@ bool vtkMPR3DDataViewer::GetVisiblePosition(int idPosition) } void vtkMPR3DDataViewer::setColorTransferFunction(vtkColorTransferFunction* colortable){ - _saggitalColors->SetLookupTable(colortable); - _coronalColors->SetLookupTable(colortable); - _axialColors->SetLookupTable(colortable); + if(_saggitalColors){ + _saggitalColors->SetLookupTable(colortable); + _coronalColors->SetLookupTable(colortable); + _axialColors->SetLookupTable(colortable); + } }