]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkClipping3DDataViewer.cxx
creaButtonContainer: Updates in documentation, adding try catch clauses and cleaning...
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / vtkClipping3DDataViewer.cxx
index 2af7d109699a9b18f7d2b39866cccbba498c108a..80a39b6301a652edb860a44d3f34b61af4c30341 100644 (file)
@@ -11,35 +11,46 @@ vtkClipping3DDataViewer::vtkClipping3DDataViewer()
                _representationType[i]  = true;
        }
        _visibleVolume=false;
+       _isRayCasting=true;
+    _isMIP=false;
+       _interpolation=false;
+       _shade=false;
+
+    _volumeMapper = vtkVolumeRayCastMapper::New();
+    _newvol = vtkVolume::New();
+    _volumeProperty = vtkVolumeProperty::New();
+    _compositeFunction = vtkVolumeRayCastCompositeFunction::New();
+        _compositeFunctionMIP = vtkVolumeRayCastMIPFunction::New();
+
 }
 //-------------------------------------------------------------------
 vtkClipping3DDataViewer::~vtkClipping3DDataViewer()
 {
        int i;
        for (i=0; i< VTKMPRDATA_MAXTISSUE ; i++){
-               _mCubes[i]                              ->Delete();
-               _tissueStripper[i]              ->Delete();
-               _tissueMapper[i]                ->Delete();
-               _tissuePlanes[i]                ->Delete();
-               _tissueClipper[i]               ->Delete();
+               _mCubes[i]->Delete();
+               _tissueStripper[i]->Delete();
+               _tissueMapper[i]->Delete();
+               _tissuePlanes[i]->Delete();
+               _tissueClipper[i]->Delete();
        }
-       _outlineData            ->Delete();
-       _mapOutline                     ->Delete();
-       _outline                        ->Delete();
+       _outlineData->Delete();
+       _mapOutline->Delete();
+       _outline->Delete();
        // Volume
-       _tfun                           ->Delete();
-       _ctfun                          ->Delete();
-       _compositeFunction      ->Delete();
-       _volumeMapper           ->Delete();
-       _volumeProperty         ->Delete();
-       _newvol                         ->Delete();
-       _volumePlanes           ->Delete();
+       _tfun->Delete();
+       _ctfun->Delete();
+       _compositeFunction->Delete();
+       _volumeMapper->Delete();
+       _volumeProperty->Delete();
+       _newvol->Delete();
+       _volumePlanes->Delete();
 
        for (i=0; i< VTKMPRDATA_MAXTISSUE ; i++){
-               _tissue[i]              -> Delete();
-               _observerS[i]   -> Delete();
+               _tissue[i]-> Delete();
+               _observerS[i]-> Delete();
        }
-       _observerV              -> Delete();
+       _observerV-> Delete();
 }
 //-------------------------------------------------------------------
 vtkActor* vtkClipping3DDataViewer::GetOutlineActor()
@@ -76,7 +87,7 @@ void vtkClipping3DDataViewer::Refresh()
 
 //     _newvol->VisibilityOn();
 
-       
+
 // _volumeMapper = vtkVolumeRayCastMapper::New();
 //     _volumeMapper->SetInput( this->GetVtkMPRBaseData()->GetImageData() );
 //     _volumeMapper->SetVolumeRayCastFunction(_compositeFunction);
@@ -177,11 +188,11 @@ void vtkClipping3DDataViewer::Configure_Tissue()
 
 
                _tissuePlanes[i]  = vtkPlanes::New();
-   
+
                int x1,x2,y1,y2,z1,z2;
                imagedata->GetExtent(x1,x2,y1,y2,z1,z2);
                _tissuePlanes[i]->SetBounds  (x1,x2,y1,y2,z1,z2);
-               
+
                _tissueClipper[i] = vtkClipPolyData::New();
                _tissueClipper[i]->SetInput( _tissueStripper[i]->GetOutput() );
                _tissueClipper[i]->SetClipFunction( _tissuePlanes[i] );
@@ -193,7 +204,7 @@ void vtkClipping3DDataViewer::Configure_Tissue()
 //             _tissueMapper[i]->Update();
 
        }
-               
+
 
 
        // vtkActor tissue
@@ -227,6 +238,17 @@ void vtkClipping3DDataViewer::Configure_Volume()
 {
   // Volume
 
+
+
+ /** if(_newvol != NULL)
+  {
+    _newvol->Delete();
+    _volumeMapper->Delete();
+    _volumeProperty->Delete();
+  }*/
+
+
+
   _tfun = vtkPiecewiseFunction::New();
   _ctfun = vtkColorTransferFunction::New();
 
@@ -238,8 +260,8 @@ void vtkClipping3DDataViewer::Configure_Volume()
        adding the poinst of the transference function
        */
        //X
-       greyValuesTransferenceFVector.push_back(max * 0/2);
-       greyValuesTransferenceFVector.push_back(max * 1/2);
+       greyValuesTransferenceFVector.push_back(max * 0/2);  // JPR ?? 0/2
+       greyValuesTransferenceFVector.push_back(max * 1/2);  // JPR ?? division entiere?
        greyValuesTransferenceFVector.push_back(max * 2/2);
        //Y
        intensityValuesTransferenceFVector.push_back(0.0);
@@ -251,7 +273,7 @@ void vtkClipping3DDataViewer::Configure_Volume()
        _tfun->AddPoint(max * 2/2 , 1.0);
 
        /*
-               Adding the colors to the vectors        
+               Adding the colors to the vectors
        */
        //RED
        redColorsOfColorTransferenceFVector.push_back(0.0);
@@ -266,14 +288,14 @@ void vtkClipping3DDataViewer::Configure_Volume()
        greenColorsOfColorTransferenceFVector.push_back(0.0);
        greenColorsOfColorTransferenceFVector.push_back(1.0);
        greenColorsOfColorTransferenceFVector.push_back(0.2);
-       
+
        //BLUE
        blueColorsOfColorTransferenceFVector.push_back(0.0);
        blueColorsOfColorTransferenceFVector.push_back(0.0);
        blueColorsOfColorTransferenceFVector.push_back(1.0);
        blueColorsOfColorTransferenceFVector.push_back(0.0);
        blueColorsOfColorTransferenceFVector.push_back(0.0);
-       //GREY VALUE    
+       //GREY VALUE
        greyValueColorsOfColorTransferenceFVector.push_back(max*0/4);
        greyValueColorsOfColorTransferenceFVector.push_back(max*1/4);
        greyValueColorsOfColorTransferenceFVector.push_back(max*2/4);
@@ -292,22 +314,42 @@ void vtkClipping3DDataViewer::Configure_Volume()
 //     imagedata->GetExtent(x1,x2,y1,y2,z1,z2);
 //     _volumePlanes->SetBounds(x1,x2,y1,y2,z1,z2);
 
-  _compositeFunction = vtkVolumeRayCastCompositeFunction::New();
+       // EED 13/03/2011
+
+
 
-  _volumeMapper = vtkVolumeRayCastMapper::New();
// _volumeMapper = vtkVolumeRayCastMapper::New();
        _volumeMapper->SetInput( this->GetVtkMPRBaseData()->GetImageData() );
-       _volumeMapper->SetVolumeRayCastFunction(_compositeFunction);
+
+
+
+    _volumeMapper->SetVolumeRayCastFunction(_compositeFunction);
+
+
+   // _volumeMapper->SetVolumeRayCastFunction(_compositeFunctionMIP);
+
+//
+
        _volumeMapper->SetClippingPlanes( _volumePlanes );
        _volumeMapper->AutoAdjustSampleDistancesOn();
 
-  _volumeProperty = vtkVolumeProperty::New();
+    _volumeProperty->SetInterpolationTypeToNearest();
+    //_volumeProperty = vtkVolumeProperty::New();
        _volumeProperty->SetColor(_ctfun);
        _volumeProperty->SetScalarOpacity( _tfun );
+
 // EED 31/03/2008
-       _volumeProperty->SetInterpolationTypeToLinear();
-       _volumeProperty->ShadeOn();
+
        _volumeProperty->DisableGradientOpacityOn();
 
+
+
+//     _
+
+
+//     _
+
+
 //     _volumeProperty->SetInterpolationTypeToNearest();
 //     _volumeProperty->ShadeOff();
 //     _volumeProperty->SetAmbient(0.3);
@@ -315,7 +357,7 @@ void vtkClipping3DDataViewer::Configure_Volume()
 //     _volumeProperty->SetSpecular(0.8);
 //     _volumeProperty->DisableGradientOpacityOn();
 
-  _newvol = vtkVolume::New();
// _newvol = vtkVolume::New();
        _newvol->SetMapper(_volumeMapper );
        _newvol->SetProperty(_volumeProperty );
 
@@ -325,6 +367,40 @@ void vtkClipping3DDataViewer::Configure_Volume()
        _observerV->SetvtkVolumeRayCastMapper( _volumeMapper );
 }
 
+void vtkClipping3DDataViewer::updateVolume()
+{
+
+    if(_isRayCasting)
+    {
+        cout<<"JPRG::vtkClipping3DDataViewer::Configure_Volume::isRayCasting"<<endl;
+        _volumeMapper->SetVolumeRayCastFunction(_compositeFunction);
+    }
+    else if(_isMIP)
+    {
+        cout<<"JPRG::vtkClipping3DDataViewer::Configure_Volume::isMIP"<<endl;
+
+        _volumeMapper->SetVolumeRayCastFunction(_compositeFunctionMIP);
+    }
+
+    if(_interpolation)
+    {
+        _volumeProperty->SetInterpolationTypeToLinear();
+    }
+    else
+    {
+        _volumeProperty->SetInterpolationTypeToNearest();
+    }
+
+    if(_shade)
+    {
+        _volumeProperty->ShadeOn();
+    }
+    else
+    {
+        _volumeProperty->ShadeOff();
+    }
+
+}
 
 //-------------------------------------------------------------------
 void vtkClipping3DDataViewer::Configure()
@@ -400,7 +476,7 @@ std::vector<double>*        vtkClipping3DDataViewer::GetGreenColorsOfColorTransferenceF
 }
 //--------------------------------------------------------------------
 std::vector<double>*   vtkClipping3DDataViewer::GetBlueColorsOfColorTransferenceFVector()
-{      
+{
        return &blueColorsOfColorTransferenceFVector;
 }
 //--------------------------------------------------------------------
@@ -430,9 +506,9 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions()
 /*
        int i=0,xi,yi,r,g,b,gValue;
        vtkImageData *imagedata = this->_vtkmprbasedata->GetImageData();
-       
+
        HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Histogram Dialog"),imagedata);
-       // 
+       //
        // put in a method
        //
        int tfSize=this->greyValuesTransferenceFVector.size();
@@ -447,7 +523,7 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions()
                                hDlg->addPointToTransferenceFunction(g,in*100);
                                i++;
                        }
-                       
+
                }
 
        int ctfSize=this->redColorsOfColorTransferenceFVector.size();
@@ -469,17 +545,17 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions()
        //setting variables if the user wants to do refresh
        hDlg->setCTF(_ctfun);
        hDlg->setTF(_tfun);
-       
+
        //
        // when the user had changed the transference Function
        //
        if(hDlg->ShowModal()== wxID_OK )
-       {       
+       {
                        // -- vtkPiecewiseFunction --
                        this->_tfun->RemoveAllPoints();
                        greyValuesTransferenceFVector.clear();
                        intensityValuesTransferenceFVector.clear();
-               
+
                        int nTFPoints=hDlg->getSizeTransferenceFunction();
                        i=0;
                        while(i<nTFPoints)
@@ -489,7 +565,7 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions()
                                greyValuesTransferenceFVector.push_back(xi);
                                intensityValuesTransferenceFVector.push_back(yi/100.0);
                                i++;
-                       }       
+                       }
                        // -- vtkColorTransferFunction  --
                        this->_ctfun->RemoveAllPoints ();
                        //clean colors
@@ -499,7 +575,7 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions()
                        greyValueColorsOfColorTransferenceFVector.clear();
 
                        int nCTFpoints=hDlg->getSizeBarColor();
-                       i=0;    
+                       i=0;
                        while(i<nCTFpoints)
                        {
                                hDlg->getDataBarColorPoint(i,xi,r,g,b);
@@ -510,14 +586,14 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions()
                                greyValueColorsOfColorTransferenceFVector.push_back(xi);
                                i++;
                        }
-                       
+
                        this->_volumeMapper->Update();
                        this->_newvol->Update();
        }
-       
+
        else
        {
-               
+
                if(hDlg->getRefreshed())
                {
                        int i=0,size;
@@ -531,12 +607,12 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions()
                                double  in2=intensityValuesTransferenceFVector[i];
                                this->_tfun->AddPoint( grey1 , in2 );
                        }
-                       
+
                        // -- vtkColorTransferFunction  --
                        _ctfun->RemoveAllPoints ();
-                       
+
                        i=0;
-                       size=greyValueColorsOfColorTransferenceFVector.size();          
+                       size=greyValueColorsOfColorTransferenceFVector.size();
                        for(i=0;i<size;i++)
                        {
                                double grey2=(greyValueColorsOfColorTransferenceFVector)[i];
@@ -548,7 +624,7 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions()
                        this->_volumeMapper->Update();
                        this->_newvol->Update();
                 }
-                
+
        }
        hDlg->Destroy();
 */
@@ -578,29 +654,29 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions(char *namefile)
 
        // -- vtkPiecewiseFunction --
        this->_tfun->RemoveAllPoints();
-       fscanf(ff,"%s",tmp);   
+       fscanf(ff,"%s",tmp);
        while ( strcmp(tmp,"--")!=0 )
        {
                x=atof(tmp);
-               fscanf(ff,"%s",tmp);   
+               fscanf(ff,"%s",tmp);
                val=atof(tmp);
                this->_tfun->AddPoint( x*max , val );
-               fscanf(ff,"%s",tmp);   
+               fscanf(ff,"%s",tmp);
        }
 
        this->_ctfun->RemoveAllPoints ();
        // -- vtkColorTransferFunction  --
        while ( !feof(ff))
        {
-               fscanf(ff,"%s",tmp);   
+               fscanf(ff,"%s",tmp);
                x=atof(tmp);
-               fscanf(ff,"%s",tmp);   
+               fscanf(ff,"%s",tmp);
                r=atof(tmp);
-               fscanf(ff,"%s",tmp);   
+               fscanf(ff,"%s",tmp);
                g=atof(tmp);
-               fscanf(ff,"%s",tmp);   
+               fscanf(ff,"%s",tmp);
                b=atof(tmp);
-               this->_ctfun->AddRGBPoint( x*max , r,g,b );                     
+               this->_ctfun->AddRGBPoint( x*max , r,g,b );
        }
 
 
@@ -623,7 +699,30 @@ void vtkClipping3DDataViewer::ReadMeshVTK(char *namefile)
 }
 
 void vtkClipping3DDataViewer::setColorTransferFunction(vtkColorTransferFunction* colortable){
-       
+
        _volumeProperty->SetColor(colortable);
-       
-}
\ No newline at end of file
+
+}
+
+
+void vtkClipping3DDataViewer::SetRayCasting(bool active)
+{
+    _isRayCasting   =   active;
+
+}
+
+void vtkClipping3DDataViewer::SetMIPActive(bool active)
+{
+    _isMIP  = active;
+}
+
+void vtkClipping3DDataViewer::SetInterpolation(bool active)
+{
+    _interpolation = active;
+}
+
+void vtkClipping3DDataViewer::SetShade(bool active)
+{
+    _shade  =   active;
+}
+