]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
#3094 creaContours Bug New Normal - Contour information in pixels and image units...
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index 0b9b0093ca848863a0138a948bc5c5e52e9132bc..3d4413be34a071a8f99afdf762f7b8e8ee747966 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();
@@ -956,6 +972,46 @@ void wxContourMainFrame::onLoad()
 }
 
 
+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, bool interactiveInterface)
 {
        char tmp[255];
@@ -989,6 +1045,10 @@ void wxContourMainFrame::onLoadContours(std::string fileNameContourROI, bool int
                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.3")
@@ -996,15 +1056,16 @@ void wxContourMainFrame::onLoadContours(std::string fileNameContourROI, bool int
                    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
+                       readDimSpc(pFile,interactiveInterface); // DimSpc interactive ON
                        openContours(pFile,pFileData,false);
-                   readDimSpc(pFile,false);  // DimSpc interactive OFF
-                       openContours(pFile,pFileData,true);     //Load StaticContours
+                       readDimSpc(pFile,false);                // DimSpc interactive OFF
+                       openContours(pFile,pFileData,true);     // Load StaticContours
+                       SetZForAllContours(-900);
                }
 
                //AD:02-06-09
@@ -1029,7 +1090,6 @@ void wxContourMainFrame::onLoadContours(std::string fileNameContourROI, bool int
        }
        _theViewPanel->getSceneManager()->removeSceneContours();
        changeInstant();
-
 }
 
 
@@ -1134,11 +1194,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);
 //------------------------------------------------------------------------------------------------------------
@@ -1204,7 +1275,7 @@ void wxContourMainFrame::readDimSpc(FILE *pFile, bool interactiveOption)
                //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])
                {
-                       wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(260,160));
+                       wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(460,360));
                        wxSizer* buttonsSizer = dial->CreateSeparatedButtonSizer(wxOK|wxCANCEL);
                        wxBoxSizer *dialSizer = new wxBoxSizer(wxVERTICAL);
 
@@ -1475,7 +1546,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();
@@ -1515,7 +1586,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 =
@@ -1548,7 +1624,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 );
@@ -1624,7 +1705,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( );
@@ -1797,7 +1877,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();
 
@@ -1847,6 +1928,7 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
                 caster5->SetOutputMinimum(   0 );
                 caster5->SetOutputMaximum( 255 );
                 writer5->Update();
+*/
     }
   catch( itk::ExceptionObject & excep )
     {
@@ -2320,35 +2402,25 @@ void wxContourMainFrame::onSpreadAdd(){
 
 
 void wxContourMainFrame::onSpreadAddAll(){
-    printf("EED wxContourMainFrame::onSpreadAddAll \n");
 //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();
-
-               printf("EED wxContourMainFrame::onSpreadAddAll z=%d size=%d\n",z,sizeLstContourThings);
-
                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();
@@ -2359,17 +2431,11 @@ void wxContourMainFrame::onSpreadAddAll(){
                                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);
-
-               printf("EED wxContourMainFrame::onSpreadAddAll       ->  val=%s\n",val.c_str() );
-
-        }
-
-    }
-
+        }// if sizeLstContourThings
+    } // for z
 }
 
 
@@ -2449,7 +2515,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;
@@ -2474,8 +2539,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;
 
@@ -2498,7 +2561,6 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
 
 
        totalZ  = maxZ-minZ+1;
-//EED01Juillet2009     _contourextractdata->SetImage( imagedata);
 
        _contourextractdata->InitVolumeStatistics();
 
@@ -2762,7 +2824,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 );
@@ -2778,7 +2839,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;
@@ -2792,7 +2852,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++)
@@ -2890,7 +2949,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)
@@ -2929,7 +2987,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++){
@@ -2998,44 +3055,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("") );
@@ -3133,12 +3187,8 @@ 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() );
        }
        return _viewColorLayerImagePanel;
 }
@@ -3188,10 +3238,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();
@@ -3221,9 +3279,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);
 }
 
@@ -3243,3 +3308,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();
+}
+
+
+
+
+