]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
*** empty log message ***
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index 7d2b6948bca4bda0f50ace80c3aa2154452aac8e..4e810cae54fe05a8a5bb78e44665db12ee571ddd 100644 (file)
@@ -15,6 +15,9 @@
 #include "ConceptDataWrap.h"
 #include <creaWx.h>
 
+#include <string>
+using namespace std;
+
 //----------------------------------------------------------------------------------------------------------------
 // Class implementation
 //----------------------------------------------------------------------------------------------------------------
@@ -33,6 +36,7 @@ char wxContourMainFrame::COPY = 'C';
                : wxPanel(parent, id, pos, size, style)
        {
                m_mgr.SetManagedWindow(this);
+               _contourGroup                           = 1;
                _creatingContoursActive         = false;
                _theViewPanel                           = NULL;
 //             _modelManager                           = NULL;
@@ -52,16 +56,18 @@ char wxContourMainFrame::COPY = 'C';
                _refLineControl                         = NULL;
                _refLineModel                           = NULL;
                _refLineView                            = NULL;
-               _imageReslicer                          = NULL;
-               _thresholdTable                         = NULL;
-               _thresholdMapper                        = NULL;
-               _thresholdActor                         = NULL;
-               _actorPresent                           = false;
+//             _actorPresent                           = false;
 
                // set up default notebook style
 //             m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
 //             m_notebook_theme = 0;   
                //wxContour_ActionCommandsID a;
+               
+               _contourextractdata                     = NULL;
+               _viewMaskImage                          = NULL;
+               _viewMaskImagePanel                     = NULL;
+               _viewThresholdImage                     = NULL;
+               _viewThresholdImagePanel        = NULL;
 
        }
 
@@ -69,6 +75,7 @@ char wxContourMainFrame::COPY = 'C';
                : wxPanel(parent, id, pos, size, style)
        {
                m_mgr.SetManagedWindow(this);
+               _contourGroup                           = 1;
                _creatingContoursActive         = false;
                _theViewPanel                           = NULL;
 
@@ -76,11 +83,11 @@ char wxContourMainFrame::COPY = 'C';
                _refLineControl                         = NULL;
                _refLineModel                           = NULL;
                _refLineView                            = NULL;
-               _imageReslicer                          = NULL;
-               _thresholdTable                         = NULL;
-               _thresholdMapper                        = NULL;
-               _thresholdActor                         = NULL;
-               _actorPresent                           = false;
+//             _actorPresent                           = false;
+               _viewMaskImage                          = NULL;
+               _viewMaskImagePanel                     = NULL;
+               _viewThresholdImage                     = NULL;
+               _viewThresholdImagePanel        = NULL;
 
                // set up default notebook style
                m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
@@ -99,16 +106,17 @@ char wxContourMainFrame::COPY = 'C';
 
                if(images.size() > 0)
                {
-                       
                        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)
@@ -169,6 +177,7 @@ void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
 
        wxContourMainFrame :: ~wxContourMainFrame()
        {
+               delete _contourextractdata;
                deleteAllContours();
                _pannew->Close();
                interfMainPanel::resetInstance();
@@ -328,12 +337,21 @@ void wxContourMainFrame::onCreateContourLine( ){
        createContour( 6 );
 }
 
+// RaC 09-09 --------------------------------------
+void wxContourMainFrame::onCreateContourPoints( ){
+    //JCP 20-10-08 Undo redo implementation
+       saveState();
+       //JCP 20-10-08 Undo redo implementation 
+       createContour( 7 );
+}
+// RaC 09-09 --------------------------------------
+
 //------------------------------------------------------------------------------------------------------------
 
 void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel )
 {
-       //Creating the manualContourModel and including in the model
-       manualContourModel * manModelContour = factoryManualContourModel(panel );
+       //Creating the manualBaseModel and including in the model
+       manualBaseModel * manModelContour = factoryManualContourModel(panel );
 
        std::vector<int> instantVector;
        _instantPanel->getInstant( instantVector );
@@ -358,8 +376,7 @@ void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel )
 void wxContourMainFrame :: createContour( int typeContour )
 {
        //Creating the manualContourModel and including in the model
-       manualContourModel * manModelContour = kernelManager->factoryManualContourModel(typeContour);
-
+       manualBaseModel * manModelContour = kernelManager->factoryManualContourModel(typeContour);
 
        std::vector<int> instantVector;
        _instantPanel->getInstant( instantVector );
@@ -381,10 +398,10 @@ void wxContourMainFrame :: createContour( int typeContour )
        }       
 
 }
-manualContourModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){
+manualBaseModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){
 
        manualContourModelBullEye *manModelContourBullEye = new manualContourModelBullEye();
-       manualContourModel *manModelContour=NULL;
+       manualBaseModel *manModelContour=NULL;
        manModelContour = manModelContourBullEye;
        if (panel!=NULL){
                int iCrown,sizeCrowns,iSector,sizeSectors;
@@ -502,11 +519,6 @@ void wxContourMainFrame :: deleteContour( std::string theKeyName ){
                //cViewer               = conwrapviewControl->getViewer();
                //_theViewPanel->getSceneManager()->removeWrap( theKeyName );
                //cControler* conwrapviewControl->getControler();                       
-//EED Borrame
-//FILE *ff = fopen("c:/temp/wxVtkBaseView_SceneManagerStadistics.txt","a+");
-//fprintf(ff,"EED wxContourEventHandler::deleteContours() \n" );
-//fprintf(ff,"    %s %p\n",keyNamesVector[i].c_str(),  cControler );
-//fclose(ff);
        //      delete cModel;
        //      delete cViewer;
        //      delete cControler;
@@ -578,32 +590,84 @@ 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, int selection, int minZ, int maxZ)
+{
+       vtkImageData * mask;
+       vtkImageData * value;
+       this->getMaskValue(&mask, &value, typeContourGroup, selection, minZ, maxZ);
+       
+       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;
                _instantPanel->getInstant( instantVect );
-//             Instant * theInstant = new Instant ( &instantVect );
-               
-               //Setting the actual instant
-               //_actualInstant = theInstant;
+               int actualSlice = instantVect[1];
 
                kernelManager->setInstant(instantVect);
-               //_modelManager->setInstant( _actualInstant );
-               
-           onThresholdChange();
+                       
+           // Refresh Mask image
+               if(_viewMaskImage!=NULL){
+                       _viewMaskImage->SetZ(actualSlice);                      
+                       if (_viewMaskImagePanel->IsVisible()==true)
+                       {
+                               vtkImageData *mask, *value;
+                               getMaskValue(&mask,&value, _contourGroup , 0, -1, -1);
+                               _viewMaskImage->onThreshold();
+                       }
+               }
+       
+       // Refresh Threshold image
+               if(_viewThresholdImage!=NULL){
+                       _viewThresholdImage->SetZ(actualSlice);                 
+                       if (_viewThresholdImagePanel->IsVisible()==true){
+                               _viewThresholdImage->onThreshold();
+                       }
+               }
+       
                updateInstantOutlines();
                updateInstantImageData();
                updateInstantAxes();
 }
 
 
+
 void wxContourMainFrame :: updateInstantOutlines()
 {
        _theViewPanel->removeSceneContours();
@@ -698,7 +762,7 @@ void wxContourMainFrame::onRedo(){
 void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
 {
        std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
-       manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+       manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
        _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
 }
 
@@ -706,7 +770,7 @@ void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, st
 void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
 {
        std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
-       manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
+       manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
 
        manualPoint * refPoint1 = _refLineModel->GetManualPoint(0);
        manualPoint * refPoint2 = _refLineModel->GetManualPoint(1);
@@ -756,43 +820,19 @@ 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;
-       
        fscanf(pFile,"%s",tmp); // ImageDimensions
        fscanf(pFile,"%s",tmp); // X
        fscanf(pFile,"%s",tmp); // Y
@@ -802,6 +842,15 @@ 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;
+       manualBaseModel *manModelContour;
+       int typeView;
 
        int i;
        for (i=0;i<numberOfContours;i++)
@@ -844,17 +893,53 @@ 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
 }
 
 void wxContourMainFrame::onLoad()
 {
        char tmp[255];
-       wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN );
-       if (dialog.ShowModal() == wxID_OK)
+       char tmpD[255];
+       std::string fileNameContourROI = GetFileLocation();
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       if(GetFileLocation().empty())
+       {
+//------------------------------------------------------------------------------------------------------------
+               wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN );
+               if (dialog.ShowModal() == wxID_OK)
+               {
+                       fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+               }
+       }
+
+       FILE *pFile =fopen(fileNameContourROI.c_str(),"r+");
+
+
+//CMRU 03-09-09- ----------------------------------------------------------------------------------------------
+       if(pFile != NULL)
        {
-               std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
-               FILE *pFile=fopen(fileNameContourROI.c_str(),"r+");
+//------------------------------------------------------------------------------------------------------------
+        fileNameContourROI.append("data");     
+               FILE *pFileData=fopen(fileNameContourROI.c_str(),"r+");
+               if(pFileData != NULL)
+               {
+                       fscanf(pFileData,"%s",tmpD); // --CreaContour--
+                       fscanf(pFileData,"%s",tmpD); // Version
+                       fscanf(pFileData,"%s",tmpD); // 1.0.2 || 1.0.1 || 1.0.0
+                       
+                       fscanf(pFileData,"%s",tmpD); // onePixelSize
+                       fscanf(pFileData,"%s",tmpD); // #
+                       _onePixelSize = atof(tmpD);             
+                       fscanf(pFileData,"%s",tmpD); // NumberOfContours  
+                       fscanf(pFileData,"%s",tmpD); // #
+               }
 
                fscanf(pFile,"%s",tmp); // --CreaContour--
 
@@ -865,22 +950,29 @@ void wxContourMainFrame::onLoad()
                //AD:02-06-09
                if (version=="1.0.2")
                {
-                       openContours(pFile,2);
+                       openContours(pFile,pFileData,2,false);
+                       openContours(pFile,pFileData,2,true);   //Load StaticContours
                }
                
                //AD:02-06-09
                else if (version=="1.0.1")
                {
-                       openContours(pFile,1);
+                       openContours(pFile,pFileData,1,false); //Skips ImageDimensions and ImageSpacing
+                       openContours(pFile,pFileData,1,true); //Load StaticContours, skips ImageDimensions and ImageSpacing
                }
                
                //AD:02-06-09
                else if (version=="1.0.0")
                {
-                       openContours(pFile,0);
+                       openContours(pFile,pFileData,1,false); //Skips ImageDimensions and ImageSpacing
                }
 
                fclose(pFile);
+
+               if(pFileData != NULL)
+               {
+                       fclose(pFileData);
+               }
        }
        _theViewPanel->getSceneManager()->removeSceneContours();
        changeInstant();
@@ -888,13 +980,28 @@ void wxContourMainFrame::onLoad()
 
 //AD: 29-05-09
 void wxContourMainFrame::onSave(){
-       wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
-       if (dialog.ShowModal() == wxID_OK)
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       if(GetFileLocation().empty())
        {
-               std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+//------------------------------------------------------------------------------------------------------------
+               wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
+               if (dialog.ShowModal() == wxID_OK)
+               {
+                       std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+                       kernelManager->setCurrentFileName(fileNameContourROI);
+                       saveFileWithContours( fileNameContourROI );
+               }
+       }
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       else
+       {
+               std::cout<<"Nombre del archivo: "<<GetFileLocation()<<std::endl;                
+               std::string fileNameContourROI = GetFileLocation();
+               std::cout<<"Nombre del archivo: "<<fileNameContourROI<<std::endl;               
                kernelManager->setCurrentFileName(fileNameContourROI);
-               saveFileWithContours( fileNameContourROI );
+               saveFileWithContours( fileNameContourROI);
        }
+//------------------------------------------------------------------------------------------------------------
 }
 
 //AD: 29-05-09
@@ -902,17 +1009,26 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
 {
 
        FILE *pFile=fopen(filename.c_str(),"w+");
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       filename.append("data");
+       std::cout<<"Nombre del archivo: "<<filename<<std::endl;         
+       FILE *pFileData=fopen(filename.c_str(),"w+");
+//------------------------------------------------------------------------------------------------------------
+
        std::vector< std::string > lstNameThings;
        int i,sizeLstNameThings; 
 
        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 );
-
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       fprintf(pFileData,"--CreaContour--\n");
+       fprintf(pFileData,"Version %s\n", "1.0.2" );
+       fprintf(pFileData,"OnePixelSize %f\n", _onePixelSize);
+       
+//------------------------------------------------------------------------------------------------------------
+       
        vtkImageData *image = _images[0];
 
        int dimRange[3];
@@ -925,37 +1041,59 @@ 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 );
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       fprintf(pFileData,"NumberOfContours %d\n", sizeLstNameThings );
+//------------------------------------------------------------------------------------------------------------
+
        for (i=0 ; i<sizeLstNameThings ; i++) 
        {
-               kernelManager->SaveThingName( pFile, lstNameThings[i] );
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
+               double sizeInPixel = manualModel ->GetPathSize();
+               double realContourSize = sizeInPixel*_onePixelSize;
+               manualModel ->SetRealSize(realContourSize);
+//------------------------------------------------------------------------------------------------------------
+
+       //int size= kernelManager->GetLstNameThings().size();
+
+               kernelManager->SaveThingName( pFile, pFileData, 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 );
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       fprintf(pFileData,"NumberOfContoursStatic %d\n", sizeLstNameThings );
+//------------------------------------------------------------------------------------------------------------
+
        for (i=0 ; i<sizeLstNameThings ; i++) 
        {
-               kernelManager->SaveThingName( pFile, lstNameThings[i] );
+               kernelManager->SaveThingName( pFile, pFileData, lstNameThings[i] );
                _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] );
        }// for i
        fclose(pFile);
+       fclose(pFileData);
 }
 
 //AD:04-06-09
-void wxContourMainFrame::openContours( FILE *pFile, int version )
+void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, 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];
@@ -986,12 +1124,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;
+       manualBaseModel *manModelContour;
+       int typeView;
 
        if (compatible==true)
        {
@@ -1021,6 +1168,10 @@ void wxContourMainFrame::openContours( FILE *pFile, int version )
 
                        manModelContour =  kernelManager->factoryManualContourModel(typeContourModel);
                        manModelContour->Open(pFile);
+                       if(pFileData != NULL)
+                       {
+                               manModelContour->OpenData(pFileData);
+                       }
 
                        fscanf(pFile,"%s",tmp); // TypeView
                        fscanf(pFile,"%s",tmp); // ##
@@ -1039,7 +1190,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 );
@@ -1103,7 +1254,10 @@ void wxContourMainFrame::openContours( FILE *pFile, int version )
 
                        manModelContour =  kernelManager->factoryManualContourModel(typeContourModel);
                        manModelContour->Open(pFile);
-
+                       if(pFileData != NULL)
+                       {
+                               manModelContour->OpenData(pFileData);
+                       }
                        if (transform==true)
                        {
                                if (typeOfTransformation==0)
@@ -1139,7 +1293,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 );
@@ -1524,7 +1678,7 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
 
        int j,sizeCtrPt = vecCtrlPointX.size();
        
-       manualContourModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
+       manualBaseModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
        manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
        if (sizeCtrPt>=3){
                for (j=0 ; j<sizeCtrPt ; j++)
@@ -1768,7 +1922,7 @@ myfile.close();
        actualInstantVector[1]=z;
 
        int j,sizeCtrPt = vecCtrlPointX.size();
-       manualContourModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
+       manualBaseModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
        manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
        if (sizeCtrPt>=3){
                for (j=0 ; j<sizeCtrPt ; j++)
@@ -1969,192 +2123,6 @@ void wxContourMainFrame::onMirror()
        //_refName = "";
 }
 
-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)
-       {
-               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();
-               }
-
-               _imageReslicer->SetResliceAxesOrigin(0,0,z);
-
-               img = _imageReslicer->GetOutput();
-               img->Update();
-               img->UpdateInformation();
-
-               wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
-
-               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 = minTot; i <= maxTot; i++)
-               {
-                       if( i >= minVal && i <= maxVal )
-                       {
-                               _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1);
-                       }
-                       else if( i >= minTot && i < minVal )
-                       {
-                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                       }
-                       else if( i > maxVal && i < maxTot )
-                       {
-                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                       }
-                       else
-                       {
-                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                       }
-               }
-               _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->SetPosition( 0,0, 900-1 );
-               }
-               
-               _thresholdActor->SetInput( _thresholdMapper->GetOutput() );
-
-               baseView->GetRenderer()->AddActor( _thresholdActor );
-               _actorPresent = true;
-       }
-
-       else
-       {
-               _imageReslicer->SetResliceAxesOrigin(0,0,z);
-               img = _imageReslicer->GetOutput();
-               img->Update();
-               img->UpdateInformation();
-
-               //Assign a fake color for the upper image, and set the white as transparent
-               int i;
-               for(i = minTot; i <= maxTot; i++)
-               {
-                       if( i >= minVal && i <= maxVal )
-                       {
-                               _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1);
-                       }
-                       else if( i >= minTot && i < minVal )
-                       {
-                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                       }
-                       else if( i > maxVal && i < maxTot )
-                       {
-                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                       }
-                       else
-                       {
-                               _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
-                       }
-               }
-
-               _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();
-}
-
-
-void wxContourMainFrame::onThresholdChange()
-{
-       if (_actorPresent)
-       {
-               onThreshold();
-       }
-}
-
-void wxContourMainFrame::onThresholdInterpolation(bool interpolate)
-{
-       if (_thresholdActor!=NULL)
-       {
-               if (interpolate)
-               {
-                       _thresholdActor->InterpolateOn( );
-               }
-
-               else
-               {
-                       _thresholdActor->InterpolateOff( );
-               }
-
-               _theViewPanel->RefreshInterface();
-       }
-}
-
-void wxContourMainFrame::onThresholdChangeOpacity (int opacity)
-{
-       if (_actorPresent)
-       {
-               _thresholdActor->SetOpacity(opacity*0.1);
-       }
-
-       _theViewPanel->RefreshInterface();
-}
-
-void wxContourMainFrame::onThresholdRemove()
-{
-       if (_actorPresent)
-       {
-               wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
-               baseView->GetRenderer()->RemoveActor( _thresholdActor );
-               _actorPresent = false;
-       }
-
-       _theViewPanel->RefreshInterface();
-}
 
 void wxContourMainFrame::showAxis(bool show)
 {
@@ -2293,7 +2261,7 @@ void wxContourMainFrame::onSpreadGo(int type){
 
                int typeofcontour = 1;
                std::string theName;
-               manualContourModel* manModelContour = kernelManager->GetPoints(z, type, &vecCtrlPointX,&vecCtrlPointY,&vecCtrlPointZ, theName,typeofcontour, tempVector);
+               manualBaseModel* manModelContour = kernelManager->GetPoints(z, type, &vecCtrlPointX,&vecCtrlPointY,&vecCtrlPointZ, theName,typeofcontour, tempVector);
 
                if( manModelContour!=NULL ){
                        double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
@@ -2326,17 +2294,20 @@ 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 grayRangeMin, int grayRangeMax)
 {
+//EED01Juillet2009     GenerateContourExtractData();
+       
+       wxString tempString;
        int maxContourGroup     =       0;
-
-       ContourExtractData      *contourextractdata = new ContourExtractData();
        
-       contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
+       _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
 
-       std::vector<manualContourModel*> lstManConMod;
-       std::vector<manualContourModel*> lstManConModTmp;
-       std::vector<manualContourModel*> lstManConModExp;
+       std::vector<manualBaseModel*> lstManConMod;
+       std::vector<manualBaseModel*> lstManConModTmp;
+       std::vector<manualBaseModel*> lstManConModExp;
        std::vector<double> pLstValue;
        std::vector<double> pLstValuePosX;
        std::vector<double> pLstValuePosY;
@@ -2352,8 +2323,8 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
        std::vector<int> tempVector;
        _instantPanel->getInstant( tempVector );
 
-       vtkImageData *imagedata = _theViewPanel->getImageData();
-       int sizeZ = _theViewPanel->GetImageDataSizeZ();
+//EED01Juillet2009     vtkImageData *imagedata = _theViewPanel->getImageData();
+//     int sizeZ = _theViewPanel->GetImageDataSizeZ();
        int z;
        int ii,sizeLstContourThings;
 
@@ -2363,31 +2334,23 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
        double porcent; 
        wxString tmpString;
 
-       
 
        if (selection==0 ) // actual slice
        {
-               std::vector<int> tempVector;
-               _instantPanel->getInstant( tempVector );
                int actualSlice = tempVector[1];
                minZ    = actualSlice;
                maxZ    = actualSlice;
-       }
-       else if (selection==2 ) // All slices
-       {
-               minZ    = 0;
-               maxZ    = sizeZ-1;
-       }
-       else if (selection==1 ) // slice range
-       {
+       }       else  {  // slice range
                minZ    = minimumZ;
                maxZ    = maximumZ;
        }
        
 
        totalZ  = maxZ-minZ+1;
-       contourextractdata->SetImage( imagedata);
+//EED01Juillet2009     _contourextractdata->SetImage( imagedata);
 
+       _contourextractdata->InitVolumeStatistics();
+       
 // For each slice..
        for ( z=minZ ; z<=maxZ ; z++ )
        {
@@ -2399,7 +2362,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);
@@ -2412,10 +2375,9 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
                        ContourThing **contourthing = lstContourThings[ii];
                        lstManConMod.push_back( (*contourthing)->getModel() );
                }
-               lstManConModExp =  kernelManager->ExploseEachModel( lstManConMod );
 
+               lstManConModExp =  kernelManager->ExploseEachModel( lstManConMod );
 
-               wxString tempString;
                tempString.Printf(_T("%d - %d"),z, sizeLstContourThings);
                interfMainPanel::getInstance()->setRowLabelInfoPanel(z, tempString);
                //_grid->SetRowLabelValue(z, tempString );
@@ -2435,10 +2397,11 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
 
                int tmpIntA;
 
-
-
                for( iContourGroup=0 ; iContourGroup<sizeContourGroup ; iContourGroup++ ){
                        lstManConModTmp.clear();
+
+                       
+
                        if (typeContourGroup==3) // contour separete
                        {
                                lstManConModTmp.push_back( lstManConModExp[iContourGroup]);
@@ -2446,20 +2409,21 @@ 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,
-                                                                                       minimumZ,
-                                                                                       maximumZ,
+                       _contourextractdata->Statistics( &pLstValue,
+                                                                                       grayRangeMin,
+                                                                                       grayRangeMax,
                                                                                        &resultGrayRangeCount, 
                                                                                        &resultSize, 
                                                                                        &resultMin, 
@@ -2496,6 +2460,45 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
                } // for iContourGroup
        } // for z
 
+       // Print Volume Statistics
+
+
+       int             vol_rCountRange; 
+       int             vol_rsize;
+       double  vol_minValue;
+       double  vol_maxValue;
+       double  vol_average;
+       double  vol_standardeviation;
+       
+       if (selection!=0 ) // actual slice
+       {
+
+               _contourextractdata->GetVolumeStatistics(&vol_rCountRange, &vol_rsize,
+                                                                                                &vol_minValue, &vol_maxValue,
+                                                                                                &vol_average, &vol_standardeviation);
+
+               interfMainPanel::getInstance()->setRowLabelInfoPanel(maxZ+2, _T("Total:"));
+       
+               tempString.Printf(_T("%d"),vol_rsize);
+               interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 0, tempString);   
+       
+               tempString.Printf(_T("%d"),vol_rCountRange);
+               interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 1, tempString);
+       
+               tempString.Printf(_T("%f"),vol_minValue);
+               interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 2, tempString);
+       
+               tempString.Printf(_T("%f"),vol_maxValue);
+               interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 3, tempString);
+       
+               tempString.Printf(_T("%f"),vol_average);
+               interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 4, tempString);
+       
+               tempString.Printf(_T("%f"),vol_standardeviation);
+               interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 5, tempString);
+       }
+       //-----------------------------------------
+       
        int iTitleGroup;
        wxString tmpTitleString;
        int tmpIntB;
@@ -2512,15 +2515,13 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
                interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 4, _T("Average") );
                interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 5, _T("St.Dev.") );
                interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 6, _T(" ") );
-       }
-
+       }// for title
        interfMainPanel::getInstance()->setStringInfoPanel( _T("") );
-       delete contourextractdata;
 }
 
 //AD: 29-05-09
 void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, 
-       int typeContourGroup, bool XYZValues, bool contourImage, bool statistics)
+       int typeContourGroup, int selection, int minZ, int maxZ, bool XYZValues, bool contourImage, bool statistics)
 {
        if (XYZValues)
        {
@@ -2531,7 +2532,7 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil
        {
                vtkImageData * mask;
                vtkImageData * value;
-               this->getMaskValue(&mask, &value, typeContourGroup);
+               this->getMaskValue(&mask, &value, typeContourGroup,selection,minZ,maxZ);
                this->SaveImageResult( directory , namefile, mask, value);
        }
        
@@ -2543,23 +2544,37 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil
 
                FILE *pFile=fopen(name.str().c_str(),"w+");
 
-               int sizeZ = _theViewPanel->GetImageDataSizeZ();
 
                wxString tmpString;
-               int i,j,maxX,maxY=sizeZ;
+               int i,j,maxX;
+               
+//             int sizeZ = _theViewPanel->GetImageDataSizeZ();
+//             int maxY=sizeZ+2;
+               
                maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols();
 
+               // -- Title --
                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,"slice\t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle );
                }
-               fprintf(pFile,"\n" );
-
-
+               fprintf(pFile,"\n\n" );
 
-               for ( j=0; j<maxY ; j++)
+               
+               
+               if (selection==0 ) // actual slice
+               {
+                       std::vector<int> tempVector;
+                       _instantPanel->getInstant( tempVector );
+                       int actualSlice = tempVector[1];
+                       minZ    = actualSlice;
+                       maxZ    = actualSlice;
+               }
+               
+               // Stadistics...
+               for ( j=minZ; j<=maxZ ; j++)
                {
                        fprintf(pFile,"%d\t" , j );
                        for (i=0 ; i<maxX ; i++){
@@ -2569,6 +2584,18 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil
                        fprintf(pFile,"\n"  );
                } // for j
 
+               
+               // Total of stadistics.....
+               if (selection!=0)
+               {
+                       fprintf(pFile,"\n Total:\t"  );
+                       for (i=0 ; i<maxX ; i++){
+                               tmpString = interfMainPanel::getInstance()->getCellValue(maxZ+2, i);//_grid->GetCellValue( maxZ+2 , i );
+                               fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) );
+                       } // for i
+                       fprintf(pFile,"\n"  );
+               }
+               
                fclose(pFile);
        }
 }
@@ -2577,13 +2604,14 @@ 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();
+//EED01Juillet2009     GenerateContourExtractData();
+       
        //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
-       contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
+       _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
 
-       std::vector<manualContourModel*> lstManConMod;
-       std::vector<manualContourModel*> lstManConModTmp;
-       std::vector<manualContourModel*> lstManConModExp;
+       std::vector<manualBaseModel*> lstManConMod;
+       std::vector<manualBaseModel*> lstManConModTmp;
+       std::vector<manualBaseModel*> lstManConModExp;
        std::vector<double> pLstValue;
        std::vector<double> pLstValuePosX;
        std::vector<double> pLstValuePosY;
@@ -2592,7 +2620,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
        std::vector<int> tempVector;
        _instantPanel->getInstant( tempVector );
 
-       vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData();
+//EED01Juillet2009     vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData();
        int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ();
        int z;
        int ii,sizeLstContourThings;
@@ -2606,7 +2634,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
        maxZ    = sizeZ;//_mbarrange->GetEnd();
        totalZ  = maxZ-minZ+1;
 
-       contourextractdata->SetImage( imagedata);
+//EED01Juillet2009     _contourextractdata->SetImage( imagedata);
 
 // For each slice..
        for ( z=0 ; z<sizeZ ; z++)
@@ -2621,7 +2649,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);
@@ -2656,13 +2684,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);
@@ -2697,46 +2725,64 @@ 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){
+void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value,int typeContourGroup, int selection, int minZ, int maxZ){
        wxBusyCursor wait;
-       ContourExtractData      *contourextractdata = new ContourExtractData( true );
+//EED01Juillet2009     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;
-       std::vector<manualContourModel*> lstManConModExp;
+       std::vector<manualBaseModel*> lstManConMod;
+       std::vector<manualBaseModel*> lstManConModTmp;
+       std::vector<manualBaseModel*> lstManConModExp;
 
        std::vector<int> tempVector;
        _instantPanel->getInstant( tempVector );
 
-       vtkImageData *imagedata = _theViewPanel->getImageData();
-       int sizeZ = _theViewPanel->GetImageDataSizeZ();
+    vtkImageData *imagedata = _theViewPanel->getImageData();
+       int ext[6];
+       imagedata->GetExtent(ext);
+       int sizeZimage = ext[5]-ext[4]+1;
        int z;
        int ii,sizeLstContourThings;
 
 
-       int minZ,maxZ;
        double totalZ;
        double porcent; 
 
        wxString tmpString;
+       
+       
+       if (selection==0 ) // actual slice
+       {
+               int actualSlice = tempVector[1];
+               minZ    = actualSlice;
+               maxZ    = actualSlice;
+       }       
+       
+       totalZ  = maxZ-minZ;
 
-       minZ    = 0;// _mbarrange->GetStart();
-       maxZ    = sizeZ;//_mbarrange->GetEnd();
-       totalZ  = maxZ-minZ+1;
-
-       contourextractdata->SetImage( imagedata);
+//EED01Juillet2009     _contourextractdata->SetImage( imagedata);
 
+       // cleanning image before range 
+       for (z=0; z<minZ; z++){
+               _contourextractdata->ResetImageResult(z);
+       }
+       // cleanning image after range 
+       for (z=maxZ+1; z<sizeZimage; z++){
+               _contourextractdata->ResetImageResult(z);
+       }
+       
+       
 // For each slice..
-       for ( z=0 ; z<sizeZ ; z++)
+       for ( z=minZ ; z<=maxZ ; z++)
        {
 
                porcent = 100.0* (z-minZ)/totalZ;
@@ -2745,7 +2791,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);
@@ -2778,15 +2824,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)
@@ -2883,3 +2929,137 @@ void wxContourMainFrame::ShowToolsPanel(bool show){
        _pannew->Show(show);
 }
 
+
+
+void wxContourMainFrame::SetContourGroup(int contourGroup)
+{
+       _contourGroup = contourGroup;
+}
+
+
+wxPanel *wxContourMainFrame::getMaskImageViewPanel(wxWindow *parent)
+{
+       
+       if      (_viewMaskImagePanel==NULL)
+       {
+               _contourextractdata = new ContourExtractData(true);
+               _contourextractdata->SetImage( _theViewPanel->getImageData() );
+               
+//             double range[2];
+//             _theViewPanel->getImageData()->GetScalarRange(range);
+               //int min = (int)floor (range[0]);
+               //int max = (int)ceil (range[1]);
+               int min = 254;
+               int max = 256;
+               
+               _viewMaskImagePanel = new ThresholdImageViewPanel( parent, -1, -1 , 0);
+               _viewMaskImage = new ThresholdImageView();
+               _viewMaskImage->SetImage(_contourextractdata->GetVtkImageMaskResult() );
+               _viewMaskImage->SetminMaxValue( min, max);
+               _viewMaskImage->SetBaseColor( 0,0,1 );
+               _viewMaskImagePanel->SetThresholdImageView( _viewMaskImage );
+               _viewMaskImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() );
+               
+       }
+       return _viewMaskImagePanel;
+}
+
+wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent)
+{
+       if      (_viewThresholdImagePanel==NULL)
+       {
+               double range[2];
+               _theViewPanel->getImageData()->GetScalarRange(range);
+               int min = (int)floor (range[0]);
+               int max = (int)ceil (range[1]);         
+               _viewThresholdImagePanel = new ThresholdImageViewPanel( parent, min, max , 1);
+               _viewThresholdImage = new ThresholdImageView();
+               _viewThresholdImage->SetImage( _theViewPanel->getImageData() );
+               _viewThresholdImage->SetminMaxValue( min, max);
+               _viewThresholdImage->SetBaseColor( 1,0,0 );
+               _viewThresholdImagePanel->SetThresholdImageView( _viewThresholdImage );
+               _viewThresholdImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() );
+       }
+       return _viewThresholdImagePanel;
+}
+
+//CMRU 17-08-09-----------------------------------------------------------------------------------------------
+int wxContourMainFrame::getType ()
+{
+       int tipo = 0;
+       std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
+
+       if(!currentSelection.empty())
+       {
+               std::string cloneName = currentSelection [0];
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
+               tipo = manualModel-> GetTypeModel();    
+       }
+       return tipo;
+}
+
+double wxContourMainFrame::getContourSizeInPixels()
+{
+       double contourSize = 0; 
+
+       std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();        if(!currentSelection.empty())
+       if(!currentSelection.empty())
+       {
+               std::string cloneName = currentSelection [0];
+               
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+               contourSize = manualModel-> GetPathSize();
+       }       
+       return contourSize;
+}
+manualBaseModel * wxContourMainFrame::getContour ()
+{
+       std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
+
+       if(!currentSelection.empty())
+       {
+               std::string cloneName = currentSelection [0];
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+               return manualModel; 
+       }
+       return NULL;
+}
+void wxContourMainFrame::onPrintLabel (wxString label, manualBaseModel* manualModel) 
+{
+       std::string labelAscii(label.ToAscii());
+       int pos = labelAscii.find(" ");
+
+       int j;
+       
+       for (j=0 ; pos != string::npos;j++) 
+       {
+               labelAscii.replace( pos, 1, "_" );
+               pos= labelAscii.find(" ");
+       }
+
+       manualModel -> SetLabel(labelAscii); 
+}
+void wxContourMainFrame::onInsertCalculation(manualBaseModel* manualModel)
+{
+       double sizeInPixel = manualModel ->GetPathSize();
+       double onePixelRealSize = interfMainPanel::getInstance()->GetPixelValue();;
+       double realContourSize = sizeInPixel*onePixelRealSize;
+       manualModel ->SetRealSize(realContourSize); 
+}
+
+double wxContourMainFrame::onePixelSize( double value)
+{
+       return _onePixelSize = value;   
+}
+
+std::string wxContourMainFrame::GetFileLocation()
+{
+       return _fileLocation;
+}
+
+void wxContourMainFrame::SetFileLocation(std::string newFileLocation)
+{
+       _fileLocation = newFileLocation;
+       std::cout<<"GETFILELOCATION:"<<_fileLocation<<std::endl;
+}
+//------------------------------------------------------------------------------------------------------------
\ No newline at end of file