]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
2340 creaContours Bug New Normal ColorLayerViewer / Manager new c interface
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index 796d46c51e8c953f65bb92b812fe01f9b210c5b2..a63bd56add5a897caead3eaf47b23e03bab94904 100644 (file)
@@ -1,3 +1,28 @@
+/*# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+#                        pour la Sant�)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+#  This software is governed by the CeCILL-B license under French law and
+#  abiding by the rules of distribution of free software. You can  use,
+#  modify and/ or redistribute the software under the terms of the CeCILL-B
+#  license as circulated by CEA, CNRS and INRIA at the following URL
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------ */
+
 //----------------------------------------------------------------------------------------------------------------
 // Class definition include
 //----------------------------------------------------------------------------------------------------------------
@@ -67,9 +92,8 @@ char wxContourMainFrame::COPY = 'C';
                _viewMaskImage                          = NULL;
                _viewMaskImagePanel                     = NULL;
                _viewThresholdImage                     = NULL;
-               _viewThresholdImagePanel        = NULL;
-               _viewColorLayerImage            = NULL;
-               _viewColorLayerImagePanel       = NULL;
+               _viewThresholdImagePanel                = NULL;
+               _viewColorLayerImagePanel               = 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)
@@ -88,9 +112,8 @@ char wxContourMainFrame::COPY = 'C';
                _viewMaskImage                          = NULL;
                _viewMaskImagePanel                     = NULL;
                _viewThresholdImage                     = NULL;
-               _viewThresholdImagePanel        = NULL;
-               _viewColorLayerImage            = NULL;
-               _viewColorLayerImagePanel       = NULL;
+               _viewThresholdImagePanel                = NULL;
+               _viewColorLayerImagePanel               = NULL;
 
                // set up default notebook style
                m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
@@ -674,13 +697,6 @@ void wxContourMainFrame::changeInstant()
                        }
                }
 
-       // Refresh Threshold image
-               if(_viewColorLayerImage!=NULL){
-                       _viewColorLayerImage->SetZ(actualSlice);
-                       if (_viewColorLayerImagePanel->IsVisible()==true){
-                               _viewColorLayerImage->onThreshold();
-                       }
-               }
 
                updateInstantOutlines();
                updateInstantImageData();
@@ -833,14 +849,20 @@ void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName,
        _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
 }
 
+//EED04
 void wxContourMainFrame ::loadState(std::string filename){
+
+       deleteAllContours();
+       onLoadContours(filename,false);
+
+       /* EED Borrame
        char tmp[255];
        FILE *pFile=fopen(filename.c_str(),"r+");
 
        fscanf(pFile,"%s",tmp); // --CreaContour--
 
        fscanf(pFile,"%s",tmp); // Version
-       fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0
+       fscanf(pFile,"%s",tmp); // 1.0.3 || 1.0.2 || 1.0.1 || 1.0.0
 
        deleteAllContours();
 
@@ -848,21 +870,28 @@ void wxContourMainFrame ::loadState(std::string filename){
        loadContours(pFile, true);
 
        fclose(pFile);
+       */
 }
 
-void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour )
+
+//EED03
+/*EED Borrame
+void wxContourMainFrame::loadContours( FILE *pFile, bool staticContour )
 {
        char tmp[255];
 
-       fscanf(pFile,"%s",tmp); // ImageDimensions
-       fscanf(pFile,"%s",tmp); // X
-       fscanf(pFile,"%s",tmp); // Y
-       fscanf(pFile,"%s",tmp); // Z
+       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
+               fscanf(pFile,"%s",tmp); // ImageSpacing
+               fscanf(pFile,"%s",tmp); // X
+               fscanf(pFile,"%s",tmp); // Y
+               fscanf(pFile,"%s",tmp); // Z
+       }
 
        fscanf(pFile,"%s",tmp); // NumberOfContours
        fscanf(pFile,"%s",tmp); // ##
@@ -922,6 +951,8 @@ void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour )
                }
        }// for  numberOfContours
 }
+*/
+
 
 void wxContourMainFrame::onLoad()
 {
@@ -937,14 +968,52 @@ void wxContourMainFrame::onLoad()
                }
        }
 
-       onLoadContours(fileNameContourROI);
+       onLoadContours(fileNameContourROI,true);
+}
+
+
+void  wxContourMainFrame::SetZForAllContours(int pz)
+{
+       printf("EED wxContourMainFrame::SetZForAllContours\n");
+
+       //-- Normal Contours
+
+       std::vector< std::string > lstNameThings;       
+       int i,sizeLstNameThings;
+       int ii,sizeLstPoints;
+       
+       lstNameThings           = kernelManager->GetLstNameThings();
+       sizeLstNameThings       = lstNameThings.size(); 
+       for (i=0 ; i<sizeLstNameThings ; i++)
+       {
+printf("EED wxContourMainFrame::SetZForAllContours contour=%d \n", i );
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
+               sizeLstPoints = manualModel->GetSizeLstPoints();
+               for (ii=0 ; ii<sizeLstPoints ; ii++)
+               {
+                        manualModel->GetManualPoint(ii)->SetPointZ(-900);
+               }// for ii  list of points
+       }// for i  list of Things
+
+       //-- Static Contours
+
+       lstNameThings           = kernelManager->GetLstNameThingsStatic();
+       sizeLstNameThings       = lstNameThings.size();
+       for (i=0 ; i<sizeLstNameThings ; i++)
+       {
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
+               sizeLstPoints = manualModel->GetSizeLstPoints();
+               for (ii=0 ; ii<sizeLstPoints ; ii++)
+               {
+                        manualModel->GetManualPoint(ii)->SetPointZ(-900);
+               }// for ii  list of points
+       }// for i  list of static things
 }
 
 
 
-void wxContourMainFrame::onLoadContours(std::string fileNameContourROI)
+void wxContourMainFrame::onLoadContours(std::string fileNameContourROI, bool interactiveInterface)
 {
-printf("EED2 wxContourMainFrame::onLoadContours 01 \n");
        char tmp[255];
        char tmpD[255];
 
@@ -961,7 +1030,7 @@ printf("EED2 wxContourMainFrame::onLoadContours 01 \n");
                {
                        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); // 1.0.3 || 1.0.2 || 1.0.1 || 1.0.0
 
                        fscanf(pFileData,"%s",tmpD); // onePixelSize
                        fscanf(pFileData,"%s",tmpD); // #
@@ -973,16 +1042,30 @@ printf("EED2 wxContourMainFrame::onLoadContours 01 \n");
                fscanf(pFile,"%s",tmp); // --CreaContour--
 
                fscanf(pFile,"%s",tmp); // Version
-               fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0
+               fscanf(pFile,"%s",tmp); // 1.0.3 || 1.0.2 || 1.0.1 || 1.0.0
                std::string version(tmp);
 
+
+printf("EED wxContourMainFrame::onLoadContours  version%s \n", version.c_str() );
+
+
                //AD:02-06-09
         _tmpReadFileTypeOfTransformation=-1;
-               if (version=="1.0.2")
+               if (version=="1.0.3")
                {
-                   readDimSpc(pFile);
+                   readDimSpc(pFile,interactiveInterface);   // DimSpc interactive ON
                        openContours(pFile,pFileData,false);
                        openContours(pFile,pFileData,true);     //Load StaticContours
+               }       
+
+               if (version=="1.0.2")
+               {
+//EED001
+                       readDimSpc(pFile,interactiveInterface); // DimSpc interactive ON
+                       openContours(pFile,pFileData,false);
+                       readDimSpc(pFile,false);                // DimSpc interactive OFF
+                       openContours(pFile,pFileData,true);     // Load StaticContours
+                       SetZForAllContours(-900);
                }
 
                //AD:02-06-09
@@ -1007,7 +1090,6 @@ printf("EED2 wxContourMainFrame::onLoadContours 01 \n");
        }
        _theViewPanel->getSceneManager()->removeSceneContours();
        changeInstant();
-
 }
 
 
@@ -1022,7 +1104,7 @@ void wxContourMainFrame::onImport(){
                filenamecontours = kernelManager->parseOsirixFile(filename);
 
                if(filenamecontours.compare("") != 0){
-                       onLoadContours(filenamecontours);
+                       onLoadContours(filenamecontours,true);
                }
 
        }
@@ -1081,11 +1163,11 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
        int i,sizeLstNameThings;
 
        fprintf(pFile,"--CreaContour--\n");
-       fprintf(pFile,"Version %s\n", "1.0.2" );
+       fprintf(pFile,"Version %s\n", "1.0.3" );
 
 //CMRU 03-09-09-----------------------------------------------------------------------------------------------
        fprintf(pFileData,"--CreaContour--\n");
-       fprintf(pFileData,"Version %s\n", "1.0.2" );
+       fprintf(pFileData,"Version %s\n", "1.0.3" );
        fprintf(pFileData,"OnePixelSize %f\n", _onePixelSize);
 
 //------------------------------------------------------------------------------------------------------------
@@ -1129,9 +1211,8 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
 
        //-- 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] );
+//     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();
@@ -1151,8 +1232,8 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
 }
 
 
-
-void wxContourMainFrame::readDimSpc(FILE *pFile)
+//EED02
+void wxContourMainFrame::readDimSpc(FILE *pFile, bool interactiveOption)
 {
        char tmp[255];
        int             imageDim[3];
@@ -1178,50 +1259,52 @@ void wxContourMainFrame::readDimSpc(FILE *pFile)
     _tmpReadFileImageSpac[2] = atof(tmp);
 
 
-    //Compare Spacing and Dims in X and Y (Necessary in Z?) - Just for Version 2
-    if (imageDim[0]!=_tmpReadFileImageDim[0] || imageDim[1]!=_tmpReadFileImageDim[1] || imageSpac[0]!=_tmpReadFileImageSpac[0] || imageSpac[1]!=_tmpReadFileImageSpac[1])
+       if (interactiveOption==true)
     {
-               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 _tmpReadFileTypeOfTransformation = -1;
-               bool transform = false;
-
-               if (dial->GetReturnCode() == wxID_OK)
+               //Compare Spacing and Dims in X and Y (Necessary in Z?) - Just for Version 2
+               if (imageDim[0]!=_tmpReadFileImageDim[0] || imageDim[1]!=_tmpReadFileImageDim[1] || imageSpac[0]!=_tmpReadFileImageSpac[0] || imageSpac[1]!=_tmpReadFileImageSpac[1])
                {
-                       _tmpReadFileTypeOfTransformation    = radioOpts->GetSelection();
-               }// if wxOK
-
-    } // if dim spc
+                       wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(460,360));
+                       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 _tmpReadFileTypeOfTransformation = -1;
+//EED                  bool transform = false;
+
+                       if (dial->GetReturnCode() == wxID_OK)
+                       {
+                               _tmpReadFileTypeOfTransformation    = radioOpts->GetSelection();
+                       }// if wxOK
 
+               } // if dim spc
+    } // if interactiveOption
 }
 
 
 
+
 //AD:04-06-09
 void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, bool staticContour )
 {
 
-printf("EED1 wxContourMainFrame::openContours 01 \n");
        char tmp[255];
 
-       vtkImageData    *image          = _images[0];
+       vtkImageData    *image = _images[0];
 
        int             imageDim[3];
        double          imageSpac[3];
@@ -1301,7 +1384,6 @@ printf("EED1 wxContourMainFrame::openContours 01 \n");
        else if (compatible==false)
        {
 */
-printf("EED wxContourMainFrame::openContours 02 \n");
 
                int i;
                for (i=0;i<numberOfContours;i++)
@@ -1453,7 +1535,7 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
        //DefinciÛn de conexiÛnes entre VTK e ITK y el writer
        typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
        typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
-       typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
+//EED10JUIN2011        typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
 
        ConnectorType::Pointer connector= ConnectorType::New();
        ConnectorType2::Pointer connector2= ConnectorType2::New();
@@ -1493,7 +1575,12 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
 
 
        FastMarchingFilterType::Pointer  fastMarching = FastMarchingFilterType::New();
-
+       
+printf("EED wxContourMainFrame::SegmentationOneSliceITK  Skypping this code.  Not compiling   GeodesicActiveContourLevelSetImageFilter     in fedora 17 with ITK 3.20.1 \n ");
+/*EED 17 sept 2010
+ > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > -   Not compiling   GeodesicActiveContourLevelSetImageFilter     in fedora 17 with ITK 3.20.1
        typedef  itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
                                        InternalImageType >    GeodesicActiveContourFilterType;
        GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
@@ -1526,7 +1613,12 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
        //thresholder->SetInput( zeroCrossing->GetOutput() );
        thresholder->SetInput( geodesicActiveContour->GetOutput() );
        connector2->SetInput( thresholder->GetOutput()  );
-
+< - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - 
+*/
+       
+       
+       
 
        smoothing->SetTimeStep( 0.125 );
        smoothing->SetNumberOfIterations(  5 );
@@ -1602,7 +1694,6 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
        vtkstripper->Update();
        vtkstripper->UpdateInformation();
 
-
        vtkPolyData* polyDataResult =  cntVTK->GetOutput();
        //std::cout<<"Points "<<polyDataResult->GetNumberOfPoints()<<std::endl;
        polyDataResult->Update( );
@@ -1775,7 +1866,8 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
        } // if sizeCtrPt
 
 
-
+/*
+//EED10JUIN2011
                 WriterType::Pointer writer = WriterType::New();
          CastFilterType3::Pointer caster = CastFilterType3::New();
 
@@ -1825,6 +1917,7 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
                 caster5->SetOutputMinimum(   0 );
                 caster5->SetOutputMaximum( 255 );
                 writer5->Update();
+*/
     }
   catch( itk::ExceptionObject & excep )
     {
@@ -2278,32 +2371,67 @@ void wxContourMainFrame::onChangeInstant(std::string name,int actual){
        _instantPanel->setConceptValue( name, actual );
 }
 
+
 void wxContourMainFrame::resetAppend(){
        kernelManager->resetAppend();
 
 }
 
+
 void wxContourMainFrame::onSpreadAdd(){
        std::vector<double> vecX;
        std::vector<double> vecY;
        std::vector<double> vecZ;
        _theViewPanel->GetPointsOfActualContour(&vecX , &vecY , &vecZ );
-
        std::vector<int> tempVector;
        _instantPanel->getInstant( tempVector );
-
        std::string val = kernelManager->onSpreadAdd(&vecX , &vecY , &vecZ, tempVector);
-
        interfMainPanel::getInstance()->appendStringSpread(val);
+}
+
 
+void wxContourMainFrame::onSpreadAddAll(){
+//EED02
+       std::vector<int> tempVector;
+       _instantPanel->getInstant( tempVector );
+       int minZ,maxZ;
+    minZ       = 0;
+    maxZ       = interfMainPanel::getInstance()->GetImageDataSizeZ();
+       int z;
+       int sizeLstContourThings;
+       for ( z=minZ ; z<=maxZ ; z++ )
+       {
+               tempVector[1]=z;
+               Instant instant(&tempVector);
+               std::vector<ContourThing**> lstContourThings = kernelManager->getOutlinesAtInstant( &instant );
+               sizeLstContourThings = lstContourThings.size();
+               if (sizeLstContourThings>=1)
+        {
+            std::vector<double> vecX;
+            std::vector<double> vecY;
+            std::vector<double> vecZ;
+            ContourThing **contourthing = lstContourThings[0];
+                       manualBaseModel *cModel                         =  (*contourthing)->getModel();
+                       int i,size = cModel->GetNumberOfPointsSpline();
+                       double x,y,z;
+                       for (i=0; i<size; i++)
+                       {
+                               cModel->GetSpline_i_Point(i, &x, &y, &z);
+                               vecX.push_back(x);
+                               vecY.push_back(y);
+                               vecZ.push_back(z);
+                       } // for i
+            std::string val = kernelManager->onSpreadAdd(&vecX , &vecY , &vecZ, tempVector);
+            interfMainPanel::getInstance()->appendStringSpread(val);
+        }// if sizeLstContourThings
+    } // for z
 }
 
-void wxContourMainFrame::onSpreadGo(int type){
 
+void wxContourMainFrame::onSpreadGo(int type){
        //JCP 20-10-08 Undo redo implementation
        saveState();
        //JCP 20-10-08 Undo redo implementation
-
        wxBusyCursor wait;
        std::vector<double> vecCtrlPointX;
        std::vector<double> vecCtrlPointY;
@@ -2376,7 +2504,6 @@ void wxContourMainFrame::SetScalarRange(int grayRangeMin, int grayRangeMax)
 
 void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ,int grayRangeMin, int grayRangeMax)
 {
-//EED01Juillet2009     GenerateContourExtractData();
 
        wxString tempString;
        int maxContourGroup     =       0;
@@ -2401,8 +2528,6 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
        std::vector<int> tempVector;
        _instantPanel->getInstant( tempVector );
 
-//EED01Juillet2009     vtkImageData *imagedata = _theViewPanel->getImageData();
-//     int sizeZ = _theViewPanel->GetImageDataSizeZ();
        int z;
        int ii,sizeLstContourThings;
 
@@ -2425,7 +2550,6 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
 
 
        totalZ  = maxZ-minZ+1;
-//EED01Juillet2009     _contourextractdata->SetImage( imagedata);
 
        _contourextractdata->InitVolumeStatistics();
 
@@ -2689,7 +2813,6 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil
 void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup)
 {
        wxBusyCursor wait;
-//EED01Juillet2009     GenerateContourExtractData();
 
        //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
        _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
@@ -2705,7 +2828,6 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
        std::vector<int> tempVector;
        _instantPanel->getInstant( tempVector );
 
-//EED01Juillet2009     vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData();
        int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ();
        int z;
        int ii,sizeLstContourThings;
@@ -2719,7 +2841,6 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
        maxZ    = sizeZ;//_mbarrange->GetEnd();
        totalZ  = maxZ-minZ+1;
 
-//EED01Juillet2009     _contourextractdata->SetImage( imagedata);
 
 // For each slice..
        for ( z=0 ; z<sizeZ ; z++)
@@ -2817,7 +2938,6 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
 
 void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value,int typeContourGroup, int selection, int minZ, int maxZ){
        wxBusyCursor wait;
-//EED01Juillet2009     GenerateContourExtractData();
 
        //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
        if (typeContourGroup==3)
@@ -2856,7 +2976,6 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value
 
        totalZ  = maxZ-minZ;
 
-//EED01Juillet2009     _contourextractdata->SetImage( imagedata);
 
        // cleanning image before range
        for (z=0; z<minZ; z++){
@@ -2925,44 +3044,41 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value
 void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value)
 {
 
-       std::string temp = directory + "/" + namefile + "-Value.mhd";
+       double spc[3];
+       kernelManager->GetSpacing(spc,0);   // returns the spacing of the first image
+       
+       std::string temp = directory + "/" + namefile + "-image-Value.mhd";
 
        wxString filename = crea::std2wx(temp);
-       // LG
-       //      filename.Printf(_T(temp.c_str()));
-       //filename.Printf(_T("%s\\%s-Value.mhd",directory.c_str(),namefile.c_str(),z);
-       /*filename.Printf(_T("%s"),directory.c_str());
-       filename.append(_T("\\"));
-       filename.append(_T("%s"),namefile.c_str());
-       filename.append(_T("-Value.mhd"));*/
 
 // Image Value
+       
+       vtkImageChangeInformation *valueChInfo = vtkImageChangeInformation::New();
+       valueChInfo->SetInput(value);
+       valueChInfo->SetSpacingScale(spc);      
        vtkMetaImageWriter *writerValueImage = vtkMetaImageWriter::New( );
-       writerValueImage->SetInput( value );
-       writerValueImage->SetInput( value );
+       writerValueImage->SetInput( valueChInfo->GetOutput() );
        writerValueImage->SetFileName( (const char *)filename.mb_str() );
        writerValueImage->SetFileDimensionality( 3 );
        writerValueImage->SetCompression(false);
        writerValueImage->Write( );
 
 // Image Mask
-       //              filename.Printf("%s\\%s-Mask.mhd",directory.c_str(),namefile.c_str(),z);
-       temp = directory + "/" + namefile + "-Mask.mhd";
+       temp = directory + "/" + namefile + "-image-Mask.mhd";
 
        // LG 14/01/09 : using crea
        filename = crea::std2wx(temp);
        //      filename.Printf(_T(temp.c_str()));
 
-       /*filename.Printf(_T("%s"),directory.c_str());
-       filename.append(_T("\\"));
-       filename.append(_T("%s"),namefile.c_str());
-       filename.append(_T("-Mask.mhd"));*/
 
+       vtkImageChangeInformation *maskChInfo = vtkImageChangeInformation::New();
+       maskChInfo->SetInput(mask);
+       maskChInfo->SetSpacingScale(spc);       
        vtkMetaImageWriter *writerMaskImage = vtkMetaImageWriter::New( );
-       writerMaskImage->SetInput( mask );
+       writerMaskImage->SetInput( maskChInfo->GetOutput() );
        writerMaskImage->SetFileName( (const char *)filename.mb_str() );
        writerMaskImage->SetFileDimensionality( 3 );
-       writerValueImage->SetCompression(false);
+       writerMaskImage->SetCompression(false);
        writerMaskImage->Write( );
 
        interfMainPanel::getInstance()->setStringInfoPanel( _T("") );
@@ -3061,11 +3177,7 @@ wxPanel *wxContourMainFrame::getColorLayerImageViewPanel(wxWindow *parent)
                int min = (int)floor (range[0]);
                int max = (int)ceil (range[1]);
                _viewColorLayerImagePanel = new ColorLayerImageViewPanel( parent, min, max , 1);
-               _viewColorLayerImage = new ColorLayerImageView();
-//             _viewColorLayerImage->SetImage( _theViewPanel->getImageData() );
-               _viewColorLayerImage->SetImage( NULL );
-               _viewColorLayerImagePanel->SetColorLayerImageView( _viewColorLayerImage );
-               _viewColorLayerImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() );
+               _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetwxVtkBaseView( 0 , _theViewPanel->getWxVtkBaseView() );
        }
        return _viewColorLayerImagePanel;
 }
@@ -3170,3 +3282,106 @@ void wxContourMainFrame::SetFileLocation(std::string newFileLocation)
        std::cout<<"GETFILELOCATION:"<<_fileLocation<<std::endl;
 }
 //------------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+void wxContourMainFrame::FlipSelectedContours(int flipDirection)
+{
+       printf("EED wxContourMainFrame::FlipSelectedContours  flipDirection=%d  \n",  flipDirection ); 
+       FlipLstOfContours( 
+                           (std::vector<std::string>)_theViewPanel->getSceneManager()->getSelectedObjects() , 
+                           flipDirection
+                         );    
+               
+}
+
+void wxContourMainFrame::FlipActualSliceContours(int flipDirection)
+{
+       printf("EED wxContourMainFrame::FlipActualSliceContours  flipDirection=%d  \n",  flipDirection );       
+       FlipLstOfContours( 
+                           (std::vector<std::string>)_theViewPanel->getSceneManager()->GetlstContoursNameActualSlice() , 
+                           flipDirection
+                         );    
+}
+
+void wxContourMainFrame::FlipAllContours(int flipDirection)
+{
+       printf("EED wxContourMainFrame::FlipAllContours  flipDirection=%d  \n",  flipDirection );
+       FlipLstOfContours( 
+                           kernelManager->GetLstNameThings() , 
+                           flipDirection
+                         );
+}
+
+void wxContourMainFrame::FlipLstOfContours(std::vector<std::string> lstNameThings, int flipDirection)
+{
+       int ext[6];
+       getImageData()->GetExtent(ext);         
+       int sizeX = ext[1]-ext[0];
+       int sizeY = ext[3]-ext[2];
+
+       
+       int i,sizeLstNameThings;
+       int ii,sizeLstPoints;
+       
+       sizeLstNameThings       = lstNameThings.size(); 
+       for (i=0 ; i<sizeLstNameThings ; i++)
+       {
+               printf("EED wxContourMainFrame::FlipAllContours contour=%d \n", i );
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
+               if (flipDirection==0)
+               {
+                       manualModel->Transform_Ax_Plus_B(-1,sizeX,1,0 );
+               } else {
+                       manualModel->Transform_Ax_Plus_B(1,0,-1,sizeY );
+               }
+       }// for i  list of Things
+
+       //-- Static Contours
+
+       lstNameThings           = kernelManager->GetLstNameThingsStatic();
+       sizeLstNameThings       = lstNameThings.size();
+       for (i=0 ; i<sizeLstNameThings ; i++)
+       {
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
+               if (flipDirection==0)
+               {
+                       manualModel->Transform_Ax_Plus_B(-1,sizeX,1,0 );
+               } else {
+                       manualModel->Transform_Ax_Plus_B(1,0,-1,sizeY );
+               }
+       }// for i  list of static things        
+}
+
+void wxContourMainFrame::FlipContours(int typeContourFlip, int flipDirection)
+{
+       printf("EED wxContourMainFrame::FlipContours( %d , %d ) \n",typeContourFlip,  flipDirection );
+
+       saveState();
+       
+       if (typeContourFlip==0) // 
+       {
+               FlipSelectedContours(flipDirection);
+       }
+
+       if (typeContourFlip==1) // 
+       {
+               FlipActualSliceContours(flipDirection);
+       }
+       
+       if (typeContourFlip==2) // 
+       {
+               FlipAllContours(flipDirection);
+       }
+       RefreshInterface();
+}
+
+
+
+
+