]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
*** empty log message ***
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index e391f7c5c4bff9168b51e5f5b314d7ef77fa6c2a..3536b2b0da69a62213b11f81e2c7f046ac8faa9e 100644 (file)
 #include "NameWrapper.h"
 #include "wx/artprov.h"
 #include "ConceptDataWrap.h"
-
-#include <manualContour.h>
-//#include "ImageSourceThing.h"
-//#include "wxContour_ActionCommandsID.h"
-//#include "OutlineModelBuilder.h"
-//#include "wxContourEventHandler.h"
 #include <creaWx.h>
 
 //----------------------------------------------------------------------------------------------------------------
@@ -58,6 +52,9 @@ char wxContourMainFrame::COPY = 'C';
                _refLineControl                         = NULL;
                _refLineModel                           = NULL;
                _refLineView                            = NULL;
+               _imageReslicer                          = NULL;
+               _thresholdTable                         = NULL;
+               _thresholdMapper                        = NULL;
                _thresholdActor                         = NULL;
                _actorPresent                           = false;
 
@@ -79,6 +76,9 @@ char wxContourMainFrame::COPY = 'C';
                _refLineControl                         = NULL;
                _refLineModel                           = NULL;
                _refLineView                            = NULL;
+               _imageReslicer                          = NULL;
+               _thresholdTable                         = NULL;
+               _thresholdMapper                        = NULL;
                _thresholdActor                         = NULL;
                _actorPresent                           = false;
 
@@ -99,12 +99,14 @@ char wxContourMainFrame::COPY = 'C';
 
                if(images.size() > 0)
                {
+                       _images = images;
                        this->setVectImages(images);
                }
 
 }
 
-void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
+void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
+{
 
        #if defined(__GNUC__)
                std::string str_home(getenv("HOME"));
@@ -119,7 +121,7 @@ void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
        notebook = this->createNotebook();              
 
 
-       kernelManager = new KernelManagerContour( images , _datadir+"/data/" , strCreaContourDataTmp );
+       kernelManager = new KernelManagerContour( imgs , _datadir+"/data/" , strCreaContourDataTmp );
 
 
        _instantPanel                           = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
@@ -166,7 +168,7 @@ void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
 
        wxContourMainFrame :: ~wxContourMainFrame()
        {
-
+               deleteAllContours();
                _pannew->Close();
                interfMainPanel::resetInstance();
                delete kernelManager;
@@ -594,7 +596,7 @@ void wxContourMainFrame::changeInstant()
                kernelManager->setInstant(instantVect);
                //_modelManager->setInstant( _actualInstant );
                
-           updateActor();
+           onThresholdChange();
                updateInstantOutlines();
                updateInstantImageData();
                updateInstantAxes();
@@ -638,83 +640,6 @@ void wxContourMainFrame::updateInstantAxes()
 {
 }
 
-void wxContourMainFrame :: updateActor()
-{
-               if (_actorPresent)
-               {
-                       int minMax[2];
-                       _pannew->onThresholdInstantChange(minMax);
-
-                       int     z = _theViewPanel->GetZ();
-
-                       vtkImageData * img = getImageData();
-                       vtkImageReslice *imageReslice = vtkImageReslice::New();
-
-                       imageReslice->SetInput( img );
-                       imageReslice->SetInformationInput(img);
-                       imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
-                       imageReslice->SetResliceAxesOrigin(0,0,z);
-                       imageReslice->SetOutputDimensionality(2);
-                       imageReslice->SetInterpolationModeToLinear();
-
-                       img = imageReslice->GetOutput();
-                       img->Update();
-                       img->UpdateInformation();
-
-//EED???                       wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
-                       
-                       double range[2];
-                       img->GetScalarRange(range);
-
-                       int min = floor (range[0]);
-                       int max = ceil (range[1]);
-
-                       //Lookup Table
-                       vtkLookupTable *lookup = vtkLookupTable::New();
-                       lookup->SetNumberOfTableValues(max+1);
-                       lookup->SetTableRange(range); 
-                       lookup->SetAlphaRange(0, 1);
-                       lookup->SetValueRange(0, 1);
-                       lookup->SetSaturationRange(0, 0); 
-                       lookup->SetRampToLinear( );
-
-                       //Assign a fake color for the upper image, and set the white as transparent
-                       int i;
-                       int minVal = minMax[0];
-                       int maxVal = minMax[1];
-
-                       for(i = min; i <= max; i++)
-                       {
-                               if( i >= minVal && i <= maxVal )
-                               {
-                                       lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
-                               }
-                               else if( i >= min && i < minVal )
-                               {
-                                       lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                               }
-                               else if( i > maxVal && i < max )
-                               {
-                                       lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                               }
-                               else
-                               {
-                                       lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                               }
-                       }
-                               
-                       lookup->Build( );
-
-                       vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
-                       mapperImage->SetLookupTable( lookup );
-                       mapperImage->SetInput( img );
-                       //mapperImage->SetOutputFormatToRGBA( );
-
-                       _thresholdActor->SetInput( mapperImage->GetOutput() );
-                       printf("EED wxContourMainFrame::updateActor %d \n" , z);        
-                       _thresholdActor->SetPosition( 0,0, 900-1 );
-               }
-}
 
 void wxContourMainFrame::onChangeDeep(int val){
        _instantPanel->setConceptValue( "Axe Depth", (int)val );        
@@ -857,11 +782,18 @@ void wxContourMainFrame::onLoad(){
                fscanf(pFile,"%s",tmp); // --CreaContour--
 
                fscanf(pFile,"%s",tmp); // Version
-               fscanf(pFile,"%s",tmp); // 1.0.1
+               fscanf(pFile,"%s",tmp); // 1.0.1 || 1.0.0
                std::string version(tmp);
-
-               openContours(pFile,false);
-               if (version!="1.0.0"){
+               
+               //AD:02-06-09
+               if (version=="1.0.1")
+               {
+                       openContours(pFile,false);
+               }
+               
+               //AD:02-06-09
+               else if (version=="1.0.0")
+               {
                        openContours(pFile,true);
                }
 //                       _theViewPanel->getSceneManager()->openFileWithContours(ff);
@@ -871,6 +803,8 @@ void wxContourMainFrame::onLoad(){
        _theViewPanel->getSceneManager()->removeSceneContours();
        changeInstant();
 }
+
+//AD: 29-05-09
 void wxContourMainFrame::onSave(){
        wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
        if (dialog.ShowModal() == wxID_OK)
@@ -880,7 +814,10 @@ void wxContourMainFrame::onSave(){
                saveFileWithContours( fileNameContourROI );
        }
 }
-void wxContourMainFrame::saveFileWithContours( std::string filename ){
+
+//AD: 29-05-09
+void wxContourMainFrame::saveFileWithContours( std::string filename )
+{
 
        FILE *pFile=fopen(filename.c_str(),"w+");
        std::vector< std::string > lstNameThings;
@@ -893,6 +830,19 @@ void wxContourMainFrame::saveFileWithContours( std::string filename ){
        lstNameThings           = kernelManager->GetLstNameThings();
        sizeLstNameThings       = lstNameThings.size(); 
        fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings );
+
+       vtkImageData *image = _images[0];
+
+       int dimRange[3];
+       image->GetDimensions(dimRange);
+
+       fprintf(pFile,"ImageDimensions %d %d %d\n", dimRange[0], dimRange[1], dimRange[2] );
+
+       double spaRange[3];
+       image->GetSpacing(spaRange);
+
+       fprintf(pFile,"ImageSpacing %f %f %f\n", spaRange[0], spaRange[1], spaRange[2] );
+
        for (i=0 ; i<sizeLstNameThings ; i++) 
        {
                kernelManager->SaveThingName( pFile, lstNameThings[i] );
@@ -911,6 +861,7 @@ void wxContourMainFrame::saveFileWithContours( std::string filename ){
        fclose(pFile);
 }
 
+//AD:02-06-09: TODO: Adjust spacing and dimensions to Rois comming from images with different specifications
 void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){
        char tmp[255];
        fscanf(pFile,"%s",tmp); // NumberOfContours 
@@ -922,64 +873,105 @@ void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){
        manualContourModel *manModelContour;
        int typeView;
 
-       int i;
-       for (i=0;i<numberOfContours;i++)
+       vtkImageData *image = _images[0];
+       int imageDim[3];
+       image->GetDimensions(imageDim);
+       double imageSpac[3];
+       image->GetSpacing(imageSpac);
+
+       int tempDim[3];
+       double tempSpac[3];
+
+       fscanf(pFile,"%s",tmp); // ImageDimensions
+       fscanf(pFile,"%s",tmp); // X
+       tempDim[0] = atoi(tmp);
+       fscanf(pFile,"%s",tmp); // Y
+       tempDim[1] = atoi(tmp);
+       fscanf(pFile,"%s",tmp); // Z
+       tempDim[2] = atoi(tmp);
+
+       fscanf(pFile,"%s",tmp); // ImageSpacing
+       fscanf(pFile,"%s",tmp); // X
+       tempSpac[0] = atof(tmp);
+       fscanf(pFile,"%s",tmp); // Y
+       tempSpac[1] = atof(tmp);
+       fscanf(pFile,"%s",tmp); // Z
+       tempSpac[2] = atof(tmp);
+
+       bool compatible = true;
+
+       //Compare Spacing and Dims in X and Y (Necessary in Z?)
+       if (imageDim[0]!=tempDim[0] || imageDim[1]!=tempDim[1] || 
+               imageSpac[0]!=tempSpac[0] || imageSpac[1]!=tempSpac[1])
        {
-               instantVector.clear();
-               fscanf(pFile,"%s",tmp); // Instant
+               compatible = false;
+       }
 
-               fscanf(pFile,"%s",tmp); // 1
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 2
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 3
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 4
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 5
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 6
-               instantVector.push_back( atoi(tmp) );
+       if (compatible==true)
+       {
+               int i;
+               for (i=0;i<numberOfContours;i++)
+               {
+                       instantVector.clear();
+                       fscanf(pFile,"%s",tmp); // Instant
 
+                       fscanf(pFile,"%s",tmp); // 1
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 2
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 3
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 4
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 5
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 6
+                       instantVector.push_back( atoi(tmp) );
 
-               fscanf(pFile,"%s",tmp); // TypeContourModel
-               fscanf(pFile,"%s",tmp); // ##
-               typeContourModel = atoi(tmp);
 
-               manModelContour =  kernelManager->factoryManualContourModel(typeContourModel);
-               manModelContour->Open(pFile);
+                       fscanf(pFile,"%s",tmp); // TypeContourModel
+                       fscanf(pFile,"%s",tmp); // ##
+                       typeContourModel = atoi(tmp);
 
-               fscanf(pFile,"%s",tmp); // TypeView
-               fscanf(pFile,"%s",tmp); // ##
-               typeView = atoi(tmp);  
+                       manModelContour =  kernelManager->factoryManualContourModel(typeContourModel);
+                       manModelContour->Open(pFile);
 
+                       fscanf(pFile,"%s",tmp); // TypeView
+                       fscanf(pFile,"%s",tmp); // ##
+                       typeView = atoi(tmp);  
 
-//                     if (typeView==1) 
-//                     {
-//                     }
 
+       //                      if (typeView==1) 
+       //                      {
+       //                      }
 
-               std::string theName;
-               theName = kernelManager->createOutline( manModelContour, instantVector );
-               bool addedModel = theName.compare("") != 0;
-               if( addedModel )
-               {
-                       double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
-                       _theViewPanel->getSpacing(spc);                                 
-                       //Adding the manualContourControler to interface objects structure
-                       //Adding the manualViewContour to interface objects structure           
-                       //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active.
-                       _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ;
-               }       
 
-               if (staticContour==true)
-               {
-                       Instant instant(&instantVector);
-                       kernelManager->changeContourOfManager( theName , &instant );
-               }
+                       std::string theName;
+                       theName = kernelManager->createOutline( manModelContour, instantVector );
+                       bool addedModel = theName.compare("") != 0;
+                       if( addedModel )
+                       {
+                               double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
+                               _theViewPanel->getSpacing(spc);                                 
+                               //Adding the manualContourControler to interface objects structure
+                               //Adding the manualViewContour to interface objects structure           
+                               //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active.
+                               _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ;
+                       }       
+
+                       if (staticContour==true)
+                       {
+                               Instant instant(&instantVector);
+                               kernelManager->changeContourOfManager( theName , &instant );
+                       }
 
-       }// for  numberOfContours
+               }// for  numberOfContours
+       }
 
+       else if (compatible==false)
+       {
+               wxMessageBox(_T("The actual image is not compatible with the selected Roi file"), _T("Error"), wxICON_ERROR | wxOK);
+       }
 }
 
 void wxContourMainFrame::RefreshInterface(){
@@ -1009,177 +1001,176 @@ void wxContourMainFrame::onSegmentationOneSliceITK(wxString distance, wxString s
 
 void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString distanc, wxString sigm, wxString alf, wxString bet, wxString prop, wxString iter, wxString inflation)
 {
-       
        int typeofcontour = 1;
        //Image Data
        vtkImageData    *imagedata      = getImageData();
        
        //Tipo de pixeles a utilizar internamente en ITK
-  typedef   float  InternalPixelType;
-  const     unsigned int    Dimension = 2;
-  typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;
+       typedef   float  InternalPixelType;
+       const     unsigned int    Dimension = 2;
+       typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;
 
-  //Tipo de pixeles de salida 1
-  typedef unsigned char OutputPixelType;
-  typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
+       //Tipo de pixeles de salida 1
+       typedef unsigned char OutputPixelType;
+       typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
 
-  //Tipo de pixeles de salida 2
-  typedef unsigned short OutputPixelType2;
-  typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
+       //Tipo de pixeles de salida 2
+       typedef unsigned short OutputPixelType2;
+       typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
 
-  //DefiniciÛn del thresholder
-  typedef itk::BinaryThresholdImageFilter< 
-                        InternalImageType, 
-                        OutputImageType    >    ThresholdingFilterType;
-  
-  //DefiniciÛn del primer filtro de conversiÛn de pixeles
-  typedef itk::CastImageFilter<
-               OutputImageType, OutputImageType2 >  CastFilterType;
+       //DefiniciÛn del thresholder
+       typedef itk::BinaryThresholdImageFilter< 
+                                                       InternalImageType, 
+                                                       OutputImageType    >    ThresholdingFilterType;
+         
+       //DefiniciÛn del primer filtro de conversiÛn de pixeles
+       typedef itk::CastImageFilter<
+                               OutputImageType, OutputImageType2 >  CastFilterType;
 
-  //DefiniciÛn del segundo tipo de conversiÛn de pixeles
-  typedef itk::CastImageFilter<
-               OutputImageType2, InternalImageType >  CastFilterType2;
+       //DefiniciÛn del segundo tipo de conversiÛn de pixeles
+       typedef itk::CastImageFilter<
+                               OutputImageType2, InternalImageType >  CastFilterType2;
 
-  //Tercer tipo de conversiÛn
-  typedef itk::RescaleIntensityImageFilter< 
-                               InternalImageType, 
-                               OutputImageType >   CastFilterType3;
+       //Tercer tipo de conversiÛn
+       typedef itk::RescaleIntensityImageFilter< 
+                                                               InternalImageType, 
+                                                               OutputImageType >   CastFilterType3;
 
-  //Cuarto tipo de conversiÛn
-  typedef itk::RescaleIntensityImageFilter< 
-                               OutputImageType, 
-                               OutputImageType >   CastFilterType4;
+       //Cuarto tipo de conversiÛn
+       typedef itk::RescaleIntensityImageFilter< 
+                                                               OutputImageType, 
+                                                               OutputImageType >   CastFilterType4;
 
-  ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
-                        
-  thresholder->SetLowerThreshold( 0.0 );
-  thresholder->SetUpperThreshold( 128 );
+       ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
+                               
+       thresholder->SetLowerThreshold( 0.0 );
+       thresholder->SetUpperThreshold( 128 );
 
-  thresholder->SetOutsideValue(  255  );
-  thresholder->SetInsideValue(  0 );
+       thresholder->SetOutsideValue(  255  );
+       thresholder->SetInsideValue(  0 );
 
-  //DefinciÛn de conexiÛnes entre VTK e ITK y el writer
-  typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
-  typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
-  typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
+       //DefinciÛn de conexiÛnes entre VTK e ITK y el writer
+       typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
+       typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
+       typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
 
-  ConnectorType::Pointer connector= ConnectorType::New();
-  ConnectorType2::Pointer connector2= ConnectorType2::New();
-  
+       ConnectorType::Pointer connector= ConnectorType::New();
+       ConnectorType2::Pointer connector2= ConnectorType2::New();
+         
 
-  CastFilterType::Pointer filter=CastFilterType::New();
-  CastFilterType2::Pointer filter2=CastFilterType2::New();
+       CastFilterType::Pointer filter=CastFilterType::New();
+       CastFilterType2::Pointer filter2=CastFilterType2::New();
 
-  connector->SetInput( imagedata );
-  filter2->SetInput(connector->GetOutput());
+       connector->SetInput( imagedata );
+       filter2->SetInput(connector->GetOutput());
 
-  typedef   itk::CurvatureAnisotropicDiffusionImageFilter< 
-                               InternalImageType, 
-                               InternalImageType >  SmoothingFilterType;
+       typedef   itk::CurvatureAnisotropicDiffusionImageFilter< 
+                                                               InternalImageType, 
+                                                               InternalImageType >  SmoothingFilterType;
 
-  SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
+       SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
 
-  typedef   itk::GradientMagnitudeRecursiveGaussianImageFilter< 
-                               InternalImageType, 
-                               InternalImageType >  GradientFilterType;
+       typedef   itk::GradientMagnitudeRecursiveGaussianImageFilter< 
+                                                               InternalImageType, 
+                                                               InternalImageType >  GradientFilterType;
 
-  typedef   itk::SigmoidImageFilter<                               
-                               InternalImageType, 
-                               InternalImageType >  SigmoidFilterType;
+       typedef   itk::SigmoidImageFilter<                               
+                                                               InternalImageType, 
+                                                               InternalImageType >  SigmoidFilterType;
 
-  GradientFilterType::Pointer  gradientMagnitude = GradientFilterType::New();
+       GradientFilterType::Pointer  gradientMagnitude = GradientFilterType::New();
 
-  SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
+       SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
 
-  sigmoid->SetOutputMinimum(  0.0  );
-  sigmoid->SetOutputMaximum(  255.0  );
+       sigmoid->SetOutputMinimum(  0.0  );
+       sigmoid->SetOutputMaximum(  255.0  );
 
 
-  typedef  itk::FastMarchingImageFilter< 
-                              InternalImageType, 
-                              InternalImageType >    FastMarchingFilterType;
+       typedef  itk::FastMarchingImageFilter< 
+                                                               InternalImageType, 
+                                                               InternalImageType >    FastMarchingFilterType;
 
 
-  FastMarchingFilterType::Pointer  fastMarching = FastMarchingFilterType::New();
+       FastMarchingFilterType::Pointer  fastMarching = FastMarchingFilterType::New();
 
-  typedef  itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType, 
-                InternalImageType >    GeodesicActiveContourFilterType;
-  GeodesicActiveContourFilterType::Pointer geodesicActiveContour = 
-                                     GeodesicActiveContourFilterType::New();
+       typedef  itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType, 
+                                       InternalImageType >    GeodesicActiveContourFilterType;
+       GeodesicActiveContourFilterType::Pointer geodesicActiveContour = 
+                                                                               GeodesicActiveContourFilterType::New();
 
-  typedef  itk::ZeroCrossingImageFilter< 
-                              InternalImageType, 
-                              InternalImageType >    ZeroCrossingFilterType;
-ZeroCrossingFilterType::Pointer zeroCrossing =
-                                               ZeroCrossingFilterType::New();
+       typedef  itk::ZeroCrossingImageFilter< 
+                                                               InternalImageType, 
+                                                               InternalImageType >    ZeroCrossingFilterType;
+       ZeroCrossingFilterType::Pointer zeroCrossing =
+                                                       ZeroCrossingFilterType::New();
 
-const double propagationScaling = atof( crea::wx2std(prop).c_str() );
+       const double propagationScaling = atof( crea::wx2std(prop).c_str() );
 
-  geodesicActiveContour->SetPropagationScaling( propagationScaling );
-  geodesicActiveContour->SetCurvatureScaling( 1.0 );
-  geodesicActiveContour->SetAdvectionScaling( 1.0 );
+       geodesicActiveContour->SetPropagationScaling( propagationScaling );
+       geodesicActiveContour->SetCurvatureScaling( 1.0 );
+       geodesicActiveContour->SetAdvectionScaling( 1.0 );
 
-  geodesicActiveContour->SetMaximumRMSError( 0.02 );
-  int it=atoi(  crea::wx2std(iter).c_str() );
-  geodesicActiveContour->SetNumberOfIterations( it );
+       geodesicActiveContour->SetMaximumRMSError( 0.02 );
+       int it=atoi(  crea::wx2std(iter).c_str() );
+       geodesicActiveContour->SetNumberOfIterations( it );
 
-  smoothing->SetInput( filter2->GetOutput() );
-  gradientMagnitude->SetInput( smoothing->GetOutput() );
-  sigmoid->SetInput( gradientMagnitude->GetOutput() );
-  fastMarching->SetInput( sigmoid->GetOutput() );
-  geodesicActiveContour->SetInput( fastMarching->GetOutput() );
-  geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
-  
-  zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
-  //thresholder->SetInput( zeroCrossing->GetOutput() );
-  thresholder->SetInput( geodesicActiveContour->GetOutput() );
-  connector2->SetInput( thresholder->GetOutput()  );
-  
+       smoothing->SetInput( filter2->GetOutput() );
+       gradientMagnitude->SetInput( smoothing->GetOutput() );
+       sigmoid->SetInput( gradientMagnitude->GetOutput() );
+       fastMarching->SetInput( sigmoid->GetOutput() );
+       geodesicActiveContour->SetInput( fastMarching->GetOutput() );
+       geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
+         
+       zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
+       //thresholder->SetInput( zeroCrossing->GetOutput() );
+       thresholder->SetInput( geodesicActiveContour->GetOutput() );
+       connector2->SetInput( thresholder->GetOutput()  );
+         
 
-  smoothing->SetTimeStep( 0.125 );
-  smoothing->SetNumberOfIterations(  5 );
-  smoothing->SetConductanceParameter( 9.0 );
+       smoothing->SetTimeStep( 0.125 );
+       smoothing->SetNumberOfIterations(  5 );
+       smoothing->SetConductanceParameter( 9.0 );
 
 
-  const double sigma = atof(  crea::wx2std(sigm).c_str() );
-  gradientMagnitude->SetSigma(  sigma  );
+       const double sigma = atof(  crea::wx2std(sigm).c_str() );
+       gradientMagnitude->SetSigma(  sigma  );
 
-  const double alpha =  atof(  crea::wx2std(alf).c_str() );
-  const double beta  =  atof(  crea::wx2std(bet).c_str() );
+       const double alpha =  atof(  crea::wx2std(alf).c_str() );
+       const double beta  =  atof(  crea::wx2std(bet).c_str() );
 
-  sigmoid->SetAlpha( alpha );
-  sigmoid->SetBeta(  beta  );
-  
-  typedef FastMarchingFilterType::NodeContainer  NodeContainer;
-  typedef FastMarchingFilterType::NodeType       NodeType;
+       sigmoid->SetAlpha( alpha );
+       sigmoid->SetBeta(  beta  );
+         
+       typedef FastMarchingFilterType::NodeContainer  NodeContainer;
+       typedef FastMarchingFilterType::NodeType       NodeType;
 
-  NodeContainer::Pointer seeds = NodeContainer::New();
+       NodeContainer::Pointer seeds = NodeContainer::New();
 
-  InternalImageType::IndexType  seedPosition;
-  seedPosition[0] = x;
-  seedPosition[1] = y;
+       InternalImageType::IndexType  seedPosition;
+       seedPosition[0] = x;
+       seedPosition[1] = y;
 
-  const double initialDistance = atof( crea::wx2std(distanc).c_str() );
+       const double initialDistance = atof( crea::wx2std(distanc).c_str() );
 
-  NodeType node;
+       NodeType node;
 
-  const double seedValue = - initialDistance;
+       const double seedValue = - initialDistance;
 
-  node.SetValue( seedValue );
-  node.SetIndex( seedPosition );
-       
-  seeds->Initialize();
-  seeds->InsertElement( 0, node );
-
-  fastMarching->SetTrialPoints( seeds );
-
-  fastMarching->SetSpeedConstant( 1.0 );
-  
-  fastMarching->SetOutputSize( 
-           connector->GetOutput()->GetBufferedRegion().GetSize() );
-  
-  fastMarching->SetStoppingValue( 800 );
-  try
+       node.SetValue( seedValue );
+       node.SetIndex( seedPosition );
+               
+       seeds->Initialize();
+       seeds->InsertElement( 0, node );
+
+       fastMarching->SetTrialPoints( seeds );
+
+       fastMarching->SetSpeedConstant( 1.0 );
+         
+       fastMarching->SetOutputSize( 
+                       connector->GetOutput()->GetBufferedRegion().GetSize() );
+         
+       fastMarching->SetStoppingValue( 800 );
+       try
     {
                
        connector2->Update();
@@ -1212,26 +1203,26 @@ const double propagationScaling = atof( crea::wx2std(prop).c_str() );
 
 
        vtkPolyData* polyDataResult =  cntVTK->GetOutput();
-       std::cout<<"Points "<<polyDataResult->GetNumberOfPoints()<<std::endl;
+       //std::cout<<"Points "<<polyDataResult->GetNumberOfPoints()<<std::endl;
        polyDataResult->Update( );
        polyDataResult->UpdateInformation();
 
-//EED
-       /*
-ofstream myfile;
-myfile.open ("C:/Creatis/example.txt");
-myfile << "\n";
-polyDataResult->Print(myfile);
-myfile << "-------------------------------------\n";
-polyDataResult->GetLines()->Print(myfile);
-myfile.close();*/
+       //EED
+               /*
+       ofstream myfile;
+       myfile.open ("C:/Creatis/example.txt");
+       myfile << "\n";
+       polyDataResult->Print(myfile);
+       myfile << "-------------------------------------\n";
+       polyDataResult->GetLines()->Print(myfile);
+       myfile.close();*/
 
        cntVTK          -> Delete();
        cpd                     -> Delete();
        conn            -> Delete();
 
 
-//--Calculating control points
+       //--Calculating control points
 
        std::vector<double> vecX;
        std::vector<double> vecY;
@@ -1250,8 +1241,8 @@ myfile.close();*/
        double xAct=0;
        double yAct=0;
        int ii,size=polyDataResult->GetNumberOfPoints();
-ofstream myfile;
-myfile.open ("C:/Creatis/example2.txt");
+       ofstream myfile;
+       myfile.open ("C:/Creatis/example2.txt");
 
        size=polyDataResult->GetNumberOfPoints();
        for (ii=0;ii<size;ii++)
@@ -1294,9 +1285,9 @@ myfile.open ("C:/Creatis/example2.txt");
                {
                vecX.push_back( p[0] );
                myfile <<p[0]<<","<<p[1]<<"\n";
-               std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
-               std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
-               std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
+               //std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
+               //std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
+               //std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
                vecY.push_back( p[1] );
                vecZ.push_back( 900 );
                xAct=x;
@@ -1309,7 +1300,7 @@ myfile.open ("C:/Creatis/example2.txt");
        while(!vecXo.empty())
        {
                vecX.push_back(vecXo.back());
-               std::cout<<" x Siguiente "<<vecXo.back();
+               //std::cout<<" x Siguiente "<<vecXo.back();
                vecXo.pop_back();
                vecZ.push_back( 900 );
        }
@@ -1340,7 +1331,7 @@ myfile.open ("C:/Creatis/example2.txt");
 
        extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ );
        
-int method=2;
+       int method=2;
        if (method==0){
                extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
        }
@@ -1687,7 +1678,8 @@ void wxContourMainFrame::referenceLine()
                _refLineView->SetWidthLine(4);
 
                _refLineControl->SetModelView( _refLineModel , _refLineView );
-               viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
+               vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView();
+               style->AddInteractorStyleMaracas( _refLineControl );
                _refLineModel->SetCloseContour(false);
                _refLineControl->CreateNewManualContour();
 
@@ -1741,7 +1733,8 @@ void wxContourMainFrame::refLineShow()
                        _refLineView->SetZ( 1200 );
 
                        _refLineControl->SetModelView( _refLineModel , _refLineView );
-                       viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
+                       vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView();
+                       style->AddInteractorStyleMaracas( _refLineControl );
                        _refLineControl->CreateNewManualContour();
                        _refLineControl->SetActive(true);
                        _refLineView->RefreshContour();
@@ -1794,171 +1787,151 @@ void wxContourMainFrame::onMirror()
        //_refName = "";
 }
 
-void wxContourMainFrame::onThreshold(int minVal, int maxVal)
+void wxContourMainFrame::onThreshold()
 {
+       int     z = _theViewPanel->GetZ();
+       double range[2];
+
+       vtkImageData * img = getImageData();
+       img->GetScalarRange(range);
+
+       int minTot = floor (range[0]);
+       int maxTot = ceil (range[1]);
+
+       double minMax[2];
+       _pannew->onThresholdInstantChange(minMax);
+       int minVal = floor (minMax[0]);
+       int maxVal = floor (minMax[1]);
+
        if (!_actorPresent)
        {
-               int     z = _theViewPanel->GetZ();
-
-               vtkImageData * img = getImageData();
-               vtkImageReslice *imageReslice = vtkImageReslice::New();
+               if (_imageReslicer==NULL)
+               {
+                       _imageReslicer = vtkImageReslice::New();
+                       _imageReslicer->SetInput( img );
+                       _imageReslicer->SetInformationInput(img);
+                       _imageReslicer->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+                       _imageReslicer->SetOutputDimensionality(2);
+                       _imageReslicer->SetInterpolationModeToLinear();
+               }
 
-               imageReslice->SetInput( img );
-               imageReslice->SetInformationInput(img);
-               imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
-               imageReslice->SetResliceAxesOrigin(0,0,z);
-               imageReslice->SetOutputDimensionality(2);
-               imageReslice->SetInterpolationModeToLinear();
+               _imageReslicer->SetResliceAxesOrigin(0,0,z);
 
-               img = imageReslice->GetOutput();
+               img = _imageReslicer->GetOutput();
                img->Update();
                img->UpdateInformation();
 
                wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
-               
-               double range[2];
-               img->GetScalarRange(range);
-
-               int min = floor (range[0]);
-               int max = ceil (range[1]);
 
-               //Lookup Table
-               vtkLookupTable *lookup = vtkLookupTable::New();
-               lookup->SetNumberOfTableValues(max+1);
-               lookup->SetTableRange(range); 
-               lookup->SetAlphaRange(0, 1);
-               lookup->SetValueRange(0, 1);
-               lookup->SetSaturationRange(0, 0); 
-               lookup->SetRampToLinear( );
+               if (_thresholdTable==NULL)
+               {
+                       //Lookup Table
+                       _thresholdTable = vtkLookupTable::New();
+                       _thresholdTable->SetNumberOfTableValues(maxTot+1);
+                       _thresholdTable->SetTableRange(range); 
+                       _thresholdTable->SetAlphaRange(0, 1);
+                       _thresholdTable->SetValueRange(0, 1);
+                       _thresholdTable->SetSaturationRange(0, 0); 
+                       _thresholdTable->SetRampToLinear( );
+               }
 
                //Assign a fake color for the upper image, and set the white as transparent
                int i;
-               for(i = min; i <= max; i++)
+               for(i = minTot; i <= maxTot; i++)
                {
                        if( i >= minVal && i <= maxVal )
                        {
-                               lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+                               _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1);
                        }
-                       else if( i >= min && i < minVal )
+                       else if( i >= minTot && i < minVal )
                        {
-                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
                        }
-                       else if( i > maxVal && i < max )
+                       else if( i > maxVal && i < maxTot )
                        {
-                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
                        }
                        else
                        {
-                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
                        }
                }
-                       
-               lookup->Build( );
-
-               vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
-               mapperImage->SetLookupTable( lookup );
-               mapperImage->SetInput( img );
-               //mapperImage->SetOutputFormatToRGBA( );
+               _thresholdTable->Build( );
+       
+               if (_thresholdMapper==NULL)
+               {
+                       _thresholdMapper = vtkImageMapToColors::New( );
+               }
+               
+               _thresholdMapper->SetLookupTable( _thresholdTable );
+               _thresholdMapper->SetInput( img );
 
                if (_thresholdActor==NULL)
                {
                        _thresholdActor = vtkImageActor::New( );
                        _thresholdActor->SetOpacity( 0.6 );
-                       _thresholdActor->InterpolateOn(  ); 
+                       _thresholdActor->InterpolateOn(  );
+                       _thresholdActor->SetPosition( 0,0, 900-1 );
                }
-printf("EED wxContourMainFrame::onThreshold \n");      
-               _thresholdActor->SetPosition( 0,0, z+1 );
-               _thresholdActor->SetInput( mapperImage->GetOutput() );
+               
+               _thresholdActor->SetInput( _thresholdMapper->GetOutput() );
 
                baseView->GetRenderer()->AddActor( _thresholdActor );
                _actorPresent = true;
        }
 
-       RefreshInterface();
-/*
-       vtkImageViewer2* viewer = vtkImageViewer2::New();        
-       viewer->SetInput( upperImageActor->GetInput() ); 
-       viewer->SetColorLevel((range[1]-range[0])/2);
-       viewer->SetColorWindow(range[1]);
-       viewer->GetRenderer()->AddActor( upperImageActor );
-       viewer->Render();
-*/
-
-}
-
-void wxContourMainFrame::onThresholdChange(int minVal, int maxVal)
-{
-       if (_actorPresent)
+       else
        {
-               int     z = _theViewPanel->GetZ();
-
-               vtkImageData * img = getImageData();
-               vtkImageReslice *imageReslice = vtkImageReslice::New();
-
-               imageReslice->SetInput( img );
-               imageReslice->SetInformationInput(img);
-               imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
-               imageReslice->SetResliceAxesOrigin(0,0,z);
-               imageReslice->SetOutputDimensionality(2);
-               imageReslice->SetInterpolationModeToLinear();
-
-               img = imageReslice->GetOutput();
+               _imageReslicer->SetResliceAxesOrigin(0,0,z);
+               img = _imageReslicer->GetOutput();
                img->Update();
                img->UpdateInformation();
 
-//EED??                wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
-               
-               double range[2];
-               img->GetScalarRange(range);
-
-               int min = floor (range[0]);
-               int max = ceil (range[1]);
-
-               //Lookup Table
-               vtkLookupTable *lookup = vtkLookupTable::New();
-               lookup->SetNumberOfTableValues(max+1);
-               lookup->SetTableRange(range); 
-               lookup->SetAlphaRange(0, 1);
-               lookup->SetValueRange(0, 1);
-               lookup->SetSaturationRange(0, 0); 
-               lookup->SetRampToLinear( );
-
                //Assign a fake color for the upper image, and set the white as transparent
                int i;
-               for(i = min; i <= max; i++)
+               for(i = minTot; i <= maxTot; i++)
                {
                        if( i >= minVal && i <= maxVal )
                        {
-                               lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+                               _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1);
                        }
-                       else if( i >= min && i < minVal )
+                       else if( i >= minTot && i < minVal )
                        {
-                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
                        }
-                       else if( i > maxVal && i < max )
+                       else if( i > maxVal && i < maxTot )
                        {
-                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
                        }
                        else
                        {
-                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
                        }
                }
-                       
-               lookup->Build( );
 
-               vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
-               mapperImage->SetLookupTable( lookup );
-               mapperImage->SetInput( img );
-               //mapperImage->SetOutputFormatToRGBA( );
+               _thresholdTable->Build( );
+               _thresholdMapper->SetLookupTable( _thresholdTable );
+               _thresholdMapper->SetInput( img );
+               _thresholdActor->SetInput( _thresholdMapper->GetOutput() );
+       }
+                       /*
+                               vtkImageViewer2* viewer = vtkImageViewer2::New();        
+                               viewer->SetInput( upperImageActor->GetInput() ); 
+                               viewer->SetColorLevel((range[1]-range[0])/2);
+                               viewer->SetColorWindow(range[1]);
+                               viewer->GetRenderer()->AddActor( upperImageActor );
+                               viewer->Render();
+                       */
+       _theViewPanel->RefreshInterface();
+}
 
-               _thresholdActor->SetInput( mapperImage->GetOutput() );
-printf("EED wxContourMainFrame::onThresholdChange \n");        
-               _thresholdActor->SetPosition( 0,0, z+1 );
 
+void wxContourMainFrame::onThresholdChange()
+{
+       if (_actorPresent)
+       {
+               onThreshold();
        }
-
-       RefreshInterface();
 }
 
 void wxContourMainFrame::onThresholdInterpolation(bool interpolate)
@@ -1975,7 +1948,7 @@ void wxContourMainFrame::onThresholdInterpolation(bool interpolate)
                        _thresholdActor->InterpolateOff( );
                }
 
-               RefreshInterface();
+               _theViewPanel->RefreshInterface();
        }
 }
 
@@ -1986,7 +1959,7 @@ void wxContourMainFrame::onThresholdChangeOpacity (int opacity)
                _thresholdActor->SetOpacity(opacity*0.1);
        }
 
-       RefreshInterface();
+       _theViewPanel->RefreshInterface();
 }
 
 void wxContourMainFrame::onThresholdRemove()
@@ -1998,7 +1971,7 @@ void wxContourMainFrame::onThresholdRemove()
                _actorPresent = false;
        }
 
-       RefreshInterface();
+       _theViewPanel->RefreshInterface();
 }
 
 void wxContourMainFrame::showAxis(bool show)
@@ -2038,10 +2011,32 @@ void wxContourMainFrame::onWidthOfContour(double width){
 
        RefreshInterface();
 }
-int wxContourMainFrame::getColorWindow(){
+
+int wxContourMainFrame::getColorWindow()
+{
+       /*
+       double range[2];
+       vtkImageData * img = getImageData();
+       img->GetScalarRange(range);
+
+       std::cout<<"Val 1: "<<range[0]<<" Val 2: "<<range[1]<<std::endl;
+       
+       return (int)range[1];
+       */
        return _theViewPanel->getColorWindow();
 }
-int wxContourMainFrame::getWindowLevel(){
+
+int wxContourMainFrame::getWindowLevel()
+{
+       /*
+       double range[2];
+       vtkImageData * img = getImageData();
+       img->GetScalarRange(range);
+
+       std::cout<<"Val 1: "<<range[0]<<" Val 2: "<<range[1]<<std::endl;
+       
+       return (int)range[1];
+       */
        return _theViewPanel->getWindowLevel();
 }
 
@@ -2149,7 +2144,8 @@ std::vector<std::string> wxContourMainFrame::getOutlinesName(int slide){
        return kernelManager->getOutlinesNameAtInstant(tempVector);
 }
 
-void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ){
+void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ)
+{
        int maxContourGroup     =       0;
 
        ContourExtractData      *contourextractdata = new ContourExtractData();
@@ -2221,7 +2217,7 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
                //_staticTextInformation->SetLabel(tmpString);
 
                //Extraction data from contours of each slice
-               contourextractdata->SetZtoBeAnalys( z);
+               contourextractdata->SetZtoBeAnalys(z);
 
                tempVector[1]=z;
                Instant instant(&tempVector);
@@ -2340,45 +2336,62 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
        delete contourextractdata;
 }
 
-void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, int typeContourGroup){
-    SaveValuesXYZ( directory , namefile, typeContourGroup );
-
-       vtkImageData* mask, *value;
-       this->getMaskValue(mask, value, typeContourGroup);
-       this->SaveImageResult( directory , namefile, mask, value);
+//AD: 29-05-09
+void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, 
+       int typeContourGroup, bool XYZValues, bool contourImage, bool statistics)
+{
+       if (XYZValues)
+       {
+               SaveValuesXYZ( directory , namefile, typeContourGroup );
+       }
 
+       if (contourImage)
+       {
+               vtkImageData * mask;
+               vtkImageData * value;
+               this->getMaskValue(&mask, &value, typeContourGroup);
+               this->SaveImageResult( directory , namefile, mask, value);
+       }
        
-       FILE *pFile=fopen(filename.c_str(),"w+");
+       if (statistics)
+       {
+               std::ostringstream name;
+               name << filename << ".xls";
+               
 
-       int sizeZ = _theViewPanel->GetImageDataSizeZ();
+               FILE *pFile=fopen(name.str().c_str(),"w+");
 
-       wxString tmpString;
-       int i,j,maxX,maxY=sizeZ;
-       maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols();
+               int sizeZ = _theViewPanel->GetImageDataSizeZ();
 
-       int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics);
-       for ( iTitle=0; iTitle<sizeTitle ; iTitle++)
-       {
-               //              fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle,tmpString.c_str() );
-               fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle );
-       }
-       fprintf(pFile,"\n" );
+               wxString tmpString;
+               int i,j,maxX,maxY=sizeZ;
+               maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols();
 
+               int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics);
+               for ( iTitle=0; iTitle<sizeTitle ; iTitle++)
+               {
+                               // fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle,tmpString.c_str() );
+                               fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle );
+               }
+               fprintf(pFile,"\n" );
 
 
-       for ( j=0; j<maxY ; j++)
-       {
-               fprintf(pFile,"%d\t" , j );
-               for (i=0 ; i<maxX ; i++){
-                       tmpString = interfMainPanel::getInstance()->getCellValue(j, i);//_grid->GetCellValue( j , i );
-                       fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) );
-               } // for i
-               fprintf(pFile,"\n"  );
-       } // for j
 
-       fclose(pFile);
+               for ( j=0; j<maxY ; j++)
+               {
+                       fprintf(pFile,"%d\t" , j );
+                       for (i=0 ; i<maxX ; i++){
+                               tmpString = interfMainPanel::getInstance()->getCellValue(j, i);//_grid->GetCellValue( j , i );
+                               fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) );
+                       } // for i
+                       fprintf(pFile,"\n"  );
+               } // for j
+
+               fclose(pFile);
+       }
 }
 
+//AD: 29-05-09
 void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup)
 {
        wxBusyCursor wait;
@@ -2505,7 +2518,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
        delete contourextractdata;
 }
 
-void wxContourMainFrame::getMaskValue(vtkImageData* mask,vtkImageData* value,int typeContourGroup){
+void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value,int typeContourGroup){
        wxBusyCursor wait;
        ContourExtractData      *contourextractdata = new ContourExtractData( true );
        //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
@@ -2589,8 +2602,8 @@ void wxContourMainFrame::getMaskValue(vtkImageData* mask,vtkImageData* value,int
                } // for  iContourGroup
        } // for z
 
-       value = contourextractdata->GetVtkImageValueResult();
-       mask = contourextractdata->GetVtkImageMaskResult();
+       (*value) = contourextractdata->GetVtkImageValueResult();
+       (*mask) = contourextractdata->GetVtkImageMaskResult();
        delete contourextractdata;
 }