]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
#3161 creaContours Bug New Normal - Interpolate Image - Color and Threshold Layer...
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index 796d46c51e8c953f65bb92b812fe01f9b210c5b2..2077380295561cc75bb6d6ec772a039e30ee2a51 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
 //----------------------------------------------------------------------------------------------------------------
@@ -68,8 +93,8 @@ char wxContourMainFrame::COPY = 'C';
                _viewMaskImagePanel                     = NULL;
                _viewThresholdImage                     = NULL;
                _viewThresholdImagePanel        = NULL;
-               _viewColorLayerImage            = NULL;
                _viewColorLayerImagePanel       = NULL;
+               _frameShowResultImages          = 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)
@@ -79,7 +104,6 @@ char wxContourMainFrame::COPY = 'C';
                _contourGroup                           = 1;
                _creatingContoursActive         = false;
                _theViewPanel                           = NULL;
-
                _instantPanel                           = NULL;
                _refLineControl                         = NULL;
                _refLineModel                           = NULL;
@@ -89,29 +113,21 @@ char wxContourMainFrame::COPY = 'C';
                _viewMaskImagePanel                     = NULL;
                _viewThresholdImage                     = NULL;
                _viewThresholdImagePanel        = NULL;
-               _viewColorLayerImage            = NULL;
                _viewColorLayerImagePanel       = NULL;
-
                // set up default notebook style
-               m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
-               m_notebook_theme = 0;
+               m_notebook_style                        = wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
+               m_notebook_theme                        = 0;
                //wxContour_ActionCommandsID a;
-               _numberOfVariablesStatistics = 7;
-
-               _datadir = datadir;
-
-
-               inredo = 0;
-               inundo = 0;
-
+               _numberOfVariablesStatistics= 7;
+               _datadir                                        = datadir;
+               inredo                                          = 0;
+               inundo                                          = 0;
                _pannew = interfMainPanel::getInstance(this,datadir+"/data/Icons");//, eventHandler);
                _performingOperation = new PerformingOperation();
-
                if(images.size() > 0)
                {
                        this->setVectImages(images);
                }
-
                _contourextractdata                     = NULL;
 }
 
@@ -627,21 +643,27 @@ void wxContourMainFrame::ShowResultImages(int typeContourGroup, int selection, i
        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);
+       if (_frameShowResultImages==NULL)
+       {
+//             wxFrame *_frameShowResultImages = new wxFrame(this, -1,_T("Result image extracted.."),wxDefaultPosition,wxSize(600,600), wxDEFAULT_FRAME_STYLE|wxSTAY_ON_TOP);
+               _frameShowResultImages = new wxFrame(this, -1,_T("Result image extracted.."),wxDefaultPosition,wxSize(600,600), 
+                    wxFRAME_TOOL_WINDOW|wxSYSTEM_MENU | wxCAPTION |  wxCLIP_CHILDREN |wxFRAME_FLOAT_ON_PARENT | wxRESIZE_BORDER  );
+
+               wxAuiManager *m_mgr_noteBookViewerResult = new wxAuiManager();
+               m_mgr_noteBookViewerResult->SetManagedWindow(_frameShowResultImages);
 
-       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));
+               wxAuiNotebook* noteBookViewerResult = new wxAuiNotebook(_frameShowResultImages, -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);
+               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();
+               noteBookViewerResult->AddPage( panelViewer1, wxT("Image result") );
+               noteBookViewerResult->AddPage( panelViewer2, wxT("Mask result") );
+               m_mgr_noteBookViewerResult->Update();
+               _frameShowResultImages->Show();
+       } // if _frameShowResultImages
 }
 
 
@@ -674,13 +696,6 @@ void wxContourMainFrame::changeInstant()
                        }
                }
 
-       // Refresh Threshold image
-               if(_viewColorLayerImage!=NULL){
-                       _viewColorLayerImage->SetZ(actualSlice);
-                       if (_viewColorLayerImagePanel->IsVisible()==true){
-                               _viewColorLayerImage->onThreshold();
-                       }
-               }
 
                updateInstantOutlines();
                updateInstantImageData();
@@ -833,14 +848,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 +869,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 +950,8 @@ void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour )
                }
        }// for  numberOfContours
 }
+*/
+
 
 void wxContourMainFrame::onLoad()
 {
@@ -937,14 +967,51 @@ void wxContourMainFrame::onLoad()
                }
        }
 
-       onLoadContours(fileNameContourROI);
+       onLoadContours(fileNameContourROI,true);
 }
 
 
+void  wxContourMainFrame::SetZForAllContours(int pz)
+{
+
+       //-- 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
 
-void wxContourMainFrame::onLoadContours(std::string fileNameContourROI)
+       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, bool interactiveInterface)
 {
-printf("EED2 wxContourMainFrame::onLoadContours 01 \n");
        char tmp[255];
        char tmpD[255];
 
@@ -961,7 +1028,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 +1040,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 +1088,6 @@ printf("EED2 wxContourMainFrame::onLoadContours 01 \n");
        }
        _theViewPanel->getSceneManager()->removeSceneContours();
        changeInstant();
-
 }
 
 
@@ -1022,7 +1102,7 @@ void wxContourMainFrame::onImport(){
                filenamecontours = kernelManager->parseOsirixFile(filename);
 
                if(filenamecontours.compare("") != 0){
-                       onLoadContours(filenamecontours);
+                       onLoadContours(filenamecontours,true);
                }
 
        }
@@ -1081,11 +1161,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);
 
 //------------------------------------------------------------------------------------------------------------
@@ -1112,11 +1192,22 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
        fprintf(pFileData,"NumberOfContours %d\n", sizeLstNameThings );
 //------------------------------------------------------------------------------------------------------------
 
+
+// EED 2017-05-30
+       double spc[3];
+       spc[0]=1; 
+       spc[1]=1; 
+       spc[2]=1; 
+
        for (i=0 ; i<sizeLstNameThings ; i++)
        {
 //CMRU 03-09-09-----------------------------------------------------------------------------------------------
                manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
-               double sizeInPixel = manualModel ->GetPathSize();
+
+// EED 2017-05-30
+//             double sizeInPixel = manualModel ->GetPathSize(  );
+               double sizeInPixel = manualModel ->GetPathSize( spc );
+
                double realContourSize = sizeInPixel*_onePixelSize;
                manualModel ->SetRealSize(realContourSize);
 //------------------------------------------------------------------------------------------------------------
@@ -1129,9 +1220,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 +1241,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 +1268,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 +1393,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 +1544,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 +1584,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 +1622,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 +1703,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( );
@@ -1681,19 +1781,18 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
                {
                        vecXo.push_back(p[0]);
                        vecYo.push_back(p[1]);
-               }
-               else
-               {
-               vecX.push_back( p[0] );
-               myfile <<p[0]<<","<<p[1]<<"\n";
-               //std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
-               //std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
-               //std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
-               vecY.push_back( p[1] );
-               vecZ.push_back( 900 );
-               xAct=x;
-               yAct=y;
-               }
+               } else {
+                       vecX.push_back( p[0] );
+                       myfile <<p[0]<<","<<p[1]<<"\n";
+                       //std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
+                       //std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
+                       //std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
+                       vecY.push_back( p[1] );
+//EED 2017-12-16
+                       vecZ.push_back( -900 );
+                       xAct = x;
+                       yAct = y;
+               } // if xAct
 
 
        }
@@ -1703,7 +1802,8 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
                vecX.push_back(vecXo.back());
                //std::cout<<" x Siguiente "<<vecXo.back();
                vecXo.pop_back();
-               vecZ.push_back( 900 );
+//EED 2017-12-16
+               vecZ.push_back( -900 );
        }
        while(!vecYo.empty())
        {
@@ -1775,7 +1875,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 +1926,7 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
                 caster5->SetOutputMinimum(   0 );
                 caster5->SetOutputMaximum( 255 );
                 writer5->Update();
+*/
     }
   catch( itk::ExceptionObject & excep )
     {
@@ -1957,7 +2059,8 @@ myfile.close();
 //             double y=p[1];
                vecX.push_back( p[0] );
                vecY.push_back( p[1] );
-               vecZ.push_back( 900 );
+//EED 2017-12-16
+               vecZ.push_back( -900 );
 //                     vecZ.push_back( p[2] );
        }
 
@@ -2278,32 +2381,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 +2514,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 +2538,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 +2560,6 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
 
 
        totalZ  = maxZ-minZ+1;
-//EED01Juillet2009     _contourextractdata->SetImage( imagedata);
 
        _contourextractdata->InitVolumeStatistics();
 
@@ -2689,7 +2823,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 +2838,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 +2851,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 +2948,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)
@@ -2840,7 +2970,6 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value
        int z;
        int ii,sizeLstContourThings;
 
-
        double totalZ;
        double porcent;
 
@@ -2856,7 +2985,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++){
@@ -2922,47 +3050,73 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value
 
 }
 
-void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value)
+std::string wxContourMainFrame::GetStringTypeImage( vtkImageData* image)
 {
+       std::string result="";
+       if ( image->GetScalarType()==VTK_CHAR )
+       {
+               result="CHAR";
+       } else if ( image->GetScalarType()==VTK_UNSIGNED_CHAR ){
+               result="UCHAR";
+       } else if ( image->GetScalarType()==VTK_FLOAT ){
+               result="FLOAT";
+       } else if ( image->GetScalarType()==VTK_DOUBLE ){
+               result="DOUBLE";
+       } else if ( image->GetScalarType()==VTK_INT ){
+               result="INT";
+       } else if ( image->GetScalarType()==VTK_UNSIGNED_INT ){
+               result="UINT";
+       } else if ( image->GetScalarType()==VTK_SHORT ){
+               result="SHORT";
+       } else if ( image->GetScalarType()==VTK_UNSIGNED_SHORT ){
+               result="USHORT";
+       } else if ( image->GetScalarType()==VTK_LONG ){
+               result="LONG";
+       } else if ( image->GetScalarType()==VTK_UNSIGNED_LONG ){
+               result="ULONG";
+       }
+       return result;
+}
 
-       std::string temp = directory + "/" + namefile + "-Value.mhd";
+void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value)
+{
+       std::string stringType;
+       double spc[3];
+       kernelManager->GetSpacing(spc,0);   // returns the spacing of the first image
+       stringType              = GetStringTypeImage(value);
+       std::string temp = directory + "/" + namefile + "-image-Value-"+stringType+".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";
+       stringType              = GetStringTypeImage(mask);
+       temp = directory + "/" + namefile + "-image-Mask-"+stringType+".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("") );
@@ -3029,7 +3183,7 @@ void wxContourMainFrame::SetContourGroup(int contourGroup)
 
 wxPanel *wxContourMainFrame::getMaskImageViewPanel(wxWindow *parent)
 {
-
        if      (_viewMaskImagePanel==NULL)
        {
                _contourextractdata = new ContourExtractData(true);
@@ -3038,15 +3192,29 @@ wxPanel *wxContourMainFrame::getMaskImageViewPanel(wxWindow *parent)
 //             _theViewPanel->getImageData()->GetScalarRange(range);
                //int min = (int)floor (range[0]);
                //int max = (int)ceil (range[1]);
+
+//EED 2017-12-17
                int min = 254;
                int max = 256;
-               _viewMaskImagePanel = new ThresholdImageViewPanel( parent, -1, -1 , 0);
+
+               _viewMaskImagePanel = new ThresholdImageViewPanel( parent, -1, -1 , -1,-1,  0);
                _viewMaskImage = new ThresholdImageView();
-               _viewMaskImage->SetImage(_contourextractdata->GetVtkImageMaskResult() );
+               _viewMaskImage->SetImage( _contourextractdata->GetVtkImageMaskResult() );
                _viewMaskImage->SetminMaxValue( min, max);
                _viewMaskImage->SetBaseColor( 0,0,1 );
+
+
+               std::vector<int> colorbarposition;
+               colorbarposition.push_back( -999 );
+               colorbarposition.push_back( -999 );
+               _viewMaskImage->SetColorBarPosition( colorbarposition );
+               double spc[3];
+               _viewMaskImage->SetSpcBase( _theViewPanel->getImageData()->GetSpacing() );
+               _viewMaskImage->SetNewSpacingLayer( _theViewPanel->getImageData()->GetSpacing() );
+
                _viewMaskImagePanel->SetThresholdImageView( _viewMaskImage );
                _viewMaskImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() );
+               _viewMaskImage->onThresholdChangeOpacity( 25 );
        }
        return _viewMaskImagePanel;
 }
@@ -3060,12 +3228,23 @@ wxPanel *wxContourMainFrame::getColorLayerImageViewPanel(wxWindow *parent)
                _theViewPanel->getImageData()->GetScalarRange(range);
                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 = new ColorLayerImageViewPanel( parent, min, max, 100, 1);
+               _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetwxVtkBaseView( 0 , _theViewPanel->getWxVtkBaseView() );
+       //    std::vector<double> range = bbGetInputlstRangeForColorBar();
+       //    clivp->GetColorLayerImageViewManager()->SetRangeForColorBar( range );
+               std::vector<int> colorbarposition;
+               colorbarposition.push_back( 50 );
+               colorbarposition.push_back( 105 );
+               _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetColorBarPosition( colorbarposition );
+       //    std::vector<double> base_color;
+       //    _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetBaseColors( base_color );
+       //    std::vector<double> grey_level_boundaries;
+       //    clivp->GetColorLayerImageViewManager()->SetGreyLevelBoundaries( grey_level_boundaries );
+               std::vector<double> transparence_level_boundaries;
+               transparence_level_boundaries.push_back(0);
+               _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetBaseTransparence( transparence_level_boundaries );
+               _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetPlainOrGradientColor( false );
+//             _viewColorLayerImagePanel->SetFittingMode( 3 );
        }
        return _viewColorLayerImagePanel;
 }
@@ -3079,13 +3258,25 @@ wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent)
                _theViewPanel->getImageData()->GetScalarRange(range);
                int min = (int)floor (range[0]);
                int max = (int)ceil (range[1]);
-               _viewThresholdImagePanel = new ThresholdImageViewPanel( parent, min, max , 1);
+               int start= (max+min)/2 - (max-min)*0.25; 
+               int end= (max+min)/2 + (max-min)*0.25; 
+               _viewThresholdImagePanel = new ThresholdImageViewPanel( parent, min, max, start, end , 1);
                _viewThresholdImage = new ThresholdImageView();
+               _viewThresholdImage->SetminMaxValue(start,end);
                _viewThresholdImage->SetImage( _theViewPanel->getImageData() );
-               _viewThresholdImage->SetminMaxValue( min, max);
+               std::vector<int> colorbarposition;
+               colorbarposition.push_back( 10 );
+               colorbarposition.push_back( 105 );
+               _viewThresholdImage->SetColorBarPosition( colorbarposition );
+               double spc[3];
+               _viewThresholdImage->SetSpcBase( _theViewPanel->getImageData()->GetSpacing() );
+               _viewThresholdImage->SetNewSpacingLayer( _theViewPanel->getImageData()->GetSpacing() );
+
                _viewThresholdImage->SetBaseColor( 1,0,0 );
                _viewThresholdImagePanel->SetThresholdImageView( _viewThresholdImage );
                _viewThresholdImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() );
+               _viewThresholdImage->onThresholdChangeOpacity( 25 );
+               RefreshInterface();
        }
        return _viewThresholdImagePanel;
 }
@@ -3115,10 +3306,18 @@ double wxContourMainFrame::getContourSizeInPixels()
                std::string cloneName = currentSelection [0];
 
                manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
-               contourSize = manualModel-> GetPathSize();
+
+// EED 2017-05-30
+//             contourSize = manualModel->GetPathSize();
+               double spc[3];
+               spc[0]=1; 
+               spc[1]=1; 
+               spc[2]=1; 
+               contourSize = manualModel->GetPathSize( spc );
        }
        return contourSize;
 }
+
 manualBaseModel * wxContourMainFrame::getContour ()
 {
        std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
@@ -3148,9 +3347,16 @@ void wxContourMainFrame::onPrintLabel (wxString label, manualBaseModel* manualMo
 }
 void wxContourMainFrame::onInsertCalculation(manualBaseModel* manualModel)
 {
-       double sizeInPixel = manualModel ->GetPathSize();
+// EED 2017-05-30
+//     double sizeInPixel      = manualModel ->GetPathSize(  );
+       double spc[3];
+       spc[0]=1; // ????
+       spc[1]=1; // ????
+       spc[2]=1; // ????
+       double sizeInPixel      = manualModel ->GetPathSize( spc );
+
        double onePixelRealSize = interfMainPanel::getInstance()->GetPixelValue();;
-       double realContourSize = sizeInPixel*onePixelRealSize;
+       double realContourSize  = sizeInPixel*onePixelRealSize;
        manualModel ->SetRealSize(realContourSize);
 }
 
@@ -3170,3 +3376,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();
+}
+
+
+
+
+