]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
*** empty log message ***
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index 80caa583baf24919e62ffee61709d9b9a1f01d11..89f6c39f741d38bc0ee2f9cefcff02aec367c6c9 100644 (file)
@@ -104,7 +104,10 @@ char wxContourMainFrame::COPY = 'C';
 
 }
 
-void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
+void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
+{
+
+       _images = imgs;
 
        #if defined(__GNUC__)
                std::string str_home(getenv("HOME"));
@@ -119,7 +122,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 +169,7 @@ void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
 
        wxContourMainFrame :: ~wxContourMainFrame()
        {
-
+               deleteAllContours();
                _pannew->Close();
                interfMainPanel::resetInstance();
                delete kernelManager;
@@ -752,24 +755,94 @@ void wxContourMainFrame ::loadState(std::string filename){
        fscanf(pFile,"%s",tmp); // --CreaContour--
 
        fscanf(pFile,"%s",tmp); // Version
-       fscanf(pFile,"%s",tmp); // 1.0.1
-       std::string version(tmp);
+       fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0
 
        deleteAllContours();
 
-       openContours(pFile,false);
-       if (version!="1.0.0"){
-               openContours(pFile,true);
-       }
+       loadContours(pFile, false);
+       loadContours(pFile, true);      
 
        fclose(pFile);
+}
+
+void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour )
+{
+       char tmp[255];
+
+       if (staticContour==false)
+       {
+       fscanf(pFile,"%s",tmp); // ImageDimensions
+       fscanf(pFile,"%s",tmp); // X
+       fscanf(pFile,"%s",tmp); // Y
+       fscanf(pFile,"%s",tmp); // Z
+
+       fscanf(pFile,"%s",tmp); // ImageSpacing
+       fscanf(pFile,"%s",tmp); // X
+       fscanf(pFile,"%s",tmp); // Y
+       fscanf(pFile,"%s",tmp); // Z
+       }
        
-       //_theViewPanel->getSceneManager()->removeSceneContours();
-       //changeInstant();
+       fscanf(pFile,"%s",tmp); // NumberOfContours 
+       fscanf(pFile,"%s",tmp); // ##
+       int numberOfContours = atoi(tmp);  
 
+       std::vector<int> instantVector;
+       int typeContourModel;
+       manualContourModel *manModelContour;
+       int typeView;
+
+       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); // TypeView
+               fscanf(pFile,"%s",tmp); // ##
+               typeView = atoi(tmp);  
+
+               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
 }
 
-void wxContourMainFrame::onLoad(){
+void wxContourMainFrame::onLoad()
+{
        char tmp[255];
        wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN );
        if (dialog.ShowModal() == wxID_OK)
@@ -780,20 +853,36 @@ 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.2 || 1.0.1 || 1.0.0
                std::string version(tmp);
-
-               openContours(pFile,false);
-               if (version!="1.0.0"){
-                       openContours(pFile,true);
+               
+               //AD:02-06-09
+               if (version=="1.0.2")
+               {
+                       openContours(pFile,2,false);
+                       openContours(pFile,2,true);     //Load StaticContours
+               }
+               
+               //AD:02-06-09
+               else if (version=="1.0.1")
+               {
+                       openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing
+                       openContours(pFile,1,true); //Load StaticContours, skips ImageDimensions and ImageSpacing
+               }
+               
+               //AD:02-06-09
+               else if (version=="1.0.0")
+               {
+                       openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing
                }
-//                       _theViewPanel->getSceneManager()->openFileWithContours(ff);
 
                fclose(pFile);
        }
        _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)
@@ -803,6 +892,8 @@ void wxContourMainFrame::onSave(){
                saveFileWithContours( fileNameContourROI );
        }
 }
+
+//AD: 29-05-09
 void wxContourMainFrame::saveFileWithContours( std::string filename )
 {
 
@@ -811,19 +902,38 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
        int i,sizeLstNameThings; 
 
        fprintf(pFile,"--CreaContour--\n");
-       fprintf(pFile,"Version %s\n", "1.0.1" );
+       fprintf(pFile,"Version %s\n", "1.0.2" );
+       
+       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] );
 
        // Normal Contours
+       
        lstNameThings           = kernelManager->GetLstNameThings();
        sizeLstNameThings       = lstNameThings.size(); 
        fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings );
+
        for (i=0 ; i<sizeLstNameThings ; i++) 
        {
                kernelManager->SaveThingName( pFile, lstNameThings[i] );
                _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] );
        }// for i
 
-       //-- Contours Statics 
+       //-- Static Contours
+
+       fprintf(pFile,"ImageDimensions %d %d %d\n", dimRange[0], dimRange[1], dimRange[2] );
+       
+       fprintf(pFile,"ImageSpacing %f %f %f\n", spaRange[0], spaRange[1], spaRange[2] );
+       
        lstNameThings           = kernelManager->GetLstNameThingsStatic();
        sizeLstNameThings       = lstNameThings.size(); 
        fprintf(pFile,"NumberOfContoursStatic %d\n", sizeLstNameThings );
@@ -835,8 +945,48 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
        fclose(pFile);
 }
 
-void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){
+//AD:04-06-09
+void wxContourMainFrame::openContours( FILE *pFile, int version, bool staticContour )
+{
        char tmp[255];
+       
+       vtkImageData *image = _images[0];
+       int imageDim[3];
+       double imageSpac[3];
+       int tempDim[3];
+       double tempSpac[3];
+       
+       bool compatible = true;
+       
+       //Version==2    
+       if (version==2)
+       {
+               image->GetDimensions(imageDim);
+               image->GetSpacing(imageSpac);
+
+               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);
+               
+               //Compare Spacing and Dims in X and Y (Necessary in Z?) - Just for Version 2
+               if (imageDim[0]!=tempDim[0] || imageDim[1]!=tempDim[1] || imageSpac[0]!=tempSpac[0] || imageSpac[1]!=tempSpac[1])
+               {
+                       compatible = false;
+               }
+       }
+       
        fscanf(pFile,"%s",tmp); // NumberOfContours 
        fscanf(pFile,"%s",tmp); // ##
        int numberOfContours = atoi(tmp);  
@@ -846,64 +996,159 @@ void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){
        manualContourModel *manModelContour;
        int typeView;
 
-       int i;
-       for (i=0;i<numberOfContours;i++)
+       if (compatible==true)
        {
-               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); // TypeView
-               fscanf(pFile,"%s",tmp); // ##
-               typeView = atoi(tmp);  
-
-
-//                     if (typeView==1) 
-//                     {
-//                     }
+               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); // TypeView
+                       fscanf(pFile,"%s",tmp); // ##
+                       typeView = atoi(tmp);  
+
+                       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) //StaticContours (will appear in all slices)
+                       {
+                               Instant instant(&instantVector);
+                               kernelManager->changeContourOfManager( theName , &instant );
+                       }
 
+               }// for  numberOfContours       
+       }
 
-               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) ;
-               }       
+       else if (compatible==false)
+       {
+               wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(260,160));
+               wxSizer* buttonsSizer = dial->CreateSeparatedButtonSizer(wxOK|wxCANCEL);
+               wxBoxSizer *dialSizer = new wxBoxSizer(wxVERTICAL);
+
+               wxString lstOptOperation[2];
+               lstOptOperation[0]=_T("By Dimension");
+               lstOptOperation[1]=_T("By Spacing");
+               wxRadioBox * radioOpts = new wxRadioBox(dial, -1, _T("Type of Transformation"), wxDefaultPosition, wxSize(270,45), 2 , lstOptOperation,  2, wxRA_SPECIFY_COLS);         
+               
+               dialSizer->Add( new wxStaticText(dial,-1,_T("The image resolution is not compatible with the "))  , 0, wxGROW );
+               dialSizer->Add( new wxStaticText(dial,-1,_T("selected Roi file. Do you want to tranform it?"))  , 0, wxGROW );  
+               dialSizer->Add( new wxStaticText(dial,-1,_T(" "))  , 0, wxGROW );               
+               dialSizer->Add(radioOpts,0,wxGROW);
+               dialSizer->Add( new wxStaticText(dial,-1,_T(" "))  , 0, wxGROW );       
+               dialSizer->Add(buttonsSizer,0,wxGROW);
+               dial->SetSizer(dialSizer, true);
+               dial->Layout();
+               dial->ShowModal();
+               
+               int typeOfTransformation = -1;
+               bool transform = false;
 
-               if (staticContour==true)
+               if (dial->GetReturnCode() == wxID_OK)
                {
-                       Instant instant(&instantVector);
-                       kernelManager->changeContourOfManager( theName , &instant );
+                       typeOfTransformation = radioOpts->GetSelection();
+                       transform = 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);
+
+                       if (transform==true)
+                       {
+                               if (typeOfTransformation==0)
+                               {
+                                       double transX, transY;
+                                       transX = (double) imageDim[0]/tempDim[0];
+                                       transY = (double) imageDim[1]/tempDim[1];
+                                       manModelContour->Transform_Ax_Plus_B(transX,0,transY,0);
+                               }
+                               else if (typeOfTransformation==1)
+                               {
+                                       double transX, transY;
+                                       transX = (double) tempSpac[0]/imageSpac[0];
+                                       transY = (double) tempSpac[1]/imageSpac[1];
+                                       manModelContour->Transform_Ax_Plus_B(transX,0,transY,0);
+                               }
+                       }
 
-       }// for  numberOfContours
+                       fscanf(pFile,"%s",tmp); // TypeView
+                       fscanf(pFile,"%s",tmp); // ##
+                       typeView = atoi(tmp);  
 
+                       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) //StaticContours (will appear in all slices)
+                       {
+                               Instant instant(&instantVector);
+                               kernelManager->changeContourOfManager( theName , &instant );
+                       }
+               }// for  numberOfContours       
+       }
 }
 
 void wxContourMainFrame::RefreshInterface(){
@@ -1615,14 +1860,22 @@ void wxContourMainFrame::referenceLine()
                _refLineModel->SetCloseContour(false);
                _refLineControl->CreateNewManualContour();
 
-//EED??                double z = _refLineControl->GetZ();
+//AD: Inicializar el mirroring con una linea ya pintada        
        /*
-               _refLineControl->AddPoint(50,100,z);
-               _refLineControl->AddPoint(80,40,z);
+               double z = _refLineControl->GetZ();
+
+               int imageDim[3];
+               image->GetDimensions(imageDim);
+               double x = (double) imageDim[0]/2;
+               double y1 = (double) (imageDim[1]/2)+15;
+               double y2 = (double) (imageDim[1]/2)-15;
+
+               _refLineControl->AddPoint(x,y1,z);
+               _refLineControl->AddPoint(x,y2,z);
                _refLineControl->SetCompleteCreation(true);
 
-               _refLineModel->AddPoint(50,100,z);
-               _refLineModel->AddPoint(80,40,z);
+               _refLineModel->AddPoint(x,y1,z);
+               _refLineModel->AddPoint(x,y2,z);
                _refLineModel->UpdateSpline();
 
                _refLineView->UpdateViewPoint(0);
@@ -1943,10 +2196,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();
 }
 
@@ -2054,7 +2329,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();
@@ -2126,7 +2402,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);
@@ -2245,45 +2521,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;
@@ -2410,7 +2703,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();
@@ -2494,8 +2787,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;
 }