]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
no message
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index a8734c04804d7caf2854568d71f51f36d7ff6870..b6d2133f84b044328d314268bc7d81e88f567c84 100644 (file)
@@ -62,7 +62,8 @@ char wxContourMainFrame::COPY = 'C';
 //             m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
 //             m_notebook_theme = 0;   
                //wxContour_ActionCommandsID a;
-
+               
+               _contourextractdata                     = NULL;
        }
 
        wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector<vtkImageData*> images, long style,std::string datadir)         
@@ -99,15 +100,17 @@ char wxContourMainFrame::COPY = 'C';
 
                if(images.size() > 0)
                {
-                       _images = images;
                        this->setVectImages(images);
                }
-
+               
+               _contourextractdata                     = NULL;
 }
 
 void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
 {
 
+       _images = imgs;
+
        #if defined(__GNUC__)
                std::string str_home(getenv("HOME"));
        #elif defined(_WIN32)
@@ -168,6 +171,7 @@ void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
 
        wxContourMainFrame :: ~wxContourMainFrame()
        {
+               delete _contourextractdata;
                deleteAllContours();
                _pannew->Close();
                interfMainPanel::resetInstance();
@@ -577,13 +581,50 @@ void wxContourMainFrame::setConceptValue( std::string name, int value ){
        _instantPanel->setConceptValue(name, value);
 }
 
+
 ConceptDataWrap* wxContourMainFrame::getLastConceptData(){
        return _instantPanel->getLastConceptData();
 }
+
+
 bool wxContourMainFrame::getIfConceptCheckedAt( std::string name, int pos ){
        return _instantPanel->getIfConceptCheckedAt( name, pos );
 }
 
+
+
+void wxContourMainFrame::ShowResultImages(int typeContourGroup)
+{
+       vtkImageData * mask;
+       vtkImageData * value;
+       this->getMaskValue(&mask, &value, typeContourGroup);
+       
+       std::vector<int> nTypeView;
+       nTypeView.push_back(5);
+       nTypeView.push_back(1);
+       nTypeView.push_back(2);
+       nTypeView.push_back(0); 
+       
+       wxFrame *frame = new wxFrame(this, -1,_T("Result image extracted.."),wxDefaultPosition,wxSize(600,600), wxDEFAULT_FRAME_STYLE|wxSTAY_ON_TOP);
+       wxAuiManager *m_mgr_noteBookViewerResult = new wxAuiManager();
+       m_mgr_noteBookViewerResult->SetManagedWindow(frame);
+       
+       wxAuiNotebook* noteBookViewerResult = new wxAuiNotebook(frame, -1, wxPoint(600, 600), wxSize(430,200), m_notebook_style);
+       m_mgr_noteBookViewerResult->AddPane(noteBookViewerResult, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false));
+
+       wxPanel *panelViewer1 = new wxMaracas_N_ViewersWidget(noteBookViewerResult, value,&nTypeView);
+       wxPanel *panelViewer2 = new wxMaracas_N_ViewersWidget(noteBookViewerResult, mask,&nTypeView);
+       
+
+       noteBookViewerResult->AddPage( panelViewer1, wxT("Image result") );
+       noteBookViewerResult->AddPage( panelViewer2, wxT("Mask result") );
+       m_mgr_noteBookViewerResult->Update();
+       frame->Show();
+}
+
+
+
+
 void wxContourMainFrame::changeInstant()
 {
                std::vector<int> instantVect;
@@ -603,6 +644,7 @@ void wxContourMainFrame::changeInstant()
 }
 
 
+
 void wxContourMainFrame :: updateInstantOutlines()
 {
        _theViewPanel->removeSceneContours();
@@ -755,43 +797,21 @@ void wxContourMainFrame ::loadState(std::string filename){
 
        fscanf(pFile,"%s",tmp); // Version
        fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0
-       std::string version(tmp);
 
        deleteAllContours();
 
-       //AD:02-06-09
-       if (version=="1.0.2")
-       {
-               loadContours(pFile);
-       }
-       
-       //AD:02-06-09
-       else if (version=="1.0.1")
-       {
-               loadContours(pFile);
-       }
-       
-       //AD:02-06-09
-       else if (version=="1.0.0")
-       {
-               loadContours(pFile);
-       }
+       loadContours(pFile, false);
+       loadContours(pFile, true);      
 
        fclose(pFile);
 }
 
-void wxContourMainFrame ::loadContours( FILE *pFile )
+void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour )
 {
        char tmp[255];
-       fscanf(pFile,"%s",tmp); // NumberOfContours 
-       fscanf(pFile,"%s",tmp); // ##
-       int numberOfContours = atoi(tmp);  
 
-       std::vector<int> instantVector;
-       int typeContourModel;
-       manualContourModel *manModelContour;
-       int typeView;
-       
+       if (staticContour==false)
+       {
        fscanf(pFile,"%s",tmp); // ImageDimensions
        fscanf(pFile,"%s",tmp); // X
        fscanf(pFile,"%s",tmp); // Y
@@ -801,6 +821,16 @@ void wxContourMainFrame ::loadContours( FILE *pFile )
        fscanf(pFile,"%s",tmp); // X
        fscanf(pFile,"%s",tmp); // Y
        fscanf(pFile,"%s",tmp); // Z
+       }
+       
+       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++)
@@ -843,6 +873,12 @@ void wxContourMainFrame ::loadContours( FILE *pFile )
                        //_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
 }
 
@@ -864,19 +900,21 @@ void wxContourMainFrame::onLoad()
                //AD:02-06-09
                if (version=="1.0.2")
                {
-                       openContours(pFile,2);
+                       openContours(pFile,2,false);
+                       openContours(pFile,2,true);     //Load StaticContours
                }
                
                //AD:02-06-09
                else if (version=="1.0.1")
                {
-                       openContours(pFile,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,0);
+                       openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing
                }
 
                fclose(pFile);
@@ -906,12 +944,7 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
 
        fprintf(pFile,"--CreaContour--\n");
        fprintf(pFile,"Version %s\n", "1.0.2" );
-
-       // Normal Contours
-       lstNameThings           = kernelManager->GetLstNameThings();
-       sizeLstNameThings       = lstNameThings.size(); 
-       fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings );
-
+       
        vtkImageData *image = _images[0];
 
        int dimRange[3];
@@ -924,13 +957,24 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
 
        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 );
@@ -943,18 +987,10 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
 }
 
 //AD:04-06-09
-void wxContourMainFrame::openContours( FILE *pFile, int version )
+void wxContourMainFrame::openContours( FILE *pFile, int version, bool staticContour )
 {
        char tmp[255];
-       fscanf(pFile,"%s",tmp); // NumberOfContours 
-       fscanf(pFile,"%s",tmp); // ##
-       int numberOfContours = atoi(tmp);  
-
-       std::vector<int> instantVector;
-       int typeContourModel;
-       manualContourModel *manModelContour;
-       int typeView;
-
+       
        vtkImageData *image = _images[0];
        int imageDim[3];
        double imageSpac[3];
@@ -985,12 +1021,21 @@ void wxContourMainFrame::openContours( FILE *pFile, int version )
                fscanf(pFile,"%s",tmp); // Z
                tempSpac[2] = atof(tmp);
                
-               //Compare Spacing and Dims in X and Y (Necessary in Z?) - Just for Version 3
+               //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);  
+
+       std::vector<int> instantVector;
+       int typeContourModel;
+       manualContourModel *manModelContour;
+       int typeView;
 
        if (compatible==true)
        {
@@ -1038,7 +1083,7 @@ void wxContourMainFrame::openContours( FILE *pFile, int version )
                                _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ;
                        }       
 
-                       if (version==0) //StaticContours (will appear in all slices)
+                       if (staticContour) //StaticContours (will appear in all slices)
                        {
                                Instant instant(&instantVector);
                                kernelManager->changeContourOfManager( theName , &instant );
@@ -1049,7 +1094,7 @@ void wxContourMainFrame::openContours( FILE *pFile, int version )
 
        else if (compatible==false)
        {
-               wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(250,160));
+               wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(260,160));
                wxSizer* buttonsSizer = dial->CreateSeparatedButtonSizer(wxOK|wxCANCEL);
                wxBoxSizer *dialSizer = new wxBoxSizer(wxVERTICAL);
 
@@ -1058,7 +1103,7 @@ void wxContourMainFrame::openContours( FILE *pFile, int version )
                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 actual image is not compatible with the "))  , 0, wxGROW );
+               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);
@@ -1068,69 +1113,82 @@ void wxContourMainFrame::openContours( FILE *pFile, int version )
                dial->Layout();
                dial->ShowModal();
                
+               int typeOfTransformation = -1;
+               bool transform = false;
+
                if (dial->GetReturnCode() == wxID_OK)
                {
-                       int typeOfTransformation = radioOpts->GetSelection();
-                       
-                       int i;
-                       for (i=0;i<numberOfContours;i++)
+                       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)
                        {
-                               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);
-                               
                                if (typeOfTransformation==0)
                                {
-                                       manModelContour->OpenAndTransformDimension(pFile, imageDim, tempDim);
+                                       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)
                                {
-                                       manModelContour->OpenAndTransformSpacing(pFile, imageSpac, tempSpac);
+                                       double transX, transY;
+                                       transX = (double) tempSpac[0]/imageSpac[0];
+                                       transY = (double) tempSpac[1]/imageSpac[1];
+                                       manModelContour->Transform_Ax_Plus_B(transX,0,transY,0);
                                }
+                       }
 
-                               fscanf(pFile,"%s",tmp); // TypeView
-                               fscanf(pFile,"%s",tmp); // ##
-                               typeView = atoi(tmp);  
+                       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 (version==0) //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) ;
+                       }       
+
+                       if (staticContour) //StaticContours (will appear in all slices)
+                       {
+                               Instant instant(&instantVector);
+                               kernelManager->changeContourOfManager( theName , &instant );
+                       }
+               }// for  numberOfContours       
        }
 }
 
@@ -2312,13 +2370,21 @@ std::vector<std::string> wxContourMainFrame::getOutlinesName(int slide){
        return kernelManager->getOutlinesNameAtInstant(tempVector);
 }
 
+
+void wxContourMainFrame::GenerateContourExtractData()
+{
+       if (_contourextractdata==NULL) { _contourextractdata = new ContourExtractData(true); }
+}
+
+
 void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ)
 {
+       GenerateContourExtractData();
+       
        int maxContourGroup     =       0;
 
-       ContourExtractData      *contourextractdata = new ContourExtractData();
        
-       contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
+       _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
 
        std::vector<manualContourModel*> lstManConMod;
        std::vector<manualContourModel*> lstManConModTmp;
@@ -2372,7 +2438,7 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
        
 
        totalZ  = maxZ-minZ+1;
-       contourextractdata->SetImage( imagedata);
+       _contourextractdata->SetImage( imagedata);
 
 // For each slice..
        for ( z=minZ ; z<=maxZ ; z++ )
@@ -2385,7 +2451,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);
@@ -2432,18 +2498,18 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
                                lstManConModTmp = lstManConModExp;
                        }
 
-                       contourextractdata->SetLstManualContourModel( lstManConModTmp );
+                       _contourextractdata->SetLstManualContourModel( lstManConModTmp );
 
                        pLstValue.clear();
                        pLstValuePosX.clear();
                        pLstValuePosY.clear();
                        pLstValuePosZ.clear();
-                       contourextractdata->GetValuesInsideCrown(       &pLstValue,
+                       _contourextractdata->GetValuesInsideCrown(      &pLstValue,
                                                                                                                &pLstValuePosX,
                                                                                                                &pLstValuePosY,
                                                                                                                &pLstValuePosZ);
                        // Statistics of each slice.
-                       contourextractdata->Statistics( &pLstValue,
+                       _contourextractdata->Statistics( &pLstValue,
                                                                                        minimumZ,
                                                                                        maximumZ,
                                                                                        &resultGrayRangeCount, 
@@ -2501,7 +2567,6 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
        }
 
        interfMainPanel::getInstance()->setStringInfoPanel( _T("") );
-       delete contourextractdata;
 }
 
 //AD: 29-05-09
@@ -2563,9 +2628,10 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil
 void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup)
 {
        wxBusyCursor wait;
-       ContourExtractData      *contourextractdata = new ContourExtractData();
+       GenerateContourExtractData();
+       
        //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
-       contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
+       _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
 
        std::vector<manualContourModel*> lstManConMod;
        std::vector<manualContourModel*> lstManConModTmp;
@@ -2592,7 +2658,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
        maxZ    = sizeZ;//_mbarrange->GetEnd();
        totalZ  = maxZ-minZ+1;
 
-       contourextractdata->SetImage( imagedata);
+       _contourextractdata->SetImage( imagedata);
 
 // For each slice..
        for ( z=0 ; z<sizeZ ; z++)
@@ -2607,7 +2673,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
 
 
                //Extraction data from contours of each slice
-               contourextractdata->SetZtoBeAnalys( z);
+               _contourextractdata->SetZtoBeAnalys( z);
 
                tempVector[1]=z;
                Instant instant(&tempVector);
@@ -2642,13 +2708,13 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
                                lstManConModTmp = lstManConModExp;
                        }
 
-                       contourextractdata->SetLstManualContourModel( lstManConModTmp );
+                       _contourextractdata->SetLstManualContourModel( lstManConModTmp );
 
                        pLstValue.clear();
                        pLstValuePosX.clear();
                        pLstValuePosY.clear();
                        pLstValuePosZ.clear();
-                       contourextractdata->GetValuesInsideCrown(       &pLstValue,
+                       _contourextractdata->GetValuesInsideCrown(      &pLstValue,
                                                                                                                &pLstValuePosX,
                                                                                                                &pLstValuePosY,
                                                                                                                &pLstValuePosZ);
@@ -2683,18 +2749,19 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
        } // for z
        interfMainPanel::getInstance()->setStringInfoPanel(_T(""));
        //_staticTextInformation->SetLabel( _T("") );
-       delete contourextractdata;
+
 }
 
 void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value,int typeContourGroup){
        wxBusyCursor wait;
-       ContourExtractData      *contourextractdata = new ContourExtractData( true );
+       GenerateContourExtractData();
+
        //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
        if (typeContourGroup==3)
        {
                typeContourGroup=1;
        }
-       contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
+       _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
 
        std::vector<manualContourModel*> lstManConMod;
        std::vector<manualContourModel*> lstManConModTmp;
@@ -2719,7 +2786,7 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value
        maxZ    = sizeZ;//_mbarrange->GetEnd();
        totalZ  = maxZ-minZ+1;
 
-       contourextractdata->SetImage( imagedata);
+       _contourextractdata->SetImage( imagedata);
 
 // For each slice..
        for ( z=0 ; z<sizeZ ; z++)
@@ -2731,7 +2798,7 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value
                interfMainPanel::getInstance()->setStringInfoPanel(tmpString);
 
                //Extraction data from contours of each slice
-               contourextractdata->SetZtoBeAnalys( z);
+               _contourextractdata->SetZtoBeAnalys( z);
 
                tempVector[1]=z;
                Instant instant(&tempVector);
@@ -2764,15 +2831,15 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value
                                lstManConModTmp = lstManConModExp;
                        }
 
-                       contourextractdata->SetLstManualContourModel( lstManConModTmp );
-                       contourextractdata->CalculateImageResult(); // with actual Z
+                       _contourextractdata->SetLstManualContourModel( lstManConModTmp );
+                       _contourextractdata->CalculateImageResult(); // with actual Z
 
                } // for  iContourGroup
        } // for z
 
-       (*value) = contourextractdata->GetVtkImageValueResult();
-       (*mask) contourextractdata->GetVtkImageMaskResult();
-       delete contourextractdata;
+       (*value) = _contourextractdata->GetVtkImageValueResult();
+       (*mask)  = _contourextractdata->GetVtkImageMaskResult();
+
 }
 
 void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value)